0

我想从 html 中删除所有文本并仅打印标签。我最终写了这个:

var html = $('html');
var elements = html.find('*');
elements.text('');
alert(html.html());

它只打印出来<head></head><body></body>。不是假设要打印所有标签。我在 html 中有近 2000 个标签。

4

4 回答 4

5
var elements = html.find('*');
elements.text('');

这就是说“找到下面的所有元素html,然后清空它们”。这包括bodyhead。当它们被清空时,页面上没有其他元素,因此它们是唯一出现在html's 内容中的元素。

如果您真的想从页面中删除所有文本并保留元素,则必须使用 DOM 方法:

html.find('*').each(function() {               // loop over all elements
    $(this).contents().each(function() {       // loop through each element's child nodes
        if (this.nodeType === 3) {             // if the node is a text node
            this.parentNode.removeChild(this); // remove it from the document
        }
    });
})
于 2012-08-27T18:30:03.340 回答
2

您刚刚从您的 dom 中删除了所有内容:

$('html').find('*').text('');

这会将 内部所有节点的文本设置为<html>空字符串,删除后代元素 - 剩下的唯一两个节点是根节点的两个子节点,<head></head>以及<body></body>它们的空文本节点子节点 - 正是你得到的结果。

如果要删除所有文本节点,则应使用以下命令:

var html = document.documentElement;
(function recurse(el) {
    for (var i=0; i<el.childNodes.length; i++) {
        var child = el.childNodes[i];
        if (child.nodeType == 3)
            el.removeChild(child);
        else
            recurse(child);
    }
})(html);
alert(html.outerHTML);
于 2012-08-27T18:38:45.513 回答
0

lonesomeday 似乎有正确的道路,但你也可以像这样进行一些字符串重建:

    var htmlString=$('html').html();
    var emptyHtmlString="";
    var isTag=false;

for (i=0;i<htmlString.length;i++)
{
    if(htmlString[i]=='<')
        isTag=true;
    if(isTag)
    {
        emptyHtmlString+=htmlString[i];
    }
    if(htmlString[i]=='>')
        isTag=false;
}
alert(emptyHtmlString);
于 2012-08-27T18:38:33.360 回答
0

试试这个

$(function(){

    var elements = $(document).find("*");

    elements.each(function(index, data){
        console.log(data);
    });

});

这将返回页面的所有 html 元素。

于 2012-08-27T18:33:45.090 回答