2011-08-10 67 views
2

让我们说,我有这样的代码:jQuery对象包含什么?

<ul> 
    <li><strong>list</strong> item 1 - 
    one strong tag</li> 
    <li><strong>list</strong> item <strong>2</strong> - 
    two <span>strong tags</span></li> 
    <li>list item 3</li> 
    <li>list item 4</li> 
    <li>list item 5</li> 
    <li>list item 6</li> 
</ul> 

<script> 
    var x = $("li"); 
    for (var k in x){ 
     alert(k + x[k]); 
    } 
</script> 

的问题是:报警输出的东西太多了!为什么? 为什么不输出li元素? li元素的存储位置? 我如何只输出jQuery方法通常应用的li元素?

+1

别人这是什么输出? http://jsfiddle.net/d5beA/ –

+0

每个使用jQuery,你正在做的是显示一个集合的成员/方法。 – Sleeperson

回答

3

使用for...in结构也将遍历所有属性,包括所有属性通过原型链继承,这就是为什么你会得到所有属性提醒的对象,以及匹配的li元素集。

如果使用普通for循环(或者,正如其他人所指出的,jQuery的each法),它的工作:

var x = $("li"); 
for (var k = 0; k < x.length; k++){ 
    alert(k + x[k]); 
} 
+0

+1'for ... in'是迭代数组或数组对象的**错误**方式。 –

3

它会提醒整个原型链。使用jQuery(javascript)中的每个函数遍历li元素。此外,对于in不建议作为迭代对象的正确选择。

1

jQuery“对象”不仅包含DOM节点引用。如果你像这样循环(for..in),你会得到所有直接在对象上并通过原型链继承的属性。您只需要使用jQuerys自己.each()方法遍历它れ引用:

x.each(function(index, node) { 
    console.log('Hi, I am at index ', index, ' and my reference is: ', node); 
});