在网页的正文区域是唯一可访问的部分的情况下,是否有一种方法可以使用内联JavaScript或另一种内联语言来删除特定文本短语(以HTML编写)的所有实例?
这在许多情况下可能很有用,例如使用Tiny.cc/customurl并希望删除表示“ tiny.cc/”的部分的人。
如果允许特定信息,我们将使用Tiny.cc修改日历插件以创建自定义URL(tiny.cc/customurl)。该插件默认情况下会显示完整的URL,因此我们希望删除文本“ tiny.cc/”,并在代码中保留“ customurl”部分:
<div class="ews_cal_grid_custom_item_3">
<div class="ews_cal_grid_select_checkbox_clear" id="wGridTagChk" onclick="__doPostBack('wGridTagChk', 'tiny.cc/Baseball-JV');" > </div>
tiny.cc/Baseball-JV
</div>
我们要删除的部分是第三行上的
http://tiny.cc/
本身。 最佳答案
要执行此操作而不替换所有HTML(会破坏所有事件处理程序)并且不进行递归操作(通常会更快),您可以执行以下操作:
function removeText(top, txt) {
var node = top.firstChild, index;
while(node && node != top) {
// if text node, check for our text
if (node.nodeType == 3) {
// without using regular expressions (to avoid escaping regex chars),
// replace all copies of this text in this text node
while ((index = node.nodeValue.indexOf(txt)) != -1) {
node.nodeValue = node.nodeValue.substr(0, index) + node.nodeValue.substr(index + txt.length);
}
}
if (node.firstChild) {
// if it has a child node, traverse down into children
node = node.firstChild;
} else if (node.nextSibling) {
// if it has a sibling, go to the next sibling
node = node.nextSibling;
} else {
// go up the parent chain until we find a parent that has a nextSibling
// so we can keep going
while ((node = node.parentNode) != top) {
if (node.nextSibling) {
node = node.nextSibling;
break;
}
}
}
}
}
此处的演示工作:http://jsfiddle.net/jfriend00/2y9eH/
要在整个文档上执行此操作,您只需调用:
removeText(document.body, "http://tiny.cc/Baseball-JV");
关于javascript - 如何删除特定文本短语的所有实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12077696/