两者.is(':checked')
和.prop('checked')
都可用于测试是否选中了复选框。
这两种查询检查状态的方式之间是否有任何有趣/重要的区别,或者这几乎只是个人喜好的问题?
他们最终都检查了同一件事。
如果你使用的是 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')
(这不太可能再次排除某种紧密循环)。
注意:比更直接的程度因浏览器而异。不仅仅是对属性的直接检查,它确实首先经过了几个间接级别;并且不一定非常复杂:例如,在 WebKit 浏览器上,可以相当直接,因为 WebKit 提供了一个功能来测试元素是否匹配选择器,并且原生支持;在 Firefox(我怀疑是 IE)上,会导致大量函数调用,因为这个看似简单的选择器在 Sizzle 的内部运行。prop
is
prop
is
is
:checked
is
我会使用prop('checked')
自己(只要我不必支持旧的 jQuery 版本),因为它checked
直接访问对象的属性并且很容易阅读。
is(':checked')
字符串解析等会产生一些额外的开销。我通常:checked
在选择元素时保留。
需要注意的一点是,.prop('checked')
仅确定是否选中了集合中的第一个复选框,而.is(':checked')
如果选中了集合中的至少一个复选框,则返回 true。
因此,如果您尝试确定是否选中了一组中的任何复选框,您可能会认为它更易于使用is(':checked')
。