2012-04-21 16 views
20
document.getElementById('myId').style; 

jest jednym ze sposobów uzyskiwania dostępu do atrybut stylu .. Również możemy zrobić to samo przy użyciu document.getElementById('myId').getAttribute('style');Różne sposoby dostępu do wartości atrybutów przy użyciu JavaScript

Jaka jest różnica między tymi dwoma sposobami uzyskania wartości atrybutów .. A który z nich jest lepszy?

+1

myślę, że może to zrobić również 'document.getElementById ('') myid [ 'styl']'. afaik, ma podobny powód użycia 'getAttribute()' jak wyjaśniono @ gwynhowell. – Joseph

+0

to tylko kolejny sposób na uzyskanie dostępu do właściwości obiektów .. w porządku? –

+0

tak, tylko w inny sposób. – Joseph

Odpowiedz

15

W pierwszym przykładzie nie masz dostępu do atrybutu style, ale do właściwości style. Wartość właściwości może być dowolna, w przypadku, gdy właściwość style jest obiektem. W drugim przykładzie masz dostęp do atrybutu stylu tagu. Wartość atrybutu może być tylko łańcuchem.

W przypadku niektórych atrybutów istnieje między nimi mapowanie. Jeśli więc ustawisz atrybut style w węźle HTML, twoja właściwość style zostanie zaktualizowana, a Twój styl zostanie zastosowany. Jednak nie zawsze tak jest: znanym błędem w niektórych wersjach IE (przynajmniej do IE7) jest to, że ten rodzaj mapowania jest uszkodzony, więc ustaw atrybut nie jest odzwierciedlany w tej właściwości.

Tak więc, jeśli chcesz ustawić atrybut w węźle HTML, musisz użyć drugiego. Ale jeśli chcesz uzyskać dostęp do własności obiektu, który reprezentuje reprezentuje węzeł HTML, musisz użyć pierwszego.

W przypadku modelu style zdecydowanie zaleca się pierwszą.

Żeby było jasne z przykładu (w nowoczesnych przeglądarkach):

document.body.style.border = "1px solid red"; 
console.log(document.body.style); // [object CSSStyleDeclaration] 
console.log(document.body.getAttribute("style")); // "border: 1px solid red;" 
+1

dzięki za odpowiedź ... Właśnie dlatego otrzymuję alert (document.getElementById ("myId"). Style) jako deklarację CSSstyle i alert (document.getElementById ("myId"). Style) jako ciąg http: // jsfiddle. net/rQrRj /? –

+1

mhm, nie jestem pewien, czy to mam, w komentarzu zamieścisz ten sam kod dla obu; aw jsfiddle, które publikujesz, nie ma stylu. Ale zachowanie jest poprawne: ustawiono niestandardowy atrybut, ale ponieważ nie ma odwzorowania właściwości, ta właściwość jest niezdefiniowana. Zauważ, że w starej wersji IE (przynajmniej), jeśli ustawisz "właściwość expando", otrzymasz ją również jako atrybut, jeśli jest to ciąg znaków. Cały temat w IE jest dość spaprany. – ZER0

+0

Czy istnieją inne właściwości, które zwracają obiekt na document.body.

-1

nie ma różnicy.

document.getElementById('myId').style; 

jest skrótem

document.getElementById('myId').getAttribute('style'); 

jedynym zastosowaniem dla getAttribute („attributeName”) byłoby, gdyby attributeName nie jest poprawnym javascript nazwa zmiennej, więc enkapsulacji go w cudzysłowie byłoby jedynym sposobem aby uzyskać do niego dostęp.

+4

To jest niedokładne. getAttribute zwróci również wartość niestandardowych atrybutów. Nie działa to w przypadku notacji właściwości obiektu, ponieważ te niestandardowe atrybuty nie są konwertowane na właściwości. http://jsfiddle.net/rQrRj/ –

+0

dzięki za odpowiedź ... –

+2

To nie jest poprawne.W rzeczywistości, jeśli są one takie same, powinieneś uzyskać ten sam wynik zarówno w ustawianiu stylu, jak i przybieraniu. Jednak ponieważ wartość, którą uzyskujesz, jest inna, nie są one takie same. Zobacz: 'document.getElementById (" myId "). GetAttribute (" style "). Border =" 1px solid red "' porównaj z 'document.getElementById (" myId "). Style.border =" 1px solid red ";' W rzeczywistości pierwsza metoda zwraca ciąg, a nie obiekt ('CSSStyleDeclaration'). – ZER0

4

getAttribute zwróci wartość niestandardowych atrybutów, jak i standardowych.

Notacja właściwości obiektu nie będzie, ponieważ niestandardowe atrybuty nie zostaną przekonwertowane na właściwości.

<a id="test" foo="bar"> ... </a>​ 

<script> 

    console.log(document.getElementById('test').foo); // undefined 

    console.log(document.getElementById('test').getAttribute('foo')); // "bar" 

</script> 
Powiązane problemy