我想从 html 中删除所有文本并仅打印标签。我最终写了这个:
var html = $('html');
var elements = html.find('*');
elements.text('');
alert(html.html());
它只打印出来<head></head><body></body>
。不是假设要打印所有标签。我在 html 中有近 2000 个标签。
我想从 html 中删除所有文本并仅打印标签。我最终写了这个:
var html = $('html');
var elements = html.find('*');
elements.text('');
alert(html.html());
它只打印出来<head></head><body></body>
。不是假设要打印所有标签。我在 html 中有近 2000 个标签。
var elements = html.find('*');
elements.text('');
这就是说“找到下面的所有元素html
,然后清空它们”。这包括body
和head
。当它们被清空时,页面上没有其他元素,因此它们是唯一出现在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
}
});
})
您刚刚从您的 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);
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);
试试这个
$(function(){
var elements = $(document).find("*");
elements.each(function(index, data){
console.log(data);
});
});
这将返回页面的所有 html 元素。