Javascript: заменить строковую функцию, не работающую в IE7-8 - PullRequest
2 голосов
/ 29 сентября 2011

Я создал JSFiddle, который показывает мою программу:

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

Как вы увидите, когда пользователь вводит в поле ввода и нажимает кнопку «Перейти», программа будетпопробуйте найти это значение в списке ссылок и выделите слово желтым цветом (добавив элемент span вокруг слова и присвоив ему класс «highlight»).

Если пользователь проверяет другое слово,все существующие пролеты удаляются, а новые помещаются на место.

Именно эта функция removeSpan не работает в IE7-8.Он успешно выделит соответствующие слова, но не удалит существующие интервалы, если пользователь введет другое значение.

Кто-нибудь знает, в чем может быть проблема?

1 Ответ

3 голосов
/ 29 сентября 2011

Некоторые баллы:

Изменение вашего значения 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;
            }
        }
    }
}
...