测试元素是否更好的哪种方法? .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