2012-08-04 129 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解析器。