2013-02-21 14 views
9

ich gerade bemerkt haben, dass, wenn ich geben ein benutzerdefiniertes Attribut zu einem HTML-Element, zum Beispiel:benutzerdefinierten Attribut funktioniert nur mit element.getAttribute ("attribute"), aber nicht "element.attribute"

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

ich kann es wie folgt dann abrufen:

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

und es wird "custom_attr_text" zurück, aber wenn ich es tue

document.getElementById("my_button").custom_attr; 

dann gibt es undefined zurück!

Ich bemerkte auch, dass mit einem eingebauten Attribut (zum Beispiel value oder id) beide der oben genannten funktioniert gut! Könnte jemand bitte erklären, warum das passiert?

+0

Es ist ein littlebit jQuery-spezifische, aber sehen Sie das Duplikat von [.prop() vs .attr()] (http://stackoverflow.com/questions/5874652/prop-vs-attr). Wenn Sie eine nur-plain-js Erklärung möchten, finden Sie unter http://javascript.info/tutorial/attributes-and-custom-properties – Bergi

Antwort

18

Nur bestimmte Standardattribute werden direkt an Eigenschaften zugeordnet. Dies ist nicht das definierte Verhalten für Nicht-Standard (custom) Attribute.

Die rückwärtskompatible Art und Weise der Verwendung von benutzerdefinierten Attributen ist sie mit data- Präfix.

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

Dann werden sie kompatiblen Browsern in HTML5 als:

element.dataset.custom_attr 

Aber in Legacy-Browser, werden Sie noch .getAttribute() verwenden müssen.

+1

'element.data'? Sind Sie sicher, dass Sie nicht "Dataset" (https://developer.mozilla.org/en-US/docs/DOM/element.dataset) gemeint haben? – Bergi

+0

@Bergi: Danke, das ist, was ich meinte. Fest. –

+0

Vielen Dank! Das war genau das, wonach ich suchte! – Isti115