ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何匹配单个后代(如$.find())而不在搜索结果后搜索其余的DOM树?

2019-06-24 22:21:53  阅读:174  来源: 互联网

标签:jquery javascript jquery-mobile


我正在使用JQueryJQuery mobile,不幸的是我需要使用$.find()方法来搜索元素的所有后代.

很多时候,我知道只会有一个结果.但是在找到可能是非常早期的匹配之后,find方法将继续遍历整个树.你的第一个想法可能是我应该导航到我期望元素的位置,但这对我的一些查询来说真的是不可能的.

有没有办法像$.find()这样的完整后代搜索在识别第一个匹配后停止搜索?

解决方法:

这取决于你的选择器.除非您使用特定于jquery的选择器或诸如.someclass,#someid或div之类的选择器,否则jquery会将选择器直接传递给element.querySelectorAll(),后者使用浏览器的选择器引擎来完成工作.因此,jquery不会遍历所有元素,这意味着当它找到第一个元素时无法使其“停止”,它会找到它们然后全部给它们.你可以使用element.querySelector()并跳过jQuery让浏览器只返回第一个匹配,但是否显着更快将取决于浏览器如何实现这些方法. (由于不使用jQuery,它总是会更快一些,但是看一下jsperf,看起来使用querySelector而不是querySelectorAll通常会更快)

现在,当涉及到包含仅jQuery选择器的选择器时,只需省略来自.find的那些仅jquery选择器,而是在.filter中使用它们,这样你首先使用更高效的element.querySelectorAll(),然后过滤只有jQuery only选择器的结果.

例如,.find(“.foo:button”)将更有效地写为.find(“.foo”).filter(“:button”)

https://developer.mozilla.org/en-US/docs/Web/API/element.querySelector

http://jsperf.com/queryselectorall-vs-getelementbyid/35

jQuery没有在jsperf中使用,但由于jQuery选择元素的方式在很大程度上依赖于jsperf中使用的相同方法,我认为它是相关的.例如,按ID选择的jQuery选择器与按类选择的jQuery选择器应该看到getElementById和getElementsByClassName之间的性能差异.

也,
目前有一个功能请求打开一个方法,可以自动为您切换:http://bugs.jquery.com/ticket/11785它被阻止,因为它似乎并没有真正导致显着的性能提升.

标签:jquery,javascript,jquery-mobile
来源: https://codeday.me/bug/20190624/1282417.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有