2012-07-02 69 views
6

我环顾四周,发现很多关于这个问题,但没有解决方案为我工作。我有这样的结构:jQuery隐藏父div如果子div是空的

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

我想要做的就是隐藏.pricetag,其中.price不包含任何内容。 它可以是很多不同的.pricetag在同一页上,但我只想隐藏那些空的价格。

这可能与jQuery?我已经尝试了很多不同的脚本,但没有一个能正常工作。

+0

将各自'.pricetag'元素永远只能有一个'.price'元素? –

+0

我插入fr。在开始和: - 在每个.pricetag结尾处。因此,如果.price的内容是

fr.
200
: -
。如果.price为空,则它是
fr.
: -
Daniel

+0

但是,您绝不会有'

fr.
200
: -
',对吗? –

回答

17

您可以使用:empty选择和parent方法,假设空.price元素永远不会包含任何文本节点(例如换行字符):

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

这里有一个working example

+0

这个修好了!非常感谢你!我只尝试使用if语句来检查div是否为空。再次感谢。我会尽快将其标记为答案:) – Daniel

+0

@DanielLundahl - 不客气,很高兴能帮到你:) –

+0

聪明的做法。我不知道':empty'选择器。谢谢 –

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

工作演示http://jsfiddle.net/mm4pX/1/

您可以使用.is(':empty')检查,如果格是空的,然后让父母DIV隐藏。

希望这有助于

代码

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

有没有必要遍历所有''。价格'元素。 “父”和“隐藏”方法适用于匹配集中的所有元素。 –

+0

@JamesAllardice啊哈谢谢':''我实际上正在阅读上面的帖子,很酷,为此欢呼! –

0

这jQuery代码将做到这一点

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

jsbin例如:http://jsbin.com/ovagus

0

试试这个jQuery脚本

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

:empty选择器如果它包含空格,则不选择它。如果这是一个问题,那么你可以修剪从空格元素:

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