我想删除html中的所有文字并仅打印标签。我写完了这个:
var html = $('html');
var elements = html.find('*');
elements.text('');
alert(html.html());
只打印<head></head><body></body>
。不是假设要打印所有标签。我在html中有近2000个标签。
答案 0 :(得分:4)
var elements = html.find('*');
elements.text('');
这说“找到html
以下的所有元素,然后清空它们”。其中包括body
和head
。当它们被清空时,页面上没有其他元素,因此它们是唯一出现在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);