为什么attr()给了我一个奇怪的结果

How come attr() gives me a strange result?

本文关键字:一个 结果 attr 为什么      更新时间:2023-09-26

所以我有:

<span selected="Y" onclick="change();">Click here to test~</span>

<script src="jquery-1.7.2.js"></script>
<script>
function change()
{
  $('span[selected=Y]').attr("selected","N");
}
</script>

当我点击跨度,并使用firebug检查跨度的属性时,属性"selected"变为"selected",而不是"N"。

因此结果是selected="selected"!!??

为什么它没有变为selected="N"

selected不是span的有效属性,您可以使用data

<span data-selected="Y">Click here to test~</span>

jQuery

$('span[data-selected=Y]').on('click', function() {
  $(this).data('selected', 'N');
});

阅读更多关于jQuery的信息。data()

原因是对于它有效的元素(例如<option>元素),selected是布尔属性,布尔属性的唯一有效值是属性本身的名称。jQuery的attr()方法试图巧妙地"更正"selected属性的值,但失败了。

很明显,jQuery不能正确处理无效属性,这在某种程度上是可以理解的。您可以选择使用元素本身的getAttribute()方法(在所有主要浏览器中都可以使用),或者更好地使用前缀为data-的属性,该属性根据HTML5规范有效,受浏览器和jQuery支持。