簡體   English   中英

Javascript regex:刪除 HTML 標簽之間的文本

[英]Javascript regex : remove text between HTML tags

我想刪除任何 HTML 標簽之間的文本:

例子 :

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

我的 var 結果應該是:

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

如果,正如您的問題所暗示的那樣,您想從任何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 方面並不是很好。

香草 JS 的救援

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

只需插入您想要的任何標簽和 wallah,無需正則表達式或 90kb 庫。

Javascript 已經能夠通過內置函數以一種在概念上優於正則表達式的方式來實現這一點

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

你可能想要做這樣的事情;

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();

不要使用正則表達式。 使用類似 loadXMLDoc() 的方法來解析 DOM 並打印標簽,而不是嘗試從標簽中刪除值。

測試了我的 JS 並為我工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM