如何使用Javascript删除网站上的每个文本

时间:2014-11-30 17:53:38

标签: javascript dom parent-node child-nodes

我希望有一个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>

3 个答案:

答案 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 
}