所有未禁用的选中复选框的 jquery 选择器

Posted

技术标签:

【中文标题】所有未禁用的选中复选框的 jquery 选择器【英文标题】:jquery selector for all checked checkboxes that are not disabled 【发布时间】:2012-09-03 16:56:26 【问题描述】:

如何找到所有已选中且未禁用的复选框?

【问题讨论】:

【参考方案1】:

像这样:

$("input[type='checkbox']:checked").not(":disabled")...

这会查找类型为checkboxinputs 字段,这些字段已被选中且未被禁用。如果这不起作用,您应该使用属性检查:

$("input[type='checkbox']:checked").not("[disabled]")...

或者,正如@lonesomeday 敏锐地指出的那样,您可以将它组合成一个选择器:

$("input[type='checkbox']:checked:not(:disabled)")...

我已经整理了一个概念验证in this fiddle。

【讨论】:

这里没有必要使用两个单独的选择器。你也可以input[type="checkbox"]:checked:not([disabled])【参考方案2】:
$('input[type="checkbox"]').filter(function() 
return !this.disabled && this.checked;
)

【讨论】:

是的,但是从选择器中丢失:checked 并使用过滤器函数!this.disabled && this.checked 会大大提高性能。 为什么?我认为选择器引擎会比我的功能更快。尽管如此,它更容易理解,我将编辑我的答案。 因为浏览器不理解:checked,所以jQuery必须自己做,比较慢。添加额外的布尔检查要快得多。 @lonesomeday :checked 是一个普通的 CSS 选择器,而不是一个 jQuery 扩展。 @Esailija 确实,我的错误。尽管如此,它在 IE 【参考方案3】:
$('input[type="checkbox"]:checked').not(":disabled");

这是fiddle

【讨论】:

你必须像我的回复一样使用 .filter() 函数【参考方案4】:

你可以使用这个选择器..

​$('input[type=checkbox]:checked:not(:disabled)')​

检查此FIDDLE

【讨论】:

【参考方案5】:

$("input[type='checkbox']:checked:enabled") 怎么样?

【讨论】:

以上是关于所有未禁用的选中复选框的 jquery 选择器的主要内容,如果未能解决你的问题,请参考以下文章

需要 JQuery 选择器的帮助,该选择器返回所有选中的复选框,这些复选框是具有指定类的节点的子节点

多个复选框以启用/禁用javascript中的一个选择器

在选择多个复选框(即 5)后,我有条件将禁用的类添加到我的 div

jQuery 表单域选中选择器

单击复选框时禁用剑道日期选择器

Jquery:如何取消选中复选框