функция поиска javascript не работает в IE - PullRequest
0 голосов
/ 12 марта 2012

Привет всем, у меня есть эта функция JavaScript, которая активно ищет таблицу на моей веб-странице. Функция работает в Mozilla и Chrome, но не в IE. Может кто-нибудь помочь мне настроить это так, чтобы он работал во всех браузерах? вот код:

function playerSearch(phrase, _name){
    var words = phrase.value.toLowerCase().split(" ");
    var table = document.getElementsByName(_name)[0];
    var ele;
    for (var r = 1; r < table.rows.length; r++){
       ele = table.rows[r].innerHTML.replace(/<[^>]+>/g,"");
        var displayStyle = 'none';
        for (var i = 0; i < words.length; i++) {
            if (ele.toLowerCase().indexOf(words[i])>=0)
                displayStyle = '';
            else {
                displayStyle = 'none';
                break;
            }
        }
        table.rows[r].style.display = displayStyle;
    }
}

Вот вызов функции со страницы html: <span id="filter" class="filter">Player Search:<input onkeyup="playerSearch(this, 'currentTable')" type="text"></span>

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Похоже, IE настаивает на вставке элемента tBody dom.попробуйте изменить var table = document.getElementsByName(_name)[0]; на var table = document.getElementsByName(_name)[0].tBodies[0];

РЕДАКТИРОВАТЬ

После прочтения приведенных ниже комментариев и небольшого приближения к поиску, оказывается, что name не являетсяатрибут и недопустимый атрибут для таблиц в соответствии со спецификацией HTML4.01 (это не изменилось в текущем черновике спецификации HTML5 ), к сожалению, это один из тех случаев, когда JavaScript-код IEsДвижок является приманкой для правил, возвращающих массив нулевой длины, когда вы делаете document.getElementsByName(_name), а другие производители браузеров фактически нарушают спецификацию.

1 голос
/ 31 августа 2012

Вот мой ответ, который работает во всех браузерах. Отдельные функции приведены для IE, NetScape и всех других браузеров.

<script type="text/javascript" language="JavaScript">
    var OtherBrowser = (document.getElementById);
    var IE4 = (document.all);
    var NS4 = (document.layers);  
    var win = window;
    var n = 0;


    function findInPage(str) {
        var txt, i, found;
        if (str == "") {
            alert("Enter some thing to search");
            return false;
        }

        else if (IE4) {

            txt = win.document.body.createTextRange();

            for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
                txt.moveStart("character", 1);
                txt.moveEnd("textedit");
            }
            if (found) {
                txt.moveStart("character", -1);
                txt.findText(str);
                txt.select();
                txt.scrollIntoView();
                n++;
            }
            else {
                if (n > 0) {
                    n = 0;

                    findInPage(str);
                }
                else
                    alert("Sorry, we couldn't find.Try again");
            }
        }
        else if (OtherBrowser) {
            if (!win.find(str)) {
                while (win.find(str, false, true, false, false, false, true))
                    n++;
            }
            else if (win.find(str)) {

                n++;
            }
        }


        if (NS4) {
            if (!win.find(str)) {
                while (win.find(str, false, true, false, false, false, true))
                    n++;
            }
            else if (win.find(str)) {
                n++;
            }
        }
        return false;
    }

</script>
0 голосов
/ 12 марта 2012

Если вы хотите избавить себя от некоторых неприятностей при применении некоторой функциональности скользкой таблицы (включая фильтры, которые, я думаю, вы пытаетесь достичь здесь), я предлагаю DataTables.

http://datatables.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...