javascript 自定义属性仅适用于 element.getAttribute("attribute") 但不适用于 "element.attribute"
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15010981/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
custom attribute works only with element.getAttribute("attribute") but not "element.attribute"
提问by Isti115
I have just noticed, that if I give a custom attribute to an html element, for example:
我刚刚注意到,如果我给一个 html 元素一个自定义属性,例如:
<input type="button" id="my_button" custom_attr="custom_attr_text" value="value_text" />
then i can retrieve it like this:
然后我可以像这样检索它:
document.getElementById("my_button").getAttribute("custom_attr");
and it will return "custom_attr_text"
, but if I do
它会回来"custom_attr_text"
,但如果我这样做
document.getElementById("my_button").custom_attr;
then it returns undefined
!
然后它返回undefined
!
I also noticed that with a built in attribute (for example value
or id
) both of the above works fine!
Could somebody please explain why is this happening?
我还注意到,使用内置属性(例如value
或id
),以上两个都可以正常工作!有人可以解释为什么会发生这种情况吗?
回答by the system
Only certain standard attributes are directly mapped to properties. This is not the defined behavior for non-standard (custom) attributes.
只有某些标准属性直接映射到属性。这不是非标准(自定义)属性的定义行为。
The forward compatible way of using custom attributes is to prefix them with data-
.
使用自定义属性的向前兼容方式是在它们前面加上data-
.
<input ... data-custom_attr="custom_attr_text" ... />
Then they become available in HTML5 compliant browsers as:
然后它们在符合 HTML5 的浏览器中可用:
element.dataset.custom_attr
But in legacy browsers, you'll still need to use .getAttribute()
.
但是在旧版浏览器中,您仍然需要使用.getAttribute()
.