0

for..in ループを使用して変数内のオブジェクトを選択しようとしていますが、必要な Li オブジェクトが表示されません。

var mUlLi = $(mUl).find('>li');      //select all li's in main Ul   
var listLength = $(mUlLi).length;
if(listLength >0 ){
    /*for(i=0;i <listLength; i++) {
        console.log(mUlLi[i]);   // works fine show the li objects  
    }*/
    for(var obj in mUlLi) {
        console.log(obj);   // show's diff objects
    }
}

どうすればこれを修正できますか?

4

4 に答える 4

5

jQueryにはeach()同じことをするがあります。

$(mUl).find('>li').each(function(){ //for each of the elements found
    console.log(this);              //in here, "this" is the DOM element <li>
});

jQueryオブジェクトでを使用した場合はfor in、jQueryのメソッドとプロパティもループします。

ただし、forそのjQueryから取得した要素に対して本当にループを実行したい場合(使用したくないためeach())、直接実行します。

var nodes = $(mUl).find('>li'),
    nodesLength = nodes.length,
    i, node;

for(i=0,i<nodesLength;i++){
    node = nodes[i];
}
于 2012-05-11T06:06:10.950 に答える
2

これを修正するには、適切な方法を使用して配列を反復処理します。これは、配列要素/インデックスを反復処理するためのものではなく、オブジェクトのプロパティを対象としたものです。これは、ここでは必要ありませfor(.. in ..)

次の方法でjQueryを使用するだけ.each()です。

mUlLi.each(function() {
    console.log(this);
});

何らかの理由でこれを望まない場合(おそらく正当な理由ではありません!)、古き良きforループを使用することもできます。

for(var i = 0; i < listLength; i++) {
    var elem = mUlLi[i];
    console.log(elem);
}
于 2012-05-11T06:05:52.443 に答える
2

mUlLi(問題のある変数名)は通常のオブジェクトではなく、jQueryコレクションです。で繰り返すことができますeach()

mUlLi.each(function(){
   // `$(this)` is the current jQuery element
})
于 2012-05-11T06:07:06.543 に答える
2

jQuery の each 関数を使ってみてはどうでしょうか。

http://api.jquery.com/jQuery.each/

$(mUl).find('>li').each(function(i,v) {
    console.log(v);
});
于 2012-05-11T06:10:04.320 に答える