如何获取 jQuery 对象的大小

发布于 2024-10-05 15:57:24 字数 353 浏览 2 评论 0原文

我使用以下方法将键值对保存在 div 容器中:

$( '#div_id').data( key, value);

最后,我需要检查此 div 容器中是否存储了任何内容。

因此,首先我通过调用以下方法获取内容:

var data = $( '#div_id').data();

然后使用 data.length 或 data.size 检查其大小。

但这两个功能都不存在。据我所知,jquery 中的数据函数返回一个对象,所以我应该能够获取该对象的大小。

jquery中如何获取data函数返回的对象的大小?

I'm saving key-value pairs in div container by using:

$( '#div_id').data( key, value);

At the end I need to check if anything is stored in this div container.

So first I get the content by calling:

var data = $( '#div_id').data();

Then to check its size with data.length or data.size.

But both functions don't exists. As I know the data function in jquery returns an object, so I should be able to get the size of this object.

How do I get the size of the object returned by the data function in jquery?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

孤单情人 2024-10-12 15:57:24

对象没有“大小”。不过,您可以计算它的属性:

function getPropertyCount(obj) {
    var count = 0,
        key;

    for (key in obj) {
        if (obj.hasOwnProperty(key)) {
            count++;
        }
    }

    return count;
}

用法:

alert(getPropertyCount(data));

Objects do not have a "size". You could count its properties, though:

function getPropertyCount(obj) {
    var count = 0,
        key;

    for (key in obj) {
        if (obj.hasOwnProperty(key)) {
            count++;
        }
    }

    return count;
}

Usage:

alert(getPropertyCount(data));
总攻大人 2024-10-12 15:57:24

将这些键/值对存储在对象/节点上的这个级别并不是最好的主意。

var data = $( '#div_id').data();

返回附加到此节点的所有数据,这将包括事件处理程序,例如有任何数据。

因此,最好的解决方案是创建一个包含所有数据的对象:

$('#div_id').data('mydata', {});
/* ... */
$('#div_id').data('mydata')[key] = value;

针对您的实际问题。普通 Javascript 对象不拥有 .length 属性。您必须自己检查,循环遍历键:

var mylen = 0;
for(var prop in $('#div_id').data('mydata')) {
    mylen++;  
}

这应该通过检查和调用 .hasOwnProperty() 方法来改进,该方法确保当前属性不是从原型中的某个地方继承的链。

It's not the best idea to store those key/value pairs at this level on the object/node.

var data = $( '#div_id').data();

returns all data that is attached to this node, this would include event handlers for instance of there are any.

So the best solution is to create an object which contains all of your data:

$('#div_id').data('mydata', {});
/* ... */
$('#div_id').data('mydata')[key] = value;

To your actual question. Plain Javascript objects do not own a .length property. You have to check that for yourself, looping over the keys:

var mylen = 0;
for(var prop in $('#div_id').data('mydata')) {
    mylen++;  
}

This should be improved by also checking and calling the .hasOwnProperty() method which makes sure that the current property is not inheritated from somewhere in the prototype chain.

痴梦一场 2024-10-12 15:57:24

你知道你用的是什么“钥匙”吗?如果是这样,只需检查键,如果不是,存储一个对象或数组

例如

var myStuff = {};
myStuff.date = new Date();
myStuff.name = "Santa Claus";
myStuff.lifeStory = "Once upon a time...";
$('#div_id').data('myData', myStuff);

,然后当您需要它时,只需抓住那个键...

var data = $('#div_id').data('myData');

请记住,JavaScript 对象/“地图”没有“长度”或“大小”方法/属性,因此如果您需要检查如果它包含某些东西,像这样的通用函数应该可以工作。

function isObjEmpty(obj){
  for(var i in obj){
    return false;
  }
  return true;
}

Do you know what "keys" you were using? if so, just check the keys, if not, store an Object or Array instead.

e.g.

var myStuff = {};
myStuff.date = new Date();
myStuff.name = "Santa Claus";
myStuff.lifeStory = "Once upon a time...";
$('#div_id').data('myData', myStuff);

Then when you need it back out, just grab that one key...

var data = $('#div_id').data('myData');

Keep in mind, that JavaScript Objects/"Maps" don't have a "length" or "size" method/property, so if you need to check if it contains something, a generic function like this should work.

function isObjEmpty(obj){
  for(var i in obj){
    return false;
  }
  return true;
}
场罚期间 2024-10-12 15:57:24

Javascript 对象没有长度属性。但您可以使用简单的 jQuery 函数轻松计算它。

$.fn.dataLength = function () {
    var i,
        n = 0,
        t = $(this);
    for (i in t.data()) {
        n += 1;
    }

    return n;
}

然后将其与 $('#div_id').dataLength()

编辑 一起使用:

注意有关 .data 中的数据结构和 .hasOwnProperty 检查的其他答案

Javascript Objects doesn't have an length property. But you could easily calculate it with a simple jQuery function.

$.fn.dataLength = function () {
    var i,
        n = 0,
        t = $(this);
    for (i in t.data()) {
        n += 1;
    }

    return n;
}

Then use it with $('#div_id').dataLength()

EDIT:

Mind the other answers about the data-structure in .data and the check for .hasOwnProperty

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文