Sjekk elementets CSS-display med JavaScript


Er det mulig å sjekke om et elements CSS display == block eller none ved hjelp av JavaScript?

Svar #1

Som sdleihssirhc sier nedenfor, hvis elementets display blir arvet eller spesifisert av en CSS-regel, må du hente ut dens beregnede stil:

return window.getComputedStyle(element, null).display;

Elementer har en style-egenskap som vil fortelle deg hva du vil, hvis stilen ble erklært inline eller med JavaScript:

console.log(document.getElementById('someIDThatExists').style.display);

vil gi deg en strengverdi.

Svar #2

Hvis stilen ble deklarert inline eller med JavaScript, kan du bare få tilgang til style-objektet:

return element.style.display === 'block';

Ellers må du hente den beregnede stilen, og det er nettleserinkonsistenser. IE bruker et enkelt currentStyle-objekt, men alle andre bruker en metode:

return element.currentStyle ? element.currentStyle.display :
                              getComputedStyle(element, null).display;

Nullen (null) var nødvendig i Firefox versjon 3 og lavere.

Svar #3

For jQuery, mener du slik?

$('#object').css('display');

Du kan sjekke det slik:

if($('#object').css('display') === 'block')
{
    //do something
}
else
{
    //something else
}

Svar #4

Dette svaret er ikke akkurat det du vil ha, men det kan være nyttig i noen tilfeller. Hvis du vet at elementet har noen dimensjoner når det vises, kan du også bruke dette:

var hasDisplayNone = (element.offsetHeight === 0 && element.offsetWidth === 0);

REDIGER: Hvorfor dette kan være bedre enn direkte sjekk av CSS display-egenskapen? Fordi du ikke trenger å sjekke alle foreldrelementene. Hvis et foreldrelement har display: none, er barna skjult også, men har fortsatt element.style.display !== 'none'.

Relaterte artikler