Czy można sprawdzić, czy element jest CSS display == blocklub noneużywając JavaScript?
Odpowiedzi:
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.
currentStyle? nigdy o tym nie słyszałem, też sprawdziłem document.body.currentStylei nic nie dostałem (nie było zdziwione)
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.
===i !==operatorzy”.
===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.
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
}
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'.
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");
Czysty javascript możesz sprawdzić style.displaywłaściwość. Dzięki jQuery możesz używać$('#id').css('display')
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.