我正在做一些html页面的清理,删除锚点,只是离开文本节点,用标签<asdf>
包裹所有文本节点(没有围绕它的元素),删除所有空元素,如{{ 1}}或<div></div>
。
当我在不同的网站上试用它时,当我复制粘贴整个脚本时,似乎有不同程度的成功。但是,当我按块运行它时,它按预期工作,不会抛出任何错误。
<span> </span>
它会抛出类似
的错误 //remove anchors but text intact
$('a').replaceWith(function() {
return $.text([this]);
});
//wrap text nodes
var items = window.document.getElementsByTagName("*"); for (var i = items.length; i--;) { wrap(items[i]) }; function wrap(el){ var oDiv = el; for (var i = 0; i < oDiv.childNodes.length; i++) { var curNode = oDiv.childNodes[i]; if (curNode.nodeName === "#text" && oDiv.childNodes.length !== 1) { var firstText = curNode; var newNode = document.createElement("asdf"); newNode.textContent = firstText.nodeValue; firstText.parentNode.replaceChild(newNode, firstText); } } }
//remove empty elements
$("*").filter(function () {
return !($.trim($(this).text()).length);
}).hide();
$('*').filter(function() {
return $.trim($(this).text()) === '' && $(this).children().length == 0
}).remove()
这是由:
引起的NotFoundError: An attempt was made to reference a Node in a context where it does not exist.
所以如果我解决了这个问题,那就可以了。
答案 0 :(得分:1)
您是否通过将脚本全部写入一行来测试脚本:
$('a').replaceWith(function() { return document.createTextNode($.text([this]));}); var items = window.document.getElementsByTagName("*"); for (var i = items.length; i--;) { wrap(items[i]) }; function wrap(el){ var oDiv = el; for (var i = 0; i < oDiv.childNodes.length; i++) { var curNode = oDiv.childNodes[i]; if (curNode.nodeName === "#text" && oDiv.childNodes.length !== 1) { var firstText = curNode; var newNode = document.createElement("asdf"); newNode.textContent = firstText.nodeValue; firstText.parentNode.replaceChild(newNode, firstText); } } };$("*").filter(function () { return !($.trim($(this).text()).length);}).hide();$('*').filter(function() { return $.trim($(this).text()) === '' && $(this).children().length == 0;}).remove();
在Chrome上,它在我测试的所有地方工作,并且jQuery存在。