我正在经历从网站提取的内容中删除 html 标签的方法。
它可能包含完整的 html 标签等实例<a href="\testlink"> tst</a>
<div class="testClass"
或像or之类的损坏的class="testClass">
,我想出了一种删除完整标签的方法,可以使用javascript或jquery(正则表达式方式)删除部分标签吗?
我用来删除完整标签的代码是replace(/<(?:.|\n)*?>/gm, '')
我正在经历从网站提取的内容中删除 html 标签的方法。
它可能包含完整的 html 标签等实例<a href="\testlink"> tst</a>
<div class="testClass"
或像or之类的损坏的class="testClass">
,我想出了一种删除完整标签的方法,可以使用javascript或jquery(正则表达式方式)删除部分标签吗?
我用来删除完整标签的代码是replace(/<(?:.|\n)*?>/gm, '')
即使使用高级语言,使用正则表达式也很难做到这一点。但是您可以将 html 注入到当前 DOM 中,或者例如在隐藏的 iframe 中。然后你构建一个“节点遍历器”沿着 DOM 树向下收集 HTML 节点的“内部文本”。只要 DOM 代表它们,您就可以使用本机 DOM-Parser 获得所需的内容。
我这样做过一次,它的工作原理是这样的:
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-Parser。