查找&使用好的Ole JavaScript替换Div中的单词
Finding & Replacing a Word within a Div Using Good Ole JavaScript
我知道在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);
不确定我做错了什么?有什么想法吗?
感谢
目前,您使用的是容易出错的方式。
容易出错,因为您将丢失事件处理程序以及替换您可能不想替换的东西。如果搜索词是'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。
问题就在这里:
var newString = oldString.replace(/oldText/g, newText);
它实际上是在搜索oldText
而不是"Mobile"
正如kb所说,您可以通过以下方式解决此问题:
var newString = oldString.replace(new RegExp(oldText, "g"), newText);
为了提供一个不使用eval
的答案(在我之后重复:不要使用eval
!),请尝试以下行:
var newString = oldString.replace(new RegExp(oldText, "g"), newText);
以前有/pattern/flags
,现在有new RegExp(pattern, flags)
只需设置
var oldText = /Mobile/g
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用OLE自动化访问Javascript变量
- 查找&使用好的Ole JavaScript替换Div中的单词