1

lengthキー(ハッシュの長さとは完全に異なるものを表す)を含むJSハッシュがあり、それを反復処理する必要があります。

問題は、属性を検出し、それが配列または配列のようなオブジェクトである必要があることを認識しているjQuery.eachため、これを繰り返すことを拒否していることです。length

jQueryのドキュメントから:

長さプロパティを持つ配列および配列のようなオブジェクト(関数のargumentsオブジェクトなど)>は、0からlength-1までの数値インデックスによって繰り返されます。他のオブジェクトは、名前付きのプロパティを介して繰り返されます。

このJSフィドルは問題を示しています。

まあ、それはすべて文書化されて理解できるものです。しかし、属性という名前の属性ある場合はどうすればよいlengthですか?ハッシュを繰り返す前後に面倒な名前の変更を行う必要がありますか、それともこのプロパティを無視して他のオブジェクト属性と同じように扱うようにjQueryに指示する可能性はありますか?

よろしくお願いします!

4

2 に答える 2

3

jquery.eachを使用しないのはどうですか...

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

UPDATED は、万が一の場合に備えて、「hasOwnProperty」でループをサニタイズするのを忘れていました...

于 2012-07-17T08:44:50.783 に答える
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/

于 2012-07-17T08:50:15.970 に答える