选择一组元素的最有效方法
Most efficient way to select a set of elements?
我一直使用类名来选择相关元素的集合。例如
<input type="checkbox" value="1" class="checkbox_set_1">
<input type="checkbox" value="2" class="checkbox_set_1">
<input type="checkbox" value="3" class="checkbox_set_1">
$('.checkbox_set_1').filter(':checked') ...
我这样做是因为我知道jQuery可以委托给document.getElementsByClassName
,这应该很快。然而,向所有元素添加类,我想选择而不是样式似乎有点脏。当浏览器必须根据其样式表检查checkbox_set_1
以确定我的复选框是否需要样式化时,不是有一些开销吗?另外,如果我没有很好地命名我的类,还会有意外样式化的风险。
是否有更好的方法来选择不依赖于用于样式的属性的元素,而不放弃性能优势?或者更具体地说,除了class
(用于样式)和id
(仅限于单个元素)之外,是否存在浏览器将为其优化查询的属性?
还有许多其他属性可供选择,包括data-*
属性,但我不认为浏览器优化查找id
和class
以外的任何东西,是吗?
不是有一些开销当浏览器必须检查checkbox_set_1根据它的样式表确定我的复选框是否需要样式?
样式不是这样确定的。浏览器不会获取元素的每个属性并查找适用的规则,而是遍历一次规则并确定哪些规则适用于该元素。
如果你想给很多元素添加类,你可以使用选择器来更好地利用文档结构,例如在包含复选框的元素上设置一个类,并使用$('.CheckboxContainer :checked')
。
这可能不如在您想要定位的每个元素上设置类那么有效,但在大多数情况下,差异并不明显。在实际出现问题之前,您不应该过多地关注高效选择器。毕竟,使用jQuery只是为了方便,而不是为了获得最佳性能。
是的,它的行为类似于" java中的标记接口",您将发现Tom Butler的反模式描述。
如果你周围有一个表单,你可以使用元素(但你必须过滤其他元素),这比调用像"getElementsByClassName"这样的方法要快。
例子var lst = jQuery(document.foo.elements);
document.write(lst.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form name="foo">
<input type="checkbox" value="1" />
<input type="checkbox" value="2" />
<input type="checkbox" value="3" />
<input type="checkbox" value="4" form="bar" />
</form>
- 在jQuery中创建向下滑动子菜单的最有效方法
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 选择具有值数组的所有元素的最有效方法
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 将javascript数组中的项移动到特定位置的有效方法
- 将JS对象数组转换为嵌套形式的最有效方法
- 隐藏具有特定类$.each、for等的元素的有效方法
- 什么's是调用具有可变参数的函数的有效方法
- 选择具有特定数据的所有 html 标记的最有效方法是什么 - [适当性],无论值如何
- 使用 jQuery 调用 PHP 端点的最有效方法
- 这是解析 Int 的有效方法吗?
- 在JavaScript中搜索数组映射的最有效方法
- 获取字符串中最后一个换行符的最有效方法是什么
- 什么's是在两个(或多个)阵列中找到匹配的细胞序列的最有效方法
- 什么's是在IE8+中添加元素的最有效方法
- 从任何jquery选择器字符串创建元素的最有效方法
- 在日期范围内查找丢失日期的最有效方法是什么
- 对区间[1,10^12]中的整数进行编码/解码的快速有效方法是什么
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 在ASP.NET中使用JQuery UI自动完成的有效方法