2

我想要一个 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>

其中包含文本的元素还包含类似 or 的子元素。这样,该元素就不会被识别为文本节点。

所以我基本上想把上面的DOM变成这样:

 <div>
        <p>
             <em></em>
             <img></img>
             <span>
                <i></i>
             </span>
        </p>
  </div>
4

3 回答 3

2

你可以尝试这样的事情。
演示

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);
于 2014-11-30T18:15:59.217 回答
2

用 Jquery..演示

$('selecter').find("*").contents().filter(function() {
    return this.nodeType == 3;
}).remove();
于 2014-11-30T19:20:35.307 回答
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 
}
于 2014-11-30T18:24:52.860 回答