我需要能够在不知道节点类型,类,id或层次结构的情况下从片段中选择根元素.
<div id="0"> <div id="0a"> <div id="a01"></div> </div> <div id="0b"> </div> <div id="0c"> </div> </div>
我希望能够执行类似$(‘:root’)的操作,并在上面的示例中选择0.
更好的是我更喜欢$(‘:level(0)’),这意味着与上面相同,$(‘:level(1)’)将选择0a,0b和0c以及$(‘:level(1)> ; div’)将选择a01.
关于如何巧妙地做到这一点的任何想法?
解决方法
虽然这个问题在很久以前就得到了很好的回答 – 我只是想尝试自己尝试,并且不太热衷于使用像*:not(* *)这样的选择器 – 主要是因为可能的开销.我不知道这是否是jQuery的最新功能(我使用的是1.8),但你可以使用:
$(':eq(0)');
这将选择第一个找到的非textnode元素,所以除非你正在遍历的dom在它的形成中是非法的,否则你应该总是得到根元素.它也是非常优化的,因为jQuery应该知道在找到第一个元素后停止.
所以这里有一些适合所有WSOD粉丝的东西:
$(':eq(0)').remove();
哦,以防万一上面的代码片段只是说明选择器并且你发现自己处理部分片段(而不是完整的文档)并不明显,那么你应该使用这个选择器和jQuery的filter方法:
$(fragment).filter(':eq(0)');
但是,使用片段时,您可以执行以下操作:
$(fragment).get(0);
虽然请记住.get(0)可以选择文本/注释节点,如果它们是文档中的第一个项目,而过滤器方法将始终找到第一个实际元素.