我正在尝试使用javascript更改网页的可见HTML文本。
码:
function changeHTMLContent() {
var server_url = "http://127.0.0.1:8000";
var oldHTML = document.documentElement.innerHTML;
$.post(server_url + "/changeHTMLDoc/",
{ input_html: oldHTML,},
function(response) {
var resp = JSON.stringify(response);
resp = resp.substring(1, resp.length - 1);
var jObj = JSON.parse(resp);
var oldText = jObj.oldText;
var newText = jObj.newText;
alert(newText);
var newHTML = document.documentElement.innerHTML;
for (var i = 0; i < oldText.length; i++) {
newHTML = newHTML.replace(/oldText[i]/g, newText[i]);
}
alert(newHTML);
document.documentElement.innerHTML = newHTML;
});
}
alert(newText)
显示正确的文本更改(这是所需的)。 alert(newHTML)
与OldHTML
相同。 (尽管它应该从for循环中更改,但似乎不起作用。)更新:
newHTML = newHTML.replace(new RegExp(oldText[i],"g"), newText[i]);
在循环内部使用了它,并用newText更改了oldText,但是html页面的css / img与此失真了。 (所有的css / img文件都位于项目的静态文件夹中。)
有人可以建议如何解决吗?
谢谢,
最佳答案
这行有错误
newHTML = newHTML.replace(/oldText[i]/g, newText[i]);
您正在寻找将
"oldTexti"
完全替换为另一文本。如果要替换数组oldText中的字符串,则每次必须创建一个正则表达式
newHTML = newHTML.replace(new RegExp(oldText[i],"g"), newText[i]);
/oldText[i]/g
是:在中查找类似于"oldTexti"
的字符串全球
new RegExp(oldText[i],"g")
是:在数组中查找字符串全局(g)处索引
oldText
处的i