使用jQuery删除类时,是否最好将该类包含在选择器中
When removing a class with jQuery, is it better to include the class in the selector?
这可能不会导致任何明显的性能差异,但我只是感兴趣。如果我使用jQuery删除元素列表中的一个类,那么在选择器中包含该类是更好的做法还是更好的性能?
所以要么包括它:
$('#myList li.classToRemove').removeClass('classToRemove');
或者不包括:
$('#myList li').removeClass('classToRemove');
因此,基本上,在选择器和removeClass方法中缩小列表有什么区别。
选择器向后匹配(从最后到第一),这意味着它将首先找到"具有"classToRemove"的所有元素,这些元素也是"li",它们也是"#mylist"的子元素"。
这样做是为了尽可能、尽可能快地缩小名单。
因此,你应该选择
$('#myList li.classToRemove').removeClass('classToRemove');
更少的匹配项意味着更快、更高效的脚本。
假设不是所有的<li>
元素都有那个类,那么我认为最好在过滤集上运行.removeClass()
。
但总的来说,还会有其他事情对表现产生影响,比如。。。
-
'#myList li'
与'#myList li.classToRemove'
匹配的元素数量 -
不同环境优化DOM选择的方式
-
不同环境之间
.removeClass()
方法内部的实际性能差异
因此,除非您讨论的是在大量元素上不必要地运行.removeClass()
,否则我不会太担心。
使用更具体的选择器将提高性能,但不会影响.removeClass().的结果
把每一个添加到选择器中的操作都想象成向下钻取。给定以下html:
<div id="myList">
<ul>
<li id="li1"></li>
<li id="li2"></li>
<li id="li3" class="classToRemove"></li>
</ul>
</div>
//In order of fastest to slowest:
//Selecting the exact li and calling removeClass once
$('#li3').removeClass('classToRemove');
//In this one we are skipping 2 li's and then calling removeClass once
$('#myList li.classToRemove').removeClass('classToRemove');
//In this one we have to call removeClass 3 times
$('#myList li').removeClass('classToRemove');
很抱歉撞到了一篇旧帖子。
这个页面上的测试似乎表明,不包括类选择器大约快10-15%。所以,如果你想使用jQuery,最好的方法就是:
$('#myList li').removeClass('classToRemove');
- 注意-此页面似乎使用了jQuery 1
相关文章:
- JavaScript选择器:查找包含具有特定属性的子体的节点
- 如何查找包含特定选择器的父元素
- 检查选择器在jQuery中是否包含文本(即不是媒体)
- jQuery选择器,用于查找包含具有特定值的TD输入的TR
- 是否有任何函数可以帮助转义 jQuery 选择器中包含的所有元字符?
- 包含HTML的变量上的jQuery选择器
- jQuery"不包含“;选择器
- Jquery $this属性选择器是否包含单词
- jQuery :包含始终触发的选择器
- 不包含块引用的节点的查询选择器
- 使用查询选择器查找同级行中包含的下一个单元格
- jquery选择器在尝试不包含某些内容时不起作用
- 如何向 Javascript 表添加一行,其中包含包含 jQuery 中的日期选择器函数的单元格
- 属性包含选择器 * 替代
- 使用包含选择器在多个列中搜索
- jQuery包含选择器和特殊字符
- 如果我没有在ajax调用的成功函数中包含选择器,则无法选择ajax加载的内容
- 无法识别的表达式包含选择器
- 查找一个包含选择器id+文本的元素
- 是否存在不区分大小写的jQuery:包含选择器