如何告诉jQuery在找到第一个元素时停止搜索DOM?

ser*_*erg 25 jquery

根据我的理解,添加.first():first查询不会在第一次匹配后停止DOM搜索.它只是告诉jQuery从匹配的集合中取出第一个元素.

如果这是真的,那么有没有办法在第一场比赛后停止DOM搜索?例如,如果我知道此查询的结果将始终是单个元素,那么如何告诉jQuery不要浪费时间进一步搜索?

bob*_*nce 13

据我所知,目前jQuery无法做到这一点.你能做的最好的是$(selector).first(),selector标准的CSS选择器在哪里,不包括任何特定于Sizzle的选择器(所以不要使用:first).在这种情况下,jQuery querySelectorAll在现代浏览器中使用快速DOM 方法.

您可以使用DOM querySelector方法手动获取优化,该方法仅用于选择第一个匹配项:

$.getFirst= function(selector) {
    if ('querySelector' in document)
        return $(document.querySelector(selector));
    else
        return $(selector).first();
}
Run Code Online (Sandbox Code Playgroud)

但是,通过这样做可以节省的金额远远小于您确保querySelectorAll可以使用的节省金额.


Moi*_*man 5

:first只匹配一个元素.它相当于:eq(0).

.first() 将匹配元素集合减少到集合中的第一个元素.

所以使用:first它看起来就像你需要的那样,但仔细观察它们都会首先使用选择器找到一个集合然后继续使用第一个集合.

这里这里有一些评论和讨论似乎表明:first()不会停留在第一个元素.

参考文献:

http://api.jquery.com/first-selector/

http://api.jquery.com/first/

  • `:first`选择器和`.first()`方法都构建了所有匹配元素的列表,然后才获取第一个结果,丢弃其余元素.OP正在寻求优化,以避免首先收集多余的元素. (8认同)
  • @bobince:谢谢你的伙计,让我做更多的研究,并试着找出真正背后的东西. (2认同)