【问题标题】:jQuery: Iterating a hash containing a key 'length'jQuery:迭代包含键“长度”的哈希
【发布时间】:2012-07-17 08:39:41
【问题描述】:

我有一个 JS-hash,其中包含一个键 length(它表示与散列长度完全不同的东西)并且需要对其进行迭代。

问题在于jQuery.each 拒绝对此进行迭代,因为它检测到length 属性并认为它必须是一个数组或类似数组的对象。

来自 jQuery 文档:

具有长度属性的数组和类数组对象(例如函数的参数对象)> 通过数字索引迭代,从 0 到 length-1。其他对象通过它们的迭代 命名属性。

This JS fiddle 说明了问题。

嗯,所以这一切都记录在案并且可以理解。但是,如果我只是拥有一个名为length 的属性,该怎么办?我是否必须在迭代哈希之前和之后进行痛苦的重命名,或者是否有可能告诉 jQuery 忽略此属性并将其视为任何其他对象属性?

非常感谢!

【问题讨论】:

    标签: jquery hash key loops


    【解决方案1】:

    不使用 jquery.each 但是...

    for (var key in testHash2) {
        if (testHash2.hasOwnProperty(key)) {
            $('#result').append($('<li />').text(key + ':' + testHash2[key]));
        }
    }
    

    更新 忘记用“hasOwnProperty”清理循环以防万一......

    【讨论】:

      【解决方案2】:

      这里有一个修复该行为的快速补丁:

      (function($,undefined){
          var initialEach = $.each;
          $.each = function(obj,fn){
             if($.isArray(obj) || obj.length === undefined)
                 return initialEach.apply(this,arguments);
             // else iterate over the object that contains a 'length' property
             for(var key in obj)
                 if(obj.hasOwnProperty(key))
                      fn.call(obj[key],key,obj[key]);
          };
       })(jQuery);  
      

      这里有一个现场演示来解决问题:http://jsfiddle.net/gion_13/vwWm6/

      【讨论】:

        猜你喜欢
        • 2013-04-30
        • 2017-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-02
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        相关资源
        最近更新 更多