2012-07-02 35 views
6

He mirado alrededor y he encontrado muchas preguntas al respecto, pero ninguna de las soluciones me funciona. Tengo una estructura como esta:jQuery Ocultar el div principal si el div hijo está vacío

<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> 

Lo que quiero hacer es ocultar el .pricetag donde .price no contiene nada. Puede haber muchos .pricetag diferentes en la misma página, pero solo quiero ocultar los que tienen .price.

¿Esto es posible con jQuery? He intentado muchas secuencias de comandos diferentes, pero ninguna ha funcionado correctamente.

+0

'¿Cada elemento .pricetag' sólo tenga una' elemento .price'? –

+0

Insertar fr. al principio y: - al final de cada .pricetag. Entonces, si .price tiene contenido, es

fr.
200
: -
. Si .price está vacío, es
fr.
: -
Daniel

+0

Pero nunca tendría '

fr.
200
: -
', ¿no? –

Respuesta

17

Puede utilizar el selector de :empty y el método parent, asumiendo los vacíos .price elementos nunca contendrá todos los nodos de texto (por ejemplo, un carácter de nueva línea):

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

Aquí hay una working example.

+0

¡Esto lo arregló! ¡Muchas gracias! Solo he intentado usar declaraciones if para verificar si el div está vacío. Gracias de nuevo. Voy a marcar esto como la respuesta tan pronto como se me permita hacerlo :) – Daniel

+0

@DanielLundahl - De nada, me alegro de poder ayudar :) –

+0

Manera inteligente de hacerlo. No estaba al tanto del selector ': empty'. Gracias –

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

demostración de trabajohttp://jsfiddle.net/mm4pX/1/

Se puede utilizar para comprobar si .is(':empty') div está vacía y luego hacer los padres div oculto.

Espero que esto ayude,

código

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

No hay necesidad de iterar sobre todo el '.precios' elementos. Los métodos 'parent' y' hide' se aplican a todos los elementos en el conjunto coincidente. –

+0

@JamesAllardice Gracias AHA ':) 'En realidad estaba leyendo el post de arriba, ¡bien, aplausos por eso! –

0

Este código jQuery lo hará

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

ejemplo jsbin: http://jsbin.com/ovagus

0

tratar este script jQuery

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

El selector :empty no selecciona un elemento si contiene espacios en blanco. Si esto es un problema, entonces se puede recortar el elemento de espacios en blanco:

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

Cuestiones relacionadas