2015-04-02 63 views
2

爲什麼我不能得到所需的結果,從這個代碼:JQuery的兒童()找到(x)返回壞的結果 - prevObject

element.children().find('ul').first(); 

它返回prevObject。

當我使用:

element.children('ul') 

它運作良好。我不明白有什麼區別。

我的HTML是這樣的:

<div> 
    <ul> 
     <li>adssfsdf</li> 
     <li>dfdfghdfh</li> 
    </ul> 
</div>  

您可以在jsfiddle看到這個問題。

+0

這一發現將搜索只後代元素..沒有祖先元素..('div')。children()。find('ul')'你試圖找到一個'ul',它是一個元素的後代,它是'div'元素的子元素 – 2015-04-02 04:26:12

+0

)我認爲你需要的是'element.children('ul');' – 2015-04-02 04:27:19

+0

( – 2015-04-02 04:27:49

回答

0

jquery docs

.find(選擇器)

說明:獲取每個元素的後代在當前匹配的元素,通過一個選擇器,jQuery對象,或元件過濾。

所以element.find('ul')得到所有的element

ul孩子如果要使用find

得到ul你應該說

element.find('ul').first(); 

updated fiddle

0

find搜索匹配選擇器的後代。 children搜索與選擇器匹配的子項。說你有這個樹:

A -> B -> C -> D 

然後,

$(".A").children() // B 

$(".A").find() // B, C, D 

$(".A").children().find() // C, D 

爲什麼最後一個發現只有CD?因爲它搜索孩子的後代。

在你的情況 - 你首先得到的孩子,然後搜索這些孩子的後代ul。但孩子們沒有後代,而你沒有結果。當你做.children('ul'),你正在尋找ul的孩子 - 而且確實有這樣一個。

0

檢查孩子,並在這裏清楚地找到功能。我也提到了評論。

<div> 
    <ul> 
     <li>adssfsdf</li> 
     <li>dfdfghdfh</li> 
    </ul> 
</div> 

$('div').children('ul').css({'color':'red'}); // children ul inside div 
$('div').children('ul:first').css({'color':'red'}); // first ul inside div 
$('div').find('ul').css({'color':'blue'}); // ul inside div 
$('div').children('ul').find('li:first').css({'color':'green'}); // first li of ul inside div 

檢查她也:https://jsfiddle.net/aezyjgtt/2/

0
element.children().find('ul').first() 
as per your html 
element.children() return the ul element 
element.children().find('ul') return nothing as you are finding the ul inside ul element 
Because of this your css is not applying. 

Updated fiddle