2012-07-16 67 views
2

所以我有:attr()怎么给我一个奇怪的结果?

<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> 

当我点击的跨度,以及使用萤火检查跨度的属性,改变“选择”属性为“选择”,而不是“N”。

所以选择的结果= “选中” !! ??

为什么它并没有改变,以selected="N"

+2

是''selected'的span'一个有效的属性? **没有**。 – thecodeparadox 2012-07-16 17:04:46

+0

你想做什么? 'selected'不是跨度上的有效属性... – JJJ 2012-07-16 17:05:21

+0

抱歉,您认为符合条件的是什么意思?我认为attr()适用于各种属性,包括自命名?没有? – eastboundr 2012-07-16 17:05:47

回答

4

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()

+0

我现在明白了,谢谢......但是,你知道任何可以操纵自命名属性的方法吗?与attr()类似的东西,但检查自定义的属性..只是好奇... – eastboundr 2012-07-16 17:08:12

+0

“data-”完美地解决了我的问题!谢谢〜像一个魅力。 – eastboundr 2012-07-16 17:11:34

+0

在您的第一个示例中,您可以使用'.toggleClass('Y N')'而不是使用'.attr()'。 – Bojangles 2012-07-16 17:19:02

0

的原因是,其中的元件对于其是有效的(<option>元件,例如),selected是布尔属性,布尔属性的唯一有效值是属性本身的名称。 jQuery的attr()方法正在尝试并且无法聪明地“修正”您的selected属性的值。

显然jQuery的不正确处理无效的属性,这是有点理解的。你的选择是要么使用元素本身(这将在所有主要浏览器的工作)的getAttribute()方法,或更好,使用由data-前缀属性,根据HTML5规范,通过浏览器和的jQuery支持是有效的。