jQuery的attr方法文档说明:
除了一些特定的属性值,如value和tabindex之外,属性值都是字符串。
这确实是事实。考虑以下元素:
<input type="text" id="example" tabindex="3">
以下代码确实显示的是"number"而不是"string":
alert(typeof $("#example").attr("tabindex")); //Number
现在让我困惑的是,当使用DOM方法getAttribute
时,你会得到一个不同的结果:
alert(typeof $("#example")[0].getAttribute("tabindex")); //String
看了一下jQuery的attr
方法源码,似乎它只是返回了getAttribute
的返回值,那么为什么会有差别呢?这里是jQuery源码中相关部分的代码行:
ret = elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return ret === null ?
undefined :
ret;
以下是一个 演示 这个问题。进一步混淆问题的是,我已经在Chrome 15、Firefox 8、IE8和IE7中尝试过它,所有操作都如上所述,除了IE7,它对两者都弹出“number”(这正是我期望发生的)。