我知道在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);不确定我做错了什么?有什么想法吗?
谢谢
发布于 2011-05-31 07:32:57
问题出在这里:
var newString = oldString.replace(/oldText/g, newText);它实际上是在搜索oldText,而不是"Mobile"
正如kb所说,您可以通过以下方法解决此问题:
var newString = oldString.replace(new RegExp(oldText, "g"), newText);发布于 2011-05-31 07:41:13
目前,您使用的是容易出错的方式。
容易出错,因为您将丢失事件处理程序以及替换您可能不想替换的内容。如果搜索词是'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。
发布于 2011-05-31 07:41:54
为了提供一个不使用eval的答案(重复我的话:不要使用eval!),试一下这一行:
var newString = oldString.replace(new RegExp(oldText, "g"), newText);以前有/pattern/flags,现在有new RegExp(pattern, flags)
https://stackoverflow.com/questions/6181593
复制相似问题