在jquery中选择根元素

Sqo*_*qoo 7 jquery jquery-selectors

我需要能够在不知道节点类型,类,id或层次结构的情况下从片段中选择根元素.

<div id="0">
    <div id="0a">
        <div id="a01"></div>
    </div>
    <div id="0b">
    </div>
    <div id="0c">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望能够执行类似$(':root')的操作,并在上面的示例中选择0.

更好的是我更喜欢$(':level(0)')哪个意思与上面相同,$(':level(1)')选择0a,0b和0c并$(':level(1)>div')选择a01.

关于如何巧妙地做到这一点的任何想法?

Peb*_*bbl 3

虽然这个问题不久前得到了完全正确的回答 - 我只是想自己尝试一下,并不太热衷于使用像这样的选择器*:not(* *)- 主要是因为可能的开销。我不知道这是否是 jQuery 最近添加的功能(我使用的是 1.8),但你可以使用:

$(':eq(0)');
Run Code Online (Sandbox Code Playgroud)

这将选择第一个找到的非文本节点元素,因此除非您正在遍历的 dom 在其形成中是非法的,否则您应该始终获取根元素。它也是高度优化的,因为 jQuery 应该知道在找到第一个元素后停止。

所以这里有一些东西适合所有 WSOD 粉丝:

$(':eq(0)').remove();
Run Code Online (Sandbox Code Playgroud)

哦,以防万一,上面的代码片段只是说明选择器并不明显,并且您发现自己正在使用部分片段(而不是完整文档),那么您应该将此选择器与 jQuery 的过滤方法一起使用:

$(fragment).filter(':eq(0)');
Run Code Online (Sandbox Code Playgroud)

但是,在使用片段时,您可以执行以下操作:

$(fragment).get(0);
Run Code Online (Sandbox Code Playgroud)

尽管请记住,.get(0)如果文本/注释节点是文档中的第一项,则可以选择它们,而过滤器方法将始终找到第一个实际元素。