【发布时间】:2016-12-22 04:25:36
【问题描述】:
我有一个单词列表,我想在 DOM 中替换它们。
替换工作正常,但有问题。在被替换的文本之前和之后,它会放置一个不需要的斜杠(即减少为一个旅 > 减少/ OTHER WORD 1 /a brigade)
另外,我需要用一个 html 标签来包装被替换的单词,比如 . (即缩减为一个旅 > 将 OTHER WORD 1 缩减为一个旅)
您可以在此处查看代码: 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。
谢谢。
【问题讨论】:
-
赞成这个问题,它有一个明确的目标,并且有一个简单且可测试的代码示例。
标签: javascript html text replace