我希望有一个Javascript函数可以删除网站上的所有文字。背景是为了比较不同浏览器中渲染的DOM的外观,我需要消除之前的明显差异。由于字体渲染是已知的差异,我想删除每个文本。 我找到的解决方案总是这样:
if(start.nodeType === Node.TEXT_NODE)
{
start.parentNode.removeChild(start);
}
但这只会删除纯文本节点。我也想找到像:
这样的结构 <div>
<p>
<em>28.11.2014</em>
<img></img>
Testtext
<span>
<i>Testtext</i>
Testtext
</span>
</p>
</div>
包含文本的元素还包含类似或的子元素。这样,元素不会被识别为文本节点。
所以我基本上想把上面的DOM变成这个:
<div>
<p>
<em></em>
<img></img>
<span>
<i></i>
</span>
</p>
</div>
答案 0 :(得分:2)
你可以尝试这样的事情。
Demo
HTML:
<div id="startFrom">
<p>
<em>28.11.2014</em>
<img></img>
Testtext
<span>
<i>Testtext</i>
Testtext
</span>
</p>
</div>
JavaScript:
var startFrom = document.getElementById("startFrom");
function traverseDom(node) {
node = node.firstChild;
while (node) {
if (node.nodeType === 3) {
node.data = "";
}
traverseDom(node);
node = node.nextSibling;
}
}
traverseDom(startFrom);
console.log(startFrom);
答案 1 :(得分:2)
使用Jquery .. DEMO
$('selecter').find("*").contents().filter(function() {
return this.nodeType == 3;
}).remove();
答案 2 :(得分:1)
下面大致检查了下面这段代码,但您可以尝试将其放在外部.js文件中,并在onload上从您的文档中执行
function cleantxt()
{
var htmlsrc = document.documentElement.outerHTML;
var htmlnew = '';
var istag = false;
for(i=0; i<htmlsrc.length; i++) {
if(htmlsrc.charAt(i)=='<') {
istag = true;
htmlnew = htmlnew + htmlsrc.charAt(i);
}
else if(htmlsrc.charAt(i)=='>') {
istag = false;
htmlnew = htmlnew + htmlsrc.charAt(i);
}
else if(istag) {
htmlnew = htmlnew + htmlsrc.charAt(i);
}
}
document.getElementsByTagName("html")[0].innerHTML = htmlnew + 'Cleaned'; // just a signature to see it works
}