2012-07-02 14 views
6

Rozejrzałem się i znalazłem wiele pytań na ten temat, ale żadne z rozwiązań nie działa dla mnie. Mam strukturę tak:jQuery Ukryj div rodzicielski, jeśli div dziecka jest pusty

<div class="pricetag"> 
    <div class="price">400</div> 
</div> 

<div class="pricetag"> 
    <div class="price"></div> 
</div> 

<div class="pricetag"> 
    <div class="price">250</div> 
</div> 

Co chcę zrobić, to ukryć .pricetag gdzie .price nie zawiera niczego. Może być wiele różnych .pricetag na tej samej stronie, ale chcę ukryć te z pustym .price.

Czy to możliwe z jQuery? Próbowałem już wielu różnych skryptów, ale żaden z nich nie działał poprawnie.

+0

Czy każdy '.pricetag' elementem tylko kiedykolwiek jeden' ​​.price' elementu? –

+0

Wkładam fr. na początku i: - na końcu każdego .pricetag. Więc jeśli .price ma treść, to jest

fr.
200
: -
. Jeśli .price jest pusty, to jest
fr.
: -
Daniel

+0

Ale nigdy nie będziesz mieć '

fr.
200
: -
', prawda? –

Odpowiedz

17

Można użyć selektora :empty oraz metodę parent, zakładając pustych .price elementy nigdy nie będzie zawierać żadnych węzłów tekstowych (na przykład znak nowego wiersza):

$(".price:empty").parent().hide(); 

Oto working example.

+0

Naprawiono to! Dziękuję Ci bardzo! Próbowałem tylko użyć instrukcji if, aby sprawdzić, czy div jest pusty. Dzięki jeszcze raz. Zaznaczę to jako odpowiedź, gdy tylko będę mógł to zrobić :) – Daniel

+0

@DanielLundahl - Nie ma za co, cieszę się, że mogłem pomóc :) –

+0

Sprytny sposób robienia tego. Nie wiedziałem o selektorze ': empty'. Dzięki –

1
$('.price').each(function(){ 
    if ($(this).text().length == 0) { 
    $(this).parent().hide() 
    } 
}) 
1

demo działahttp://jsfiddle.net/mm4pX/1/

Można użyć .is(':empty') aby sprawdzić, czy div jest pusty, a następnie dokonać rodzic div ukryte.

Nadzieja to pomaga,

kod

$('.price').each(function() { 
    if $('.price').is(':empty') $(this).parent().hide() 
});​ 
+0

Nie ma potrzeby, aby iterować nad wszystkimi '.elementy ceny. Metody 'parent' i' hide' mają zastosowanie do wszystkich elementów w dopasowanym zestawie. –

+0

@JamesAllardice Aha thank-you ':)' Tak naprawdę czytałem post powyżej, fajnie, okrzyki za to! –

0

Ten kod jquery zrobi to

$(function(){ 
    $(".price").each(function(){ 
    if($(this).html()=="") 
     $(this).parent(".pricetag").hide(); 
    }); 
}); 

jsbin przykład: http://jsbin.com/ovagus

0

spróbuj tego skryptu jQuery

$(document).ready(function(e) 
{ 
    $('div.pricetag').each(function(key, value) 
    { 
     if(!$('div.price', value).html()) $(value).hide(); 
    }); 
}); 
0

Selektor :empty nie wybiera elementu, jeśli zawiera białe spacje. Jeśli to jest problem, to można przyciąć element z whitespaces:

function isEmpty(element){ 
    return !$.trim(element.html()) 
} 

$(".box").each(function() { 
    var box = $(this); 
    var body = box.find(".box-body"); 

    if(isEmpty(body)) { 
    console.log("EMPTY"); 
    box.hide(); 
    } 
}); 

http://codepen.io/DanAndreasson/pen/jWpLgM

Powiązane problemy