2015-02-22 6 views
8

Ich bin neugierig, warum dies einJavascript Element Stil

<div class = "overlay"> 
    fdsfsd 
</div> 
.overlay{ 
    width: 100px; 
    height: 200px; 
    background-color:red; 
} 
alert(document.getElementsByClassName("overlay")[0].style.width); 

nichts nicht alarmiert wird. Natürlich kann ich schreiben <div style = "width:100px"> dann alles funktioniert gut, aber es ist nicht gut für mich, ich brauche CSS. Hier finden Sie eine jsfiddle demo

So genaue Frage ist: warum dieser Code nicht Breite von div Alarm und wie warnt es, wenn die Breite von CSS gegeben ist?

Antwort

5

Das JavaScript .style bezieht sich nur auf Inline-Stile für das Element.

Siehe Documentation.

Wenn Sie die Breite eines Elements erhalten möchten, sollten Sie offsetWidth verwenden.

document.getElementsByClassName("overlay")[0].offsetWidth 

http://jsfiddle.net/9kwap3zy/7/

10

Wie bereits erwähnt an anderer Stelle ist das Problem, dass HTMLElement.style die Werte von der style attr. abruft Element des Elements; wie Sie Ihren Stil mit CSS sind einstellen, müssen Sie stattdessen window.getComputedStyle(element, null).width verwenden:

var elem = document.getElementsByClassName("overlay")[0], 
 
    width = window.getComputedStyle(elem, null).width; 
 

 
console.log(width);
.overlay { 
 
    width: 100px; 
 
    height: 200px; 
 
    background-color: red; 
 
}
<div class="overlay"> 
 
    fdsfsd 
 
</div>

Referenzen:

+1

Dank! Es klappt! – mondayguy

+1

Ich weiß nicht, wer das abgelehnt hat:/aber vielleicht parseInt wollen – Emissary

+0

@Digigizmo: weder ich, es ist ein wenig nervig (aber vermutlich haben sie ihre Gründe). Ich bin mir nicht sicher, ob ich 'parseInt()' (oder 'parseFloat()') verwenden soll, weil die Breite ohne die Einheiten (selbst wenn JavaScript immer die Länge in px zurückgibt) etwas bedeutungslos erscheint; und es gibt keine Erwähnung, nur Zahlen zu haben. Wenn die Frage aktualisiert wird, um dann anzufordern, werde ich aktualisieren, wie es scheint voreilig. –

1

Der Stil gibt Zugriff nur auf Informationen, die in elem.style eingegeben werden. In Ihrem Beispiel sagt Stil nichts über den in CSS definierten Rand aus. Verwenden Sie getComputedStyle().

var computedStyle = getComputedStyle(document.getElementsByClassName("overlay")[0], null) 

alert(computedStyle.width); 

jsfiddle demo