纯Javascript -查找/替换DOM中的单词列表
Pure Javascript - Find/Replace a list of words in DOM
我有一个单词列表,我想在DOM中替换它们。
替换工作,但它有一个问题。在被替换的文本之前和之后,它放置一个不希望的斜杠(即减少到一个旅>减少/OTHER WORD 1/a旅)
另外,我需要用html标记包装被替换的单词,如。(即缩编为一个旅>缩编为一个旅)
你可以看到下面的代码:https://jsfiddle.net/realgrillo/9uL6ofge/
var elements = document.getElementsByTagName('*');
var words = [
[/(^|'s)([Tt]o)('s|$)/ig, 'OTHER WORD 1'],
[/(^|'s)([Aa]nd)('s|$)/ig, 'OTHER WORD 2']
];
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
for (var j = 0; j < element.childNodes.length; j++) {
var node = element.childNodes[j];
if (node.nodeType === 3) {
var text = node.data;
for (var k = 0; k < words.length; k++)
{
var from = new RegExp(words[k][0]);
var to = new RegExp('$1' + words[k][1] + '$3');
var replacedText = text.replace(from, to);
//console.log("from: " + from);
//console.log("to: " + to);
//console.log("toDo: " + toDo);
if (replacedText !== text)
{
element.innerHTML = element.textContent.replace(from, to);
console.log("text: " + text);
console.log("replacedText: " + replacedText);
}
}
/*
//
//!!!!THIS CODE FOR 1 WORD WORKS!!!! I need to do this for the list of words.
//
var replacedText = text.replace(/(^|'s)([Tt]o)('s|$)/ig, '$1OTHER WORD$3');
if (replacedText !== text) {
element.innerHTML = element.textContent.replace(/(^|'s)([Tt]o)('s|$)/ig, '$1<b class=modified>OTHER WORD</b>$3');
}
*/
}
}
}
JS大师们,你们能帮帮我吗?纯javascript,而不是jQuery。
谢谢。
我可以给你一些更简单的函数。首先定义一个函数来替换像这样的单词:
String.prototype.replaceAll = function (search, replacement) {
try {
var target = this;
return target.split(search).join(replacement);
} catch (e) {
return "";
}
};
这就是为什么纯javascript replace
函数在整个情况下只替换一次。之后,您可以在代码中使用它,如下所示:
var replacedText = text.replaceAll(/(^|'s)([Tt]o)('s|$)/ig, '$1OTHER WORD$3');
您不需要将words[k][0]
解析为RegExp
,因为它已经是一个,即使它不会中断,因为构造函数将很好地处理RegExp
。
同样对于words[k][1]
,您也不需要将其解析为RegExp
,因为String.prototype.replace
的第二个参数预计是一个普通字符串。斜杠在那里是因为您将RegExp
转换为字符串(并将结束输出)。
这是一个可以解决这个问题的修改:
var to = '$1' + words[k][1] + '$3';
这是可选的,但可能是一个很好的做法:
var from = words[k][0];
对于获得html标记,您可以直接在每个words[k][1]
或to
var声明中更改它,这取决于您想要什么。
额外
:
在for循环中,代码假设至少有三个组(因为'$3'
引用),另一种选择是在words[k][1]
中直接委托此替换,但这取决于您的决定。
相关文章:
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 如何根据 js 中每个单词的第 n 个字母按字母顺序排列列表
- 如何将单词列表拆分为数组
- JQuery-从单词列表生成网格
- JavaScript-从脚本中的单词列表创建一个html表或网格
- 如何更新单词列表中搜索框中包含用户键入内容的单词/字母数
- 创建一个输入,该输入在用户键入后立即不断更新单词列表
- 忽略单词列表
- JavaScript中要忽略的单词列表
- 如何检查我的 chrome 扩展程序的 if 语句中的单词列表
- 如何使用Javascript正则表达式从可能的单词列表中获取单词的最后一次出现
- 在JavaScript中,如何使用regex进行匹配,除非单词在排除的单词列表中
- 如何使用正则表达式来获取阿拉伯字符串中的单词列表?
- 将单词列表转换为数组
- 向单词列表添加一些文本
- 有没有“电影演职员表”滚动显示?样式插件的单词列表
- 获取字符串中包含子字符串的单词列表
- 使用可选的包含和排除单词列表来定位一组单词
- 纯Javascript -查找/替换DOM中的单词列表
- JavaScript表单验证 - 值长度和阻止的单词列表