哪种方法可以测试元素是否更好? .is(':checked')或.prop('checked')

时间:2011-06-14 07:20:37

标签: jquery checked

.is(':checked').prop('checked')都可用于测试是否选中了复选框。

查询已检查状态的两种方式之间是否存在任何有趣/重要的差异,还是仅仅是个人偏好?

3 个答案:

答案 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')并且您没有看到它的实际性能损失(这不太可能禁止,再次,某种紧密的循环),则没有任何害处。


注意:propis更直接的因浏览器而异。 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')更容易。