attr
方法的jQuery文档声明:
属性值是除少数属性外的字符串 例如值和tabindex。
情况似乎确实如此。请考虑以下元素:
<input type="text" id="example" tabindex="3">
以下行确实显示“数字”,而不是“字符串”:
alert(typeof $("#example").attr("tabindex")); //Number
现在,让我感到困惑的是,当使用DOM方法getAttribute
时,会得到不同的结果:
alert(typeof $("#example")[0].getAttribute("tabindex")); //String
查看attr
方法的jQuery源代码,看来jQuery只返回getAttribute
返回的内容,为什么会有区别?这是relevant lines of the jQuery source:
ret = elem.getAttribute( name );
// Non-existent attributes return null, we normalize to undefined
return ret === null ?
undefined :
ret;
这是一个fiddle来证明这个问题。只是为了进一步混淆问题,我已经在Chrome 15,Firefox 8,IE8和IE7中尝试了它,并且所有行为如上所述,除了IE7,它警告两者的“数字”(这是我期望发生的)
答案 0 :(得分:11)
因为jQuery定义了propHook for tabIndex
明确parseInt
's the return type;
return attributeNode && attributeNode.specified ?
parseInt( attributeNode.value, 10 ) :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
这个钩子然后是added to the attrHook
,这就是为什么在attr
函数中观察到这种行为的原因(以及为什么它首次出现no attrHook is defined for tabIndex
)。