2013-02-21 14 views
9

Właśnie zauważyłem, że jeśli dam niestandardowy atrybut do elementu HTML, na przykład:niestandardowy atrybut działa tylko z element.getAttribute („atrybut”), ale nie „element.attribute”

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

potem można odzyskać tak:

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

i powróci "custom_attr_text", ale jeśli to zrobię

document.getElementById("my_button").custom_attr; 

następnie zwraca undefined!

Zauważyłem również, że z wbudowanym atrybutem (na przykład value lub id) oba powyższe działają poprawnie! Czy ktoś mógłby wyjaśnić, dlaczego tak się dzieje?

+0

To littlebit jQuery konkretne, ale patrz wtórnik [.prop() vs .attr()] (http://stackoverflow.com/questions/5874652/prop-vs-attr). Jeśli chcesz tylko zwykły-js wyjaśnienia, patrz http://javascript.info/tutorial/attributes-and-custom-properties – Bergi

Odpowiedz

18

tylko niektóre atrybuty standardowe są bezpośrednio mapowane do właściwości. Nie jest to zdefiniowane zachowanie dla niestandardowych (niestandardowych) atrybutów.

forward zgodny sposób korzystania z niestandardowych atrybutów jest poprzedzić je data-.

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

Wtedy stają się one dostępne w HTML5 przeglądarek zgodnych jako:

element.dataset.custom_attr 

Ale w starszych przeglądarkach, będziesz nadal trzeba używać .getAttribute().

+1

'element.data'? Czy jesteś pewien, że nie miał na myśli [ 'dataset'] (https://developer.mozilla.org/en-US/docs/DOM/element.dataset)? – Bergi

+0

@Bergi: Dzięki, o to mi chodziło. Naprawiony. –

+0

Dziękujemy! Właśnie tego szukałem! – Isti115

Powiązane problemy