8

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

这两种查询检查状态的方式之间是否有任何有趣/重要的区别,或者这几乎只是个人喜好的问题?

4

3 回答 3

9

他们最终都检查了同一件事。

如果你使用的是 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 的内部运行。propispropisis:checkedis

于 2011-06-14T07:22:00.633 回答
2

我会使用prop('checked')自己(只要我不必支持旧的 jQuery 版本),因为它checked直接访问对象的属性并且很容易阅读。

is(':checked')字符串解析等会产生一些额外的开销。我通常:checked选择元素时保留。

于 2011-06-14T07:22:39.567 回答
0

需要注意的一点是,.prop('checked')仅确定是否选中了集合中的第一个复选框,而.is(':checked')如果选中了集合中的至少一个复选框,则返回 true。

因此,如果您尝试确定是否选中了一组中的任何复选框,您可能会认为它更易于使用is(':checked')

于 2019-10-18T12:52:58.747 回答