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