2012-07-17 40 views
0

我有一個JS-hash,其中包含一個密鑰length(它表示與散列長度完全不同的東西),需要遍歷它。jQuery:迭代包含密鑰長度的散列

問題是jQuery.each拒絕對此進行迭代,因爲它檢測到length屬性並指出它必須是數組或類似數組的對象。

從jQuery文檔:

陣列,並用長度屬性陣列狀物體(例如,函數的參數對象)>通過數字索引重複,從0到長度-1。其他對象通過它們的 命名屬性進行迭代。

This JS fiddle說明了這個問題。

那麼,這是所有記錄和理解。但如何處理,如果我只是屬性名爲length?在迭代散列之前和之後,我是否必須做一個痛苦的重命名,還是有可能告訴jQuery忽略這個屬性並像其他對象屬性一樣對待它?

預先感謝了很多!

回答

2

如何不使用jquery.each但是......

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

修訂 忘了與消毒以防萬一「hasOwnProperty」環......

+0

謝謝,我認爲這是訣竅! – Remo 2012-07-17 08:46:55

1

這裏有一個快速補丁修復行爲:

(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/