jQuery的attr()和getAttribute()之间的区别

11

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”(这正是我期望发生的)。

1个回答

12

啊,这会教训我了,因为我没有往上看,也没有正确地跟随jQuery源代码!谢谢。 - James Allardice
3
你应该链接到特定的标签,而不是主分支。否则,行号可能会在未来发生变化。 - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接