Javascript:替换字符串函数在IE7-8中不起作用

时间:2011-09-29 15:03:05

标签: javascript string internet-explorer str-replace

我创建了一个显示我的程序的JSFiddle:

http://jsfiddle.net/8Fx3a/10/

正如您将看到当用户在输入字段中键入并单击“开始”时,程序将尝试在链接列表中找到该值并突出显示黄色的单词(通过在单词周围添加span元素和给它一类'亮点')。

如果用户检查另一个单词,则现有的跨度全部被移除,新的跨度将被放置到位。

这个removeSpan函数不能正常工作IE7-8。它将成功突出显示相关单词,但如果用户输入其他值,则不会删除现有跨度。

有谁知道问题可能在这里?

1 个答案:

答案 0 :(得分:3)

有些观点:

将您的regExp从/^\s+/更改为/^\s+|\s+$/g可能会有用,因为它也会修剪尾随空格。

if (text_input === "") {更改为if (removeSpaces === "") {,否则只要输入空格就会收到可怕的结果。

为什么在仅在一个地方调用函数时声明函数highlightremoveSpanaddSpan?只需将他们的代码放在你称之为的地方(当然,除非你想在其他地方使用它们)。

为什么要创建临时变量newstrnewstr2?只需将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;
            }
        }
    }
}