2016-07-06 230 views
0

如果子元素为空,我想构建一个jquery支持的方式来隐藏(li)父元素。我已经建立了这样一个问题,但我不知道为什么它没有工作。如果子span元素为空,则隐藏父元素元素

<li data-column="3" class=„parent“> 
    <span class=„childTitle">Lorem Ipsum</span>: 
    <span class="childValue"><!—child value--><!—child value--></span> 
</li> 

我试图建立一个如果的问题:

$(document).ready(function() { 
if ($('span.childValue').is(':empty')){ 
$(this).parents().hide(); 
}  
}); 

我也试图建立一个简单的函数:

$("span.childValue:empty").parent().hide(); 

但无论哪种不到风度的工作。完成的代码应该构建在WordPress的儿童主题javascript中。我尝试了不同的方式,但没有一个结果。

+0

你的属性中奇怪的引号是什么? – j08691

回答

0

我也试图建立一个简单的函数:

$("span.childValue:empty").parent().hide(); 

做工精细,如果你只是把它包在文档准备好处理程序。

$(document).ready(function() { 
    $("span.childValue:empty").parent().hide(); 
}); 

(你还需要解决在HTML所有的怪异引号字符)。

演示:https://jsfiddle.net/jphuftqu/

关于你与if声明试过的版本,这将不因为this的值与它所在的函数关联,而不是与if块关联,所以$(this).parents()与跨度无关。

if中,您必须获取元素的父元素$('span.childValue').parent(),但是如果您有多个具有相同结构的列表项,可以选择所有元素,因此这不是您想要的。

还要注意,在你试过的if版本中,你使用的是.parents(),它会得到所有跨度的祖先。改为使用.parent().closest('li')

0

一旦你解决你的示例代码怪异的报价,你可以使用这个:

$('span.childValue').each(function() { 
    if ($(this).is(':empty')) $(this).parent().hide(); 
}) 

jsFiddle example

注意要使用parent(),不parents()隐藏<li>