【问题标题】:Remove elements with only a   space using jQuery使用 jQuery 删除只有空格的元素
【发布时间】:2013-09-06 23:40:10
【问题描述】:

有没有办法去掉这个

<p> </p>

使用 jQuery?

【问题讨论】:

  • 问题:你控制生成的源吗?如果是这样,您是否考虑过不生成空标签?

标签: jquery html


【解决方案1】:

试试:

$('p')
    .filter(function() {
        return $.trim($(this).text()) === '' && $(this).children().length == 0
    })
    .remove()

它的作用是找到所有没有任何内容的&lt;p&gt;s,并将它们从 DOM 中删除。

【讨论】:

  • 不错的过滤器。这将删除所有空的

    标签

  • 请注意,这也会删除

  • 虽然这是一个好的开始,但由于 Greg 上面给出的原因,我对这个答案投了反对票。
  • @Greg return $.trim($(this).text()) === '' &amp;&amp; $(this).children().length == 0 将会工作。
  • 我在下面提供了一个通用的解决方案,比使用 $(this).children().length 稍快。
【解决方案2】:

正如 Greg 上面提到的,测试修剪后的 .text() 将删除没有文本的段落,但确实有一个独立的元素,如 &lt;img&gt; 标记。为避免,修剪 .html() 返回。由于文本被视为 DOM 中的子元素,因此您将被设置。

$("p").filter( function() {
    return $.trim($(this).html()) == '';
}).remove()

【讨论】:

    【解决方案3】:

    这对于 CMS 来说可能是一个更好的解决方案。一些富文本编辑器在空段落中添加&amp;nbsp;

        $("p").filter( function() {
    
            var html = $(this).html();
    
            if(html == '' || html == '&nbsp;')
                return true;
    
        }).addClass('emptyP');
    

    【讨论】:

      【解决方案4】:

      可能与here 的答案相同,请尝试在后面的代码中执行此操作。

      使用 jquery 我会使用这个:

      $("p:empty").remove();
      

      您也可以使用 .empty(),它将从匹配元素集中删除所有子节点。

      【讨论】:

      • 这不会删除&lt;p&gt; &lt;/p&gt;,因为它与:empty 选择器不匹配。
      • 在这种情况下,您可以通过 css 使用:p:empty { display: none; }
      【解决方案5】:
      $("p").filter( function() {
                  return $.trim($(this).html()) == '';
              }).remove()
      

      我用它来删除不包含 IMG、Input、Select 等元素的空段落。

      【讨论】:

        【解决方案6】:

        如果您想简单地删除所有空的 P 元素,或者只有一个空格的 P,那么您可以这样做:

        $('p').map( function(){
          var html = $(this).html();
          if( !html.length || html == ' ' || html == String.fromCharCode(255) )
            return this;
        }).remove();
        

        这会遍历页面上的所有 P,如果它们符合特定条件(它们为空或只有一个空格),则它将它们从 DOM 中删除。

        此外,通过将我们的 html 内容分配给一个局部变量,它可以帮助脚本更快地运行。要查找不间断空格,我只需将内容与从 ASCII 字符代码 255(这是一个不间断空格)创建的字符串进行比较。

        当一个简单的过滤器或属性比较不够用时,jQuery 的 map() 函数会很棒。

        你可以在这里阅读更多关于它的信息......http://api.jquery.com/map/

        【讨论】:

          【解决方案7】:

          这应该处理没有任何类型的子节点的任何元素(包括未包装的文本节点)。

          $("p").filter(function() { 
            return !this.childNodes[0]
          }).remove();
          

          【讨论】:

          • 这不会删除&lt;p&gt; &lt;/p&gt;,不确定这是否是您的意图。
          • 哎哟。除了回答 OP 的问题外,它什么都做。那绝对不是我的本意。请给我投反对票。
          【解决方案8】:

          给它一个 id(以获取选择器)。

          <p id="myP"></p>
          
          
          <script>
          
          $("#myP").remove();
          
          </script>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-01-08
            • 1970-01-01
            • 2011-03-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-05
            相关资源
            最近更新 更多