2014-01-11 14 views
0

我使用appendTo在DOM走动了几个要素:的jQuery appendTo离开以前的父容器空白

jQuery('.footer-pre-home.box.s5,.footer-two.box.s5').appendTo('.footer .copyright'); 

这工作得很好。但是,当它们被删除时,它们将在其前一个父节点“pre-footer”中留下一个空白字符。这阻止了我在前页脚元素上使用css:empty psuedo类。

任何方法来解决这个appendTo?

原始的HTML低于:

<div class="pre-footer"> 
    <div class="footer-two box s5"> 
     <div class="textwidget"> 
      <ul class="social flat"> 
       <li class="twitter"><a href="http://twitter.com"></a></li> 
       <li class="facebook"><a href="http://facebook.com"></a></li> 
       <li class="google"><a href="http://plus.google.com"></a></li> 
       <li class="youtube"><a href="http://youtube.com"></a></li> 
       <li class="linkedin"><a href="http://linkedin.com"></a></li> 
       <li class="rssfeed"><a href="feed/"></a></li> 
      </ul> 
     </div> 
    </div> 
</div> 

的appendTo后,计算出的页脚预HTML如下:

<div class="pre-footer"> 
</div> 

我不能删除节点,因为有可能是元素它内部不是appendTo的目标。但是,在这种情况下,不是。

回答

1

.appendTo只接受目标,它不会留下textNode,还有在你的元素textNode,而不是使用:empty选择,你可以使用.filter()方法,检查修整内容的长度:

var $empty = $(".footer .pre-footer").filter(function() { 
    return !$.trim(this.innerHTML).length;  
    // return $.trim(this.innerHTML) === ''; 
}); 
+0

我在控制台中运行它,并返回undefined。我正在使用CSS来验证:.footer .pre-footer:empty {display:none!important} –

+0

@ScottB嗯,我虽然使用jQuery':empty'选择器,它不会删除空格,它会过滤只有空格或没有内容的元素。尝试'$(“。pre-footer”)。filter(function(){ return!$。trim(this.innerHTML).length; })。hide();' – undefined

+0

+1是的,修改后的代码和使用jQuery空vs CSS空。谢谢!我在想,你正在使用jQuery trim来删除空白节点空白,以便CSS:空工作。 –