1
我想从加载后使用javascript的html页面中删除文本,“嗨妈妈”。JavaScript删除文本
我不能使用像jQuery这样的任何框架。
我可以使用DOM,但不知道它在哪里,除了它被包裹在某处的标签中。
这可以在普通的旧Javascript中完成吗?
我想从加载后使用javascript的html页面中删除文本,“嗨妈妈”。JavaScript删除文本
我不能使用像jQuery这样的任何框架。
我可以使用DOM,但不知道它在哪里,除了它被包裹在某处的标签中。
这可以在普通的旧Javascript中完成吗?
这是一个非常简单的DOM操作,你可以做。
如果您认为同一个文本节点中可能会出现多次,可能会有所改进,但听起来并不是这种情况。
DEMO:http://jsfiddle.net/UrNWb/
var text_to_remove = "Hi Mom";
function dom_walk(el) {
if(el.nodeType === 1 && el.childNodes.length) {
if(el.nodeName.toLowerCase() !== 'script') {
for(var i = 0; i < el.childNodes.length; i++) {
dom_walk(el.childNodes[ i ]);
}
}
} else if(el.nodeType === 3) {
if(el.data.indexOf(text_to_remove) !== -1) {
el.data = el.data.replace(text_to_remove, '');
}
}
}
dom_walk(document.body);
酷,但indexOf测试看起来多余,为什么不只是做替换(并保存一行代码)。也不理解el.childNodes.length的测试,如果它为零,for循环将被忽略。 – RobG
@RobG:我想到'indexOf'比'.replace()'+重新分配更快的操作。而'.length',我只是想尽可能地避免'if'中的额外工作,比如'toLowerCase()',但是你是对的,它可以被消除。 – user113716
...但是后来我想在脚本的情况下,'.length'不可能是'0',所以真的没有意义。编辑:其实,我只是做了一个测试,至少在Chrome中,我得到'
document.body.innerHTML = document.body.innerHTML.replace("Hi Mom", "")
应该是一个体面的开始。来源
2011-09-27 00:52:15
销毁和恢复整个DOM结构并不是一个好习惯。 – user113716
您只是销毁了非内联文档中的每个侦听器,并且可能会一路销毁相当多的属性和默认属性。 – RobG
最简单的办法:
你也可以做一个递归版本,但上述只是简单。
来源
2011-09-27 01:04:42 RobG