使用for..in循环遍历一个对象

时间:2012-05-11 06:04:51

标签: javascript jquery

我正在尝试使用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 个答案:

答案 0 :(得分: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方法和属性。

但是,如果你真的想对从jQuery获得的元素进行for循环(因为你不想使用each()),那么直接执行:

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

for(i=0,i<nodesLength;i++){
    node = nodes[i];
}

答案 1 :(得分:2)

你可以通过使用正确的方法迭代一个数组来解决这个问题 - for(.. in ..) NOT 意味着迭代数组元素/索引但是对于对象属性 - 这不是你的意思想要来这里。

只需使用 jQuery方式通过.each()

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

如果由于某种原因你不想要这个(可能不是一个正当理由!),你也可以使用一个好的旧for循环:

for(var i = 0; i < listLength; i++) {
    var elem = mUlLi[i];
    console.log(elem);
}

答案 2 :(得分:2)

mUlLi(有问题的变量名)不是常规对象,是jQuery集合。您可以使用each()进行迭代。

mUlLi.each(function(){
   // `$(this)` is the current jQuery element
})

答案 3 :(得分:2)

如何使用jQuery的每个功能?

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

$(mUl).find('>li').each(function(i,v) {
    console.log(v);
});