寻找&使用Good Ole JavaScript替换Div中的Word

时间:2011-05-30 23:29:36

标签: javascript replace

我知道在jQuery中这很容易,但我想用JavaScript做。

我有这个:

window.addEventListener('load', function() {

        function replaceName() {
        var oldText= "Mobile";
        var newText = "Stackoverflow";
        var oldString= document.getElementById('replace').innerHTML;
        var newString = oldString.replace(/oldText/g, newText);
        document.getElementById('replace').innerHTML = newString;
        }

        replaceName();

}, false);

不确定我做错了什么?有什么想法吗?

由于

4 个答案:

答案 0 :(得分:7)

目前,您正在使用容易出错的方式。

容易出错,因为您将丢失事件处理程序以及替换您可能不想替换的内容。如果搜索字词为'a'怎么办?您是否希望所有a元素转换为替换字符串?

此外,当你再次设置时,你不必要地从DOM中序列化需要重新分析的HTML。

执行此操作的正确方法是仅迭代文本节点。

var replaceText = function replaceText(element, search, replace) {
    var nodes = element.childNodes;

    for (var i = 0, length = nodes.length; i < length; i++) {

        var node = nodes[i];

        if (node.childNodes.length) {
            replaceText(node, search, replace);
            continue;
        }

        if (node.nodeType != 3) {
            continue;
        }

        node.data = node.data.replace(new RegExp(search, 'g'), replace);
    }

}

jsFiddle

答案 1 :(得分:4)

问题在于:

var newString = oldString.replace(/oldText/g, newText);

它实际上是在搜索oldText而不是"Mobile"

正如kb所说,你可以通过以下方式解决这个问题:

var newString = oldString.replace(new RegExp(oldText, "g"), newText);

答案 2 :(得分:1)

为了提供不使用eval的答案(在我之后重复:不要使用eval!),请尝试以下行:

var newString = oldString.replace(new RegExp(oldText, "g"), newText);

以前你有/pattern/flags,现在你有new RegExp(pattern, flags)

答案 3 :(得分:0)

只需设置

var oldText = /Mobile/g