2012-08-04 137 views
0

我正在瀏覽從網站中提取的內容中刪除html標記的方法。從字符串中刪除部分html標記

它可能包含實例一樣完整的HTML標籤<a href="\testlink"> tst</a>

或損壞的像<div class="testClass"class="testClass">,我已經拿出取出完整的標籤的方式,能局部標籤使用JavaScript或jQuery的去除(正則表達式的方法)???

,我用來除去完整標記的代碼是replace(/<(?:.|\n)*?>/gm, '')

+3

你會如何知道破碎的標籤在哪裏結束並開始內容? – JJJ 2012-08-04 09:20:21

+0

從我所瞭解的唯一的東西,將幫助我們找到結束並開始是< and > – 2012-08-04 09:21:43

+1

破碎的標籤不是標籤,他們是簡單的文本。 – Narendra 2012-08-04 09:22:09

回答

0

這是很難使用正則表達式即使在高層次的語言做。但是你可以將html注入到當前的DOM中,或者例如在隱藏的iframe中。然後,您將構建一個「節點漫遊者」,沿着DOM樹向下搜索並收集HTML節點的「內部文本」。只要DOM代表它們,您就可以使用本機DOM解析器獲得您想要的東西。

我這樣做一次,它的工作是這樣的:

var nodes = document.getElementsByTagName('BODY'); 
function nodeWalker(node) { 
if(!node.hasChildNodes()) { 
    return; 
} 

for(var i=0; i<node.childNodes.length; i++) { 
    // filter by node type == 3 equals TEXT_NODE 
    if((node.childNodes[i].nodeType == 3) && node.childNodes[i].nodeValue.length > 0) {    
    // extract content in node.childNodes[i].nodeValue 
    } 
    // type == 1 equals ELEMENT_NODE 
    else if(node.childNodes[ i ].nodeType == 1) { 
    nodeWalker(node.childNodes[i]); 
    } 
} 
} 

http://www.w3schools.com/dom/dom_nodetype.asp所有可能的節點類型!

另一種方式是使用AJAX和服務器端DOM解析器。