【问题标题】:jQuery appendTo leaves white space in previous parent containerjQuery appendTo 在前一个父容器中留下空白
【发布时间】:2014-01-30 15:15:34
【问题描述】:

我正在使用 appendTo 在 DOM 中移动几个元素:

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

这很好用。但是,当它们被删除时,它们会在其先前的父节点“pre-footer”中留下一个空白字符。这使我无法在 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 之后,计算出的 pre-footer html 如下所示:

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

我无法删除节点,因为其中可能有不是 appendTo 目标的元素。但是,在这种情况下,不是。

【问题讨论】:

    标签: jquery appendto removing-whitespace


    【解决方案1】:

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

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

    【讨论】:

    • 我在控制台中运行它并且它返回未定义。我正在使用 css 来验证: .footer .pre-footer:empty{display:none!important}
    • @ScottB 好吧,我虽然您使用的是 jQuery :empty 选择器,但它不会删除空格,它会过滤只有空格或没有内容的元素。试试$(".pre-footer").filter(function() { return !$.trim(this.innerHTML).length; }).hide();
    • +1 是的,您的答案适用于修改后的代码并使用 jQuery empty 与 CSS empty。谢谢!我在想你正在使用 jQuery trim 来删除空节点空格,以便 CSS :empty 工作。
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多