Javascript正则表达式:删除HTML标记之间的文本

时间:2014-01-06 17:34:42

标签: javascript regex

我想删除任何HTML标记之间的文字:

示例:

<div>
   <h1>Title</h1>
</div>

我的var结果应该是:

<div>
    <h1></h1>
</div>

6 个答案:

答案 0 :(得分:5)

如果您的问题建议,您希望从任何 HTML标记之间删除所有文本...只有真正的DOM才能删除它。

function removeAllTextNodes(node) {
    if (node.nodeType === 3) {
        node.parentNode.removeChild(node);
    } else if (node.childNodes) {
        for (var i = node.childNodes.length; i--;) {
            removeAllTextNodes(node.childNodes[i]);
        }
    }
}

textContentinnerHTML不同,它会保留所有现有的元素结构并仅删除文本。

如果你真的有一个字符串并且在浏览器中使用客户端JavaScript,并且该字符串代表文档内容的一部分(而不是整个文档 - 即你找不到任何DTD,<html><head><body>个元素,然后你可以通过将它放入一个元素来解析它:

var container = document.createElement("div");
container.innerHTML = htmlString;
removeAllTextNodes(container);
return container.innerHTML;

否则,您可能需要JavaScript的HTML解析器。正如已经指出的那样,正则表达式在解析HTML方面并不是很好。

答案 1 :(得分:3)

VANILLA JS救助

var x = document.getElementsByTagName("h1");
for (var i=0; i<x.length; i++) {
    x[i].innerHTML = "";
}

只需插入您喜欢的任何标签和wallah,不需要正则表达式或90kb库。

答案 2 :(得分:2)

Javascript已经能够以一种在概念上优于正则表达式的内置函数来实现这一目标

<div>
   <h1 id="foo">Title</h1>
</div>
<script>
   document.getElementById("foo").textContent = ""
</script>

答案 3 :(得分:2)

您可能想要做这样的事情;

var elements = document.getElementsByTagName('*');
for(var i = 0; i < elements.length; i++) {
    var element = elements[i];
    if(element.children.length === 0) {
        elements[i].textContent = '';
    }
}

  • 查找所有元素
  • 循环使用
  • 删除任何文字内容

文档:

你也可以这样重复使用

var removeAllText = function() {
    var elements = document.getElementsByTagName('*');
    for(var i = 0; i < elements.length; i++) {
        var element = elements[i];
        if(element.children.length === 0) {
            elements[i].textContent = '';
        }
    }
}

然后,只要你想要,你就可以做到这一点

removeAllText();

答案 4 :(得分:0)

不要使用正则表达式。使用类似loadXMLDoc()的东西来解析DOM并打印标记,而不是尝试从标记中删除值。

答案 5 :(得分:0)

测试了我的 JS 并为我工作:

String.replace(/<yourtag>[\s\S]*<\/yourtag>/g, "");