2011-05-10 24 views
2

我正在循環瀏覽一些無序列表,我想通過僅使用已保存的選擇器(兩者都用jquery對象包裝)來獲取所有後代。如何使用已保存的jquery對象查找後代

這裏是我的示例HTML:

<ul> 
    <li><a href="#">item 1</a></li> 
    <li><a href="#">item 2</a></li> 
    <li><a href="#">item 3</a></li> 
    <li><a href="#">item 4</a></li> 
    <li><a href="#">item 5</a></li> 
</ul> 

<ul> 
    <li><a href="#">item 6</a></li> 
    <li><a href="#">item 7</a></li> 
    <li><a href="#">item 8</a></li> 
    <li><a href="#">item 9</a></li> 
    <li><a href="#">item 10</a></li> 
</ul> 

<ul> 
    <li><a href="#">item 11</a></li> 
    <li><a href="#">item 12</a></li> 
    <li><a href="#">item 13</a></li> 
    <li><a href="#">item 14</a></li> 
    <li><a href="#">item 15</a></li> 
</ul> 

<ul> 
    <li><a href="#">item 16</a></li> 
    <li><a href="#">item 17</a></li> 
    <li><a href="#">item 18</a></li> 
    <li><a href="#">item 19</a></li> 
    <li><a href="#">item 20</a></li> 
</ul> 

這裏是我的樣品JS:

$(document).ready(function() { 

    allUls = $('ul'); 
    allAs = allUls.find('a'); 

    // shouldn't this next line get all anchors within the second unordered list? 
    console.log(allUls.eq(1).find(allAs)); 

}); 

所以它就在那裏。我期待着將第二個列表的後代發送到控制檯的一組錨。但事實並非如此。

您可以看到自己在我的jsfiddle例如:http://jsfiddle.net/u6uf4/

我也願意接受你的任何「更好」的解決方案。請記住,我只想使用保存的選擇器,並且希望避免爲此任務創建任何新的選擇器。

感謝您爲幫助Jquery-er而付出的努力!

回答

5

到jQuery對象傳遞給find()選項是最近纔在1.6版增加。你的jsfiddle例子使用版本1.5.2。選擇左側的最新jQuery版本以使其工作。

+0

哈哈。我讚賞你在答案中禁止使用「延遲」和「白癡」等詞語。因爲我絕對感覺像一個。感謝您陳述明顯。 :) – Johnny 2011-05-10 16:46:00

+1

別擔心,大家都知道這種感覺。這就是我們如何知道什麼時候到外面去喝點東西:)。 – DarthJDG 2011-05-10 16:55:20

1

關閉,但不需要按allAs進行過濾,只需按'a'進行過濾。

allUls.eq(1).find('a') 
+0

但是你不應該只能傳遞一個jquery對象嗎? http://api.jquery.com/find/ – Johnny 2011-05-10 15:33:51

+0

我寧願不必再遍歷dom,你知道嗎? – Johnny 2011-05-10 15:35:21

+0

是的,但你會使用過濾器,而不是找到,但你在做什麼是簡單和容易做到.find('a')。我用兩個選項編輯我的答案 – UpHelix 2011-05-10 15:35:36