如何获取jQuery对象的大小

5

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

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

最后,我需要检查这个

容器中是否存储了任何内容。

因此,首先我通过调用以下命令来获取内容:

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

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

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

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


重复?https://dev59.com/E0zSa4cB1Zd3GeqPmm4o - kafuchau
如果您想检查特定的键是否在data()中,请使用以下代码:if ('key_name' in $('#div_id').data()) - fredrik
4个回答

10

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

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

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

    return count;
}

用法:

alert(getPropertyCount(data));

这应该是 for (var key in obj) { 吗? - El Ronnoco
我猜他更担心你的代码片段中没有声明 data - jAndy
@jAndy:抱歉,已修复。 - jwueller

2

在对象/节点的这个级别存储键值对并不是最好的选择。

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

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

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

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

对于你实际提出的问题,纯Javascript对象并没有.length属性。你需要自己检查,循环遍历键(keys):
var mylen = 0;
for(var prop in $('#div_id').data('mydata')) {
    mylen++;  
}

应该通过检查并调用.hasOwnProperty()方法来改进,以确保当前属性不是从原型链中继承而来。


1
你知道你使用了哪些“键”吗?如果知道,只需检查这些键;如果不知道,请存储一个对象或数组
例如:
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;
}

0
Javascript对象没有length属性。但是你可以使用一个简单的jQuery函数轻松计算它。
$.fn.dataLength = function () {
    var i,
        n = 0,
        t = $(this);
    for (i in t.data()) {
        n += 1;
    }

    return n;
}

然后使用它与$('#div_id').dataLength()一起使用

编辑:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接