2015-04-02 33 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