我不明白为什么以下代码不起作用。 (jQuery 1.6.4)
HTML:
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test me"></div>
<div class="test me"></div>
<div class="test me"></div>
JS:
var rows = $([]);
console.debug('Divs we want: ', $('div:not(.me)').length);
console.debug('Rows before: ', rows.length);
$('div:not(.me)').each(function() {
if (1==1) { // some conditional
console.debug($(this));
rows.add($(this));
}
});
console.debug('Rows after: ', rows.length);
答案 0 :(得分:7)
add()从它所调用的内容和你提供的参数中构建并返回一个新的jQuery对象。它不会更新它所调用的对象。
你可能想写:
rows = rows.add(this);
顺便说一下,从jQuery 1.4开始,构造空jQuery对象的规范方法是在没有参数的情况下调用$()
:
var rows = $();
答案 1 :(得分:5)
原因是add
返回带有添加元素的新jQuery对象。它不会内联修改现有的jQuery对象。您需要捕获此结果。改变
rows.add($(this));
到
rows = rows.add($(this));
注意:正如Rocket指出的那样,删除额外的对象并简单地说
就简单得多了rows = rows.add(this);