多个嵌套元素上的jQuery .text('')

时间:2012-08-27 18:24:11

标签: javascript jquery

我想删除html中的所有文字并仅打印标签。我写完了这个:

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

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

4 个答案:

答案 0 :(得分:4)

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

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

如果你真的想删除页面中的所有文本并保留元素,那么你必须使用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
        }
    });
})

答案 1 :(得分:2)

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

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

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

如果要删除所有文本节点,请使用:

<body></body>

答案 2 :(得分:0)

试试这个

$(function(){

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

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

});

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

答案 3 :(得分: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);