测试元素是否更好的哪种方法? .is(’:checked’)或.prop(’checked’)
.prop('checked')
.is(':checked')
和.prop('checked')
都可用于测试是否选中了复选框。
查询检查状态的两种方式之间是否存在任何有趣/重要的差异,还是仅仅是个人偏好的问题?
他们最终都检查了同样的事情。
如果你使用1.6.0或更高版本, prop('checked')
是最直接的jQuery方式。 jQuery不必解析和处理选择器来弄清楚要做什么。 [下面的注意]
您也可以(从1.6.1开始attr('checked')
再次使用attr('checked')
和1.5.x及更早版本一样。
或者你可以直接去元素。 假设x
是要测试的东西,如果你知道至少有一个元素匹配,那么:
if (x[0].checked) { /* ... */ }
如果您不确定并希望对冲您的赌注:
if (x[0] && x[0].checked) { /* ... */ }
但除非你处于一个非常紧凑的循环中,否则请使用最容易阅读的内容,因为性能差异并不重要。 我发现最后一个很容易阅读,我知道它们非常快,所以我使用它们。 但是如果你发现它们很尴尬,那就用你最喜欢的东西。 如果你喜欢它并且你没有看到它的实际性能损失(不太可能禁止,某种类型的紧密循环),那么使用is(':checked')
没有害处。
注意: prop
更直接的程度因浏览器而异。 prop
不仅仅是对房产的直接检查,它首先会经历几个层次的间接; 并且不一定非常复杂:例如,在WebKit浏览器is
可以是相当直接的,因为WebKit提供了一个函数来测试元素是否与选择器匹配,并且支持:checked
native; 在Firefox(以及我怀疑,IE)上, is
产生大量的函数调用,因为这个看似简单的选择器在Sizzle的内部工作。
我自己会使用prop('checked')
(只要我不必支持旧的jQuery版本),因为它直接访问对象的checked
属性并且很容易阅读。
is(':checked')
通过字符串解析等运行一些额外的开销。我通常保留:checked
选择元素时:checked
。