2015-02-22 17 views
8

Sono curioso di sapere perchè questoelemento di stile JavaScript

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

non viene segnalata nulla. Naturalmente posso scrivere quindi tutto funziona, ma non va bene per me, ho bisogno di css. Qui potete trovare una domanda jsfiddle demo

Così esatto è: perché questo codice non viene segnalata la larghezza del div e come avviso se la larghezza è data da css?

risposta

5

JavaScript .style si riferisce solo agli stili incorporati sull'elemento.

Vedere Documentation.

Se si desidera ottenere la larghezza di un elemento, è necessario utilizzare offsetWidth.

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

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

10

Come notato altrove, il problema è che HTMLElement.style recupera i valori da style attr ibute dell'elemento; come si sta impostando il tuo stile con i CSS, è necessario utilizzare invece window.getComputedStyle(element, null).width:

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>

Riferimenti:

+1

grazie! Funziona! – mondayguy

+1

Non so chi ha votato questo:/ma potrebbe voler 'parseInt' – Emissary

+0

@Digigizmo: nemmeno io, è un po 'fastidioso (ma presumibilmente hanno le loro ragioni). Non sono sicuro di usare 'parseInt()' (o 'parseFloat()'), semplicemente perché la larghezza senza le unità (anche se JavaScript restituisce sempre le lunghezze in 'px') sembra un po 'priva di significato; e non si fa menzione di voler "solo" i numeri. Se la domanda è stata aggiornata per richiederlo, allora aggiornerò, così com'è, è prematuro. –

1

Lo stile dà l'accesso solo alle informazioni che viene messo in elem.style. Nel tuo esempio, lo stile non dice nulla sul margine definito in CSS. Utilizzare getComputedStyle().

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

alert(computedStyle.width); 

jsfiddle demo

Problemi correlati