2013-02-21 117 views
9

我剛纔注意到,如果我給一個自定義屬性的HTML元素,例如:自定義屬性只適用於element.getAttribute(「屬性」),而不是「element.attribute」

<input type="button" id="my_button" custom_attr="custom_attr_text" value="value_text" /> 

然後我可以這樣獲取:

document.getElementById("my_button").getAttribute("custom_attr"); 

,它將返回"custom_attr_text",但如果我不

document.getElementById("my_button").custom_attr; 

然後它返回undefined

我還注意到,與內置屬性(例如valueid)上述兩個工作正常! 請問有人可以解釋爲什麼會發生這種情況?

+0

這是一個有點jbit特定的,但看到[.prop()與.attr()](http://stackoverflow.com/questions/5874652/prop-vs-attr)的副本。如果你想要一個只有普通的js解釋,請參閱http://javascript.info/tutorial/attributes-and-custom-properties – Bergi 2013-02-21 19:53:51

回答

18

只有某些標準屬性直接映射到屬性。這不是非標準(自定義)屬性的定義行爲。

使用自定義屬性的向前兼容方式是以data-爲前綴。

<input ... data-custom_attr="custom_attr_text" ... /> 

於是,他們在HTML5變得可用兼容的瀏覽器爲:

element.dataset.custom_attr 

但在傳統的瀏覽器,你仍然需要使用.getAttribute()

+1

'element.data'?你確定你不是指['dataset'](https://developer.mozilla.org/en-US/docs/DOM/element.dataset)? – Bergi 2013-02-21 19:56:31

+0

@Bergi:謝謝,那就是我的意思。固定。 – 2013-02-21 19:57:25

+0

謝謝!那正是我期待的! – Isti115 2013-04-20 18:21:59