我正在尝试使用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

10-04 21:05