这是我的代码:
var keys = keyword.split(' ');
//alert(keys);
for(var i=0; i<keys.length; i++)
{
var re = new RegExp(keys[i], "gi");
var NewString = oldvar.replace(re, '<span style="background-color:#FFFF00">'+keys[i]+'</span>');
document.getElementById("wordlist").innerHTML=NewString;
alert(keys[i]);
}
但是如果我把字符串“a b”放在这里;它分为两个字母“a”和“b” 并且这个替换函数替换“a”但是当它得到“b”时它会覆盖并且只替换“b”。 但我想强调“a”和“b”。 怎么解决这个? 我有另一个问题。如果我替换/突出显示它,那么它将替换HTML标记的所有“a”和“b”。那么,如何防止替换那些html标签。但是当我显示整个文本时,我需要所有的html标签
答案 0 :(得分:2)
var keys = keyword.split(' ');
//alert(keys);
for(var i=0; i<keys.length; i++)
{
var re = new RegExp(keys[i], "gi");
oldvar = oldvar.replace(re, '<span style="background-color:#FFFF00">'+keys[i]+'</span>');
document.getElementById("wordlist").innerHTML=oldvar;
alert(keys[i]);
}
编辑: 很明显oldvar在循环期间没有改变,总是只有最后替换被应用。您必须更改“oldvar”才能替换所有单词
答案 1 :(得分:2)
你实际上可以像这样做一个正则表达式替换:
var re = new RegExp(keys.join("|"), "gi");
oldvar = oldvar.replace(re, replacer);
document.getElementById("wordlist").innerHTML = oldvar;
function replacer(str)
{
return '<span style="background-color:#FFFF00">' + str + '</span>';
}
示例 - http://jsfiddle.net/zEXrq/1/
它正在做的是将所有键合并为|
分隔的单个正则表达式,它将匹配所有单词,然后在匹配项上运行replacer函数。
答案 2 :(得分:1)
您应该对同一个var执行操作。你在循环之外使用oldvar,但从不将更改的内容转换为oldvar。所以最后一次迭代(仅)是替换内容的那次。
答案 3 :(得分:0)
您在每次迭代中对变量replace
(未在此片段中声明)调用oldvar
,因此每次从同一点(非突出显示的字符串)开始。在没有看到所有代码的情况下,我猜想只需将var NewString =
替换为oldvar =
,将.innerHTML=NewString
替换为.innerHTML=oldvar
即可解决您的问题。