【问题标题】:How to get size of jQuery object如何获取 jQuery 对象的大小
【发布时间】:2010-12-03 14:13:09
【问题描述】:

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

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

最后我需要检查这个 div 容器中是否存储了任何东西。

所以首先我通过调用来获取内容:

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

然后用 data.length 或 data.size 检查它的大小。

但这两个函数都不存在。我知道 jquery 中的 data 函数返回一个对象,所以我应该能够得到这个对象的大小。

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

【问题讨论】:

标签: jquery object size


【解决方案1】:

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

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) { 吗?
  • 我猜他更担心data没有在你的sn-p中声明。
  • @jAndy:很抱歉。现已修复。
【解决方案2】:

在对象/节点的这一层存储这些键/值对并不是最好的主意。

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

返回附加到此node 的所有数据,这将包括event handlers,例如有任何数据。

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

$('#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() 方法来改进,该方法确保当前属性不是从原型链中的某处继承的。

【讨论】:

    【解决方案3】:

    你知道你用的是什么“钥匙”吗?如果是,请检查密钥,如果不是,store an Object or Array instead

    例如

    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;
    }
    

    【讨论】:

      【解决方案4】:

      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 的其他答案

      【讨论】:

        猜你喜欢
        • 2010-11-17
        • 1970-01-01
        • 2010-09-24
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多