我有一段代码允许从子节点中删除文本,如下所示:
$.fn.removeText = function() {
for (var i=this.length-1; i>=0; --i) removeText(this[i]);
};
function removeText(node) {
if (!node) return;
for (var i=node.childNodes.length-1; i>=0; --i) {
var childNode = node.childNodes[i];
if (childNode.nodeType === 3) node.removeChild(childNode);
else if (childNode.nodeType === 1) removeText(childNode);
}
}
$('body').removeText();
所以现在我试图排除元素,例如像这样的跨度:
$('body:not(span)').removeText();
它不起作用,一切都被删除了。我尝试了其他几个(Jquery)的东西没有运气。我是否必须更改removeText()
功能?我真的很想坚持Jquery ..还有什么我可以尝试的吗?
答案 0 :(得分:3)
您需要在body
和:not()
选择器
$("body :not(span)")
没有空间,你实际上说的是给我身体,这不是一个跨度元素 - 它总是真实的,只返回身体元素。
你说,有了这个空间,给我所有的孩子一个不是跨越元素的身体元素。
<强>更新强>
我相信你看到的问题是jQuery没有选择文本节点(至少据我所知)。这个SO answer提出了一种选择后代文本节点的方法。
在你的小提琴中,唯一可以选择的身体后代元素是跨度,你可以选择退出该元素与你的:not(span)
选择器。
答案 1 :(得分:1)
该选择器$('body:not(span)')
表示您希望所有body
代码都不跨越。
请尝试$(':not(span)')
。
答案 2 :(得分:1)
试试这个......
$("body").find("*").not('span').removeText();
答案 3 :(得分:0)
答案 4 :(得分:0)
我找到了一个非常简单的方法,以防万一有人感兴趣。它就在Jquery文档中,而且太容易了......
$('body *').contents().filter(function() {
return this.nodeType == 3;
})
//Then do your thing
.remove();