我正在尝试使用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
}
}
我该如何解决这个问题?
答案 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);
});