2010-05-29 61 views
1

我有一个任意深度的名单,像这样:如何使用jQuery选择列表中有孩子的所有元素?

<ul> 
<li></li> 
<li> 
    <ul> 
    <li></li> 
    <li> 
     <ul> 
     <li></li> 
     <li></li> 
     </ul> 
    </li> 
    </ul> 
</li> 

使用jQuery,我怎么能在这是叶节点列表中选择每华里。换句话说,我想选择所有具有儿童UL的li元素。

感谢您的帮助!

回答

2

这里的另一种选择:

$('li ul').closest('li') 

这很可能是一个公平位快于:has现代的浏览器,因为它会使用本地querySelectorAll方法上的主要选择。 :has不能使用本地支持,因为它不是一个标准的CSS选择器,而是一个jQuery扩展。

+0

相关提示谢谢。 – Travis 2010-05-29 13:57:59

+0

我试过这个与'$('li:has(ul)');'在Chrome和FF中,后者约快了30%左右。我认为这不如表面上看起来效率高。无论是否使用本机选择器引擎,选择器仍然是以相反的方式解析(AFAIK)...因此,所有'ul'元素都被获取,然后检查每个祖先链的'li'元素。然后...每个符合'ul'被提交给与'nearest()'相同的例程...... – James 2010-05-29 16:48:43

+0

因此,总结起来,'li ul'很快......但只有当你真的想要'ul'时,元素。对'nearest()'的调用使得这个解决方案比使用':has'更有效率。 – James 2010-05-29 16:50:21

相关问题