2010-10-07 16 views
5

Wiem, że to powinno być proste, ale nie można tego rozgryźć. Oto kod.Usuń lub ukryj element div, jeśli jest pusty.

<div class="cols lmenu_item1" id="leftMenuWrapper"> 
<div id="leftmenu"></div> 
</div> 

Po prostu trzeba usunąć "leftMenuWrapper", jeśli "lewe menu" jest puste. Oto, czego używam.

$('#leftmenu').empty().remove('#leftMenuWrapper'); 

Przepraszam, jeśli to proste pytanie. Mając poniedziałek!

Dzięki!

+0

Spójrz na to pytanie http://stackoverflow.com/questions/5327751/hide-divs-if-they-are-empty –

Odpowiedz

23

Można to zrobić tak:

$('#leftmenu:empty').parent().remove(); 

Wybiera tylko #leftmenujeśli To :empty, a następnie chwyta tylko .parent() z że do .remove(). Jeśli nie był pusty, pierwszy selektor nie znajdzie niczego ani żadnego rodzica do usunięcia.

+3

Kto powiedział, że pisanie skryptów nie było eleganckie? –

+1

+1 za pokazanie mi selektora ': empty'. –

+0

@Peter - Myślę, że obok ': animated' i': header' jest to najbardziej niewykorzystany z naprawdę poręcznych pseudo-selektorów, daj im trochę miłości! –

1
if(!$('#leftmenu').html()){ $('#leftmenu').parent().remove(); } 
+1

Wygląda na to, że działa, ale nie jest tak efektywny, ponieważ musisz dwukrotnie wybrać element. Z pewnością wydaje się jednak dobrym rozwiązaniem. – user113716

+0

@patrick - Myślę, że możesz zrobić 'var $ elie = $ ('# leftmenu'); if (! $ elie.html()) {$ elie.parent(). remove(); } ' –

+0

@Peter - Bardzo prawdziwe. Byłoby znacznie lepiej buforować wynik selektora. W rzeczywistości, dla elementu z identyfikatorem, który zostanie wybrany więcej niż raz w dowolnym miejscu, prawdopodobnie będę go buforował. – user113716

5

Jeśli chcesz usunąć jeśli wygląda pusty:

if ($.trim($('#leftmenu').text()) == "") 
    $('#leftMenuWrapper').remove(); 

jsFiddle example

Powyższy zajmuje tylko zawartość tekstową #leftmenu i przycina się od spacji przed sprawdzeniem, czy Cokolwiek tam jest.

Dużą zaletą wyżej nad $(#leftmenu:empty) jest, że powyższe usuwa w następujących przypadkach :empty nie będzie:

    // The above code works in these cases where ":empty" does not: 

<div id="leftmenu">  </div>        // <== white space 
<div id="leftmenu"><p></p></div>       // <== empty elements 

.trim()
.text()
.remove()


pamiętać, że poniższe jest bardziej wydajny (ale mniej czytelny IMO):

var $elie = ('#leftmenu'); 
if ($.trim($elie.text()) == "") 
    $elie.parent().remove(); 
+2

+1 - Założę się, że wiele osób utknie, gdy ': empty' nie zadziała, ponieważ istnieje przerwa lub linia. – user113716

+0

Czy tu czegoś brakuje?Patrząc na twoją stronę jsFiddle i #leftMenuWrapper zawierającą tekst "Zobaczysz to, jeśli nie zostało usunięte." zostało usunięte. Ale z tego, co mogę powiedzieć, twój skrypt ma usunąć tylko #leftMenuWrapper, jeśli w środku nie ma tekstu ... ??? – Luke

Powiązane problemy