javascript搜索功能在IE中不起作用

时间:2012-03-12 16:09:34

标签: javascript internet-explorer function

嘿所有我有这个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 个答案:

答案 0 :(得分:1)

听起来IE正在坚持插入tBody dom元素。尝试将var table = document.getElementsByName(_name)[0];更改为var table = document.getElementsByName(_name)[0].tBodies[0];

修改

在阅读下面的评论并进行一些谷歌搜索后,结果发现name不是全局属性,而且根据HTML4.01 specification不是表上的有效属性(这在当前没有变化) HTML5 specification的草稿这是不幸的是当IEs javascript引擎成为规则时,当你document.getElementsByName(_name)返回0长度数组时,其他浏览器制造商实际上正在破坏规范。

答案 1 :(得分:1)

这是我的答案,适用于所有浏览器。 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>

答案 2 :(得分:0)

如果你想在应用一些灵活的表格功能(包括我认为你想要在这里实现的过滤器)时省去一些麻烦,我建议使用DataTables。

http://datatables.net/