Javascript 为什么*[checked]与单个选中的输入框不匹配?

Javascript 为什么*[checked]与单个选中的输入框不匹配?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,假设我有一个id为“test”的复选框,它位于加载了jQuery1.5.2的页面上 <input id="test" type="checkbox"/> 现在,如果我单击复选框将其设置为checked状态 为什么$(“#test”).is(“:checked”)返回true和$(“#test”).is(“*[checked]”)返回false 这里有一个是一个选择器,它选择当前使用已检查的属性而不是属性检查的元素-换句话说,“如果元素具有已检查的属性,则选择它” 如果要检查复选

假设我有一个id为“test”的复选框,它位于加载了jQuery1.5.2的页面上

<input id="test" type="checkbox"/>

现在,如果我单击复选框将其设置为
checked
状态

为什么
$(“#test”).is(“:checked”)
返回
true
$(“#test”).is(“*[checked]”)返回
false

这里有一个

是一个选择器,它选择当前使用
已检查的
属性而不是属性检查的元素-换句话说,“如果元素具有已检查的属性,则选择它”

如果要检查复选框是否选中,则必须使用

用法示例:

if($('#test').is(':checked'))
{
   return true;
}
对于jQuery 1.6及更高版本,出于性能原因,您可以使用该函数

if($('#test').prop('checked'))
{
   return true;
}

因为选中的
不是
input
元素的属性。这是一种财产。您的
*[checked]
选择器检查它是否具有
checked
属性,该属性在元素上永远不存在。您可以将
checked=“checked”
添加到
input
元素,该元素设置该对象的
checked
属性,但即使取消选中该框,该属性也将始终存在。这是因为选中和取消选中只会更改复选框的
checked
属性,而不会更改
checked
属性。

请参阅jQuery属性页上有关选中属性的讨论:

检查此项

必须是*[:选中]


正如Matt所说,checked是一个属性而不是一个属性,复选框的检查性反映在对象属性
checked
中。它可以通过选中的DOM属性
进行设置,但方向是单向的:当对象的属性更改时,DOM属性不会更新
:checked
是一个专用的伪选择器,用于检查对象的属性
[checked]
是一个选择器,用于检查DOM属性是否存在。

OP使用的是jQuery 1.5.2,而不是1.6+。是的,该页面讨论了1.6之前和之后的内容,但它没有回答OP问题。这可能是另一个问题,但在这种情况下它们似乎是相同的:请参阅后续问题