我创建了一个显示我的程序的JSFiddle:
正如您将看到当用户在输入字段中键入并单击“开始”时,程序将尝试在链接列表中找到该值并突出显示黄色的单词(通过在单词周围添加span元素和给它一类'亮点')。
如果用户检查另一个单词,则现有的跨度全部被移除,新的跨度将被放置到位。
这个removeSpan函数不能正常工作IE7-8。它将成功突出显示相关单词,但如果用户输入其他值,则不会删除现有跨度。
有谁知道问题可能在这里?
答案 0 :(得分:3)
有些观点:
将您的regExp从/^\s+/
更改为/^\s+|\s+$/g
可能会有用,因为它也会修剪尾随空格。
将if (text_input === "") {
更改为if (removeSpaces === "") {
,否则只要输入空格就会收到可怕的结果。
为什么在仅在一个地方调用函数时声明函数highlight
,removeSpan
和addSpan
?只需将他们的代码放在你称之为的地方(当然,除非你想在其他地方使用它们)。
为什么要创建临时变量newstr
和newstr2
?只需将anchor_text.replace()
回调的结果重新分配回anchor_text
。
在替换函数中传递正则表达式而不是字符串。
实施所有这些变化,我们得到:
document.getElementById('check-list').onclick = function() {
text_input = document.search.search_list.value.replace(/^\s+|\s+$/g, "");
if (text_input.length) {
var anchor = document.getElementById('results').getElementsByTagName('a');
var alength = anchor.length;
for (var x = 0; x < alength; x++) {
var anchor_text = anchor[x].innerHTML;
anchor_text = anchor_text
.replace(/<span class="highlight">/gi, "")
.replace(/<\/span>/gi, "");
anchor[x].innerHTML = anchor_text;
var re = new RegExp(text_input, "gi");
if (anchor_text.search(re) !== -1) {
anchor_text = anchor_text.replace(re, "<span class='highlight'>$&</span>");
anchor[x].innerHTML = anchor_text;
}
}
}
}