3 回答
TA贡献1794条经验 获得超8个赞
要用另一个字符串替换HTML中的字符串,请使用innerHTML的replace方法:
document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
请注意,这将替换hello整个正文的第一个实例,包括您的HTML代码中的任何实例(例如,类名等。),请谨慎使用-为了获得更好的结果,请尝试通过使用以下内容定位代码来限制替换的范围document.getElementById或类似文件。
要替换目标字符串的所有实例,请使用带有global标志的简单正则表达式:
document.body.innerHTML = document.body.innerHTML.replace(/hello/g, 'hi');
TA贡献1777条经验 获得超3个赞
下面的功能对我来说很完美:
// Note this *is* JQuery, see below for JS solution instead
function replaceText(selector, text, newText, flags) {
var matcher = new RegExp(text, flags);
$(selector).each(function () {
var $this = $(this);
if (!$this.children().length)
$this.text($this.text().replace(matcher, newText));
});
}
这是一个用法示例:
function replaceAllText() {
replaceText('*', 'hello', 'hi', 'g');
}
$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);
您也可以像这样直接进行替换:
document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
但是要小心,因为它也可能会影响标签,css和脚本。
编辑: 至于纯JavaScript解决方案,请改用此方法:
function replaceText(selector, text, newText, flags) {
var matcher = new RegExp(text, flags);
var elems = document.querySelectorAll(selector), i;
for (i = 0; i < elems.length; i++)
if (!elems[i].childNodes.length)
elems[i].innerHTML = elems[i].innerHTML.replace(matcher, newText);
}
TA贡献1831条经验 获得超10个赞
我有同样的问题。我在innerHTML上使用replace编写了自己的函数,但这会破坏锚链接等。
为了使其正常工作,我使用了一个库来完成此任务。
该库有一个很棒的API。包含脚本后,我这样称呼它:
findAndReplaceDOMText(document.body, {
find: 'texttofind',
replace: 'texttoreplace'
}
);
添加回答
举报