2013-01-19 12 views

Odpowiedz

6

Można użyć .filter().

var displayed = $('mySelector').filter(function() { 
    var element = $(this); 

    if(element.css('display') == 'none') { 
     element.remove(); 
     return false; 
    } 

    return true; 
}); 

To zwróci wszystkie elementy ze swoimi ów selektor atrybutu display nienonei usunąć tych, którzy są.

+0

pamiętać, że ta znajdzie tylko elementy, które mają wyraźny 'wyświetlania: none' w ich' atrybutu style'. Metoda '.css()' nie przechwytuje stylów odziedziczonych z arkuszy stylów. – Barmar

+0

Co sprawia, że ​​mówisz to? Zgodnie z dokumentami jQuery, '.css()' jest ** obliczoną ** właściwością stylu, więc zawiera dziedziczone style. Oto wersja demonstracyjna, aby pokazać, że to prawda - https://jsfiddle.net/6uncqqk2/ –

+1

Mogłabym przysiąc, że widziałem pytania z przeszłości, w których nie korzystano z wyliczonego stylu. Być może myślałem o kodzie, który używa zwykłego JS 'element.style.display'. – Barmar

2

Można użyć filter()

var listWithoutDisplayNone = elementList.filter(function(){ 
     if($(this).css('display') != 'none') 
      return $(this); 
}); 
8
$("selector").is(":visible") 

Można także odfiltrować ukryte elementy w oryginalnym selektora:

$("selector:visible") 
+0

Obecnie używam tego dla elementów, które przełączam pomiędzy 'display: none' i' display: block'; czy w tym celu wystąpiłyby jakiekolwiek problemy lub niespójności? – Abdul

+0

@Abdul To powinno być w porządku. jQuery sprawdza zarówno właściwości 'display', jak i' visibility', aby sprawdzić, czy element jest widoczny. – Barmar

+1

Podczas gdy często osiągnie to cel, istnieje jedna istotna różnica (poza tym, że sprawdza również widoczność, jak wspomniano w @Barmar): sprawdzi także widoczność elementów nadrzędnych. Więc jeśli naprawdę chcesz odfiltrować tylko elementy za pomocą 'display: none', to': visible' daje fałszywe alarmy. – ScottSB

Powiązane problemy