移除空段落标签

3
我希望能找到最简单的方法在任何文本开始前修剪空的

标签。例如,我有以下文本。
<p> </p><p> </p>
<p> </p><p>     </p>
<p>    </p>
<p>This is an example<br></p><p> </p><p>continue </p>

我希望输出结果为<p>这是一个例子<br></p><p>继续</p> 我想删除所有空的P标签。在

标签之间可以有多个空格。
我可以使用CSS或VB或C#进行操作。

3
为什么这被标记为C#呢? - Marco
我没有问题将C#转换为VB。如果你有使用C#的解决方案,那么我可以将其转换为VB。修改了问题。 - Rad
我已经用C#给你一个答案,然后尝试自己将其翻译成VB。 - Marco
@Rad 看看我的回答,它会给你想要的 :) - Imad
6个回答

5

你的问题标签是css。因此,我将使用:empty伪类选择器在css中为您提供答案:

p:empty{
  display: none;
}

请参考 can I use :empty


根据您更新的问题:

您可以使用以下方式中的 not

p:empty :not(p + p:empty){
   display: none;
}

这将隐藏所有的P标签。我想删除任何文本前面的标签。我已经修改了示例。 - Rad
没有嵌套的P标签。 - Rad
这不会移除包含空格的标签。这个功能是在 CSS 选择器级别 4 的规范中引入的(参见 can i use :empty matches whitespace)。目前(2023 年 8 月),没有浏览器支持这个功能。 - Jeanot Zubler

4

如果您也接受C#,我建议您使用一个简单的正则表达式来验证它:

var source = @"<p> </p><p> </p>
<p> </p><p>     </p>
<p>    </p>
<p>This is an example<br></p><p> </p><p>continue </p>";

string output = Regex.Replace(source, @"<p>\s*</p>", "").Trim();

同样的VB.net代码,使用Telerik转换后应该是这样的:
Dim source = "<p> </p><p> </p>" & vbCr & vbLf & "<p> </p><p>     </p>" & vbCr & vbLf & "<p>    </p>" & vbCr & vbLf & "<p>This is an example<br></p><p> </p><p>continue </p>"

Dim output As String = Regex.Replace(source, "<p>\s*</p>", "").Trim()

说明:

<p> matches the characters <p> literally
\s* match any white space character [\r\n\t\f ] 0 to unlimited times
</p> matches the characters </p> literally

0

使用 jQuery,不要用 c#、vb.net 或 CSS

在文档准备好时编写此代码

var p = $("p"); 

    for (var i = 0; i < p.length; i++)
   { 
       if($.trim(p[i].innerHTML) == "")
        {
          p[i].remove();
         }
    }
  1. 查找所有的P标签
  2. 遍历它们以查找空标签
  3. 删除它们

JSFiddle


0

你没有理解我的问题。我不想修剪所有的P标签,只想修剪前面有文本的标签。 - Rad

-1

我认为这个 CSS 技巧会起作用:

p:empty {
    display: none;
}

1
一个空格不算是空的吗? - Mox
空选择器匹配所有没有子元素(包括文本节点)的元素。 - Dima
我想要删除仅在文本开始之前存在的空节点。并非所有空段落。 - Rad
正如 @Mox 所说:如果标签中包含空格,这个功能不会移除标签。这个功能是在 CSS 选择器级别 4 的规范中引入的(参见 can i use :empty matches whitespace)。目前(2023 年 8 月),没有浏览器支持这个功能。 - Jeanot Zubler

-1
请尝试这个。
   function removeEmptyPTags() {            
                var items = $('body').find('p');
                $.each(items, function (i, v) {
                    if ($(items[i]).html().trim() === "") {
                        $(items[i]).remove();
                    }
                });
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接