2011-10-27 32 views
2

我不明白爲什麼下面的代碼不起作用。 (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 = $(); 
+0

啊,謝謝,我沒有意識到jQuery正在用這個調用創建一個新的集合:) – Muers

5

之所以是add返回與所添加的元素的新jQuery對象。它不會修改內聯的現有jQuery對象。你需要捕獲這個結果。更改

rows.add($(this)); 

rows = rows.add($(this)); 

注:火箭指出,這是更簡單的刪除多餘的對象,簡單地說

rows = rows.add(this); 
+1

注意:您可以執行'rows = rows.add(this);',將調用保存到jQuery函數中。 –

+0

@火箭的確如此。更新了我的答案。謝謝! – JaredPar