2013-02-21 4 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!

Я также заметил, что со встроенным атрибутом (например, value или id) оба вышеописанного прекрасно работают! Не могли бы вы объяснить, почему это происходит?

+0

Это маленький бит jQuery-specific, но см. Дубликат [.prop() vs .attr()] (http://stackoverflow.com/questions/5874652/prop-vs-attr). Если вы хотите объяснение only-plain-js, см. Http://javascript.info/tutorial/attributes-and-custom-properties – Bergi

ответ

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

+0

@ Bergi: Спасибо, вот что я имел в виду. Исправлена. –

+0

Спасибо! Это именно то, что я искал! – Isti115

Смежные вопросы