为什么$ .add()不按预期工作?尝试手动构建jQuery集合

时间:2011-10-27 15:28:56

标签: jquery

我不明白为什么以下代码不起作用。 (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);

2 个答案:

答案 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);