Sprawdź wyświetlanie elementu CSS za pomocą JavaScript


97

Czy można sprawdzić, czy element jest CSS display == blocklub noneużywając JavaScript?

Odpowiedzi:


114

Jak mówi sdleihssirhc poniżej, jeśli element displayjest dziedziczony lub określany przez regułę CSS, musisz uzyskać jego obliczony styl :

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

Elementy mają stylewłaściwość, która powie Ci, czego chcesz, czy styl został zadeklarowany w tekście, czy w JavaScript:

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

poda wartość ciągu.


2
A jeśli nie ma wbudowanego css?
— jscripter

5
Dla uproszczenia, dlaczego nie zawsze uzyskać styl obliczeniowy?
— cade galt

12
co jest currentStyle? nigdy o tym nie słyszałem, też sprawdziłem document.body.currentStylei nic nie dostałem (nie było zdziwione)
— vsync

1
@vsync (i do wykorzystania w przyszłości) Według MDN jest to zastrzeżona własność starej wersji przeglądarki Internet Explorer.
— user202729

2
Dzięki za komentarze. Odpowiedź zaktualizowana dla współczesnej sieci.
— Dan Davies Brackett

78

Jeśli styl został zadeklarowany w tekście lub w JavaScript, możesz po prostu dostać się do styleobiektu:

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

W przeciwnym razie będziesz musiał pobrać obliczony styl i występują niespójności przeglądarki. IE używa prostego currentStyleobiektu, ale wszyscy inni używają metody:

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

nullByło wymagane w Firefox w wersji 3 i poniżej.


czy to nie powinno być == w tym przypadku?
— Kai Qing

@Kai Potrójna równość nie powoduje wymuszania wpisywania. Crockford wyjaśnia dlaczego w sekcji „ ===i !==operatorzy”.
— sdleihssirhc

To całkiem interesujące. Zabawne, jak coś takiego może po prostu umknąć uwadze po tylu latach programowania. Zawsze przyjmowałem sugestię, że === jest ściśle logiczną wartością. Dobrze wiedzieć.
— Kai Qing

3
@Kai: Nie ma problemu z używaniem, ===a nie ==tutaj, ale równie nie ma też żadnej korzyści. Oba operandy są łańcuchami, więc oba operatory wykonują dokładnie te same kroki.
— Tim Down

1
@hippietrail I prawie 10 lat później (27.10.2019) nadal występują problemy. Sprawdź, co donosi MDN
— Felipe Alameda

37

W przypadku jQuery masz na myśli to?

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

Możesz to sprawdzić tak:

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

9
Unikaj nadmiernego komplikowania odpowiedzi. Wiem, że jQuery staje się w pewnym sensie standardem, ale nie ma powodu, aby dodawać cały framework tylko po to, aby sprawdzić styl wyświetlania elementu.
— zzzzBov

14
Tak, ale zrobiłem to, ponieważ wszyscy inni podali surową odpowiedź javascript, więc jeśli używał jquery, ale nie określił tego, to byłby użyteczny w poście
— Kai Qing

18

Ta odpowiedź nie jest dokładnie tym, czego chcesz, ale w niektórych przypadkach może być przydatna. Jeśli wiesz, że element ma pewne wymiary po wyświetleniu, możesz również użyć tego:

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

EDYCJA: Dlaczego to może być lepsze niż bezpośrednie sprawdzenie displaywłaściwości CSS ? Ponieważ nie musisz sprawdzać wszystkich elementów nadrzędnych. Jeśli jakiś element nadrzędny ma display: none, jego dzieci również są ukryte, ale nadal tak element.style.display !== 'none'.


Rzeczywiście, jest to przydatne.
— Jonatas Walker


5

Podstawowy JavaScript:

if (document.getElementById("elementId").style.display == 'block') { 
  alert('this Element is block'); 
}

2

Aby dowiedzieć się, czy jest widoczny w zwykłym JavaScript, sprawdź, czy właściwość display ma wartość „none” (nie sprawdzaj „block”, może być również pusta lub „inline” i nadal widoczna):

var isVisible = (elt.style.display != "none");

Jeśli używasz jQuery, możesz użyć tego zamiast tego:

var isVisible = $elt.is(":visible");

0

Czysty javascript możesz sprawdzić style.displaywłaściwość. Dzięki jQuery możesz używać$('#id').css('display')


-1

Możesz to sprawdzić na przykład przy pomocy jQuery:

$("#elementID").css('display');

Zwróci łańcuch z informacją o właściwości display tego elementu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.