2012-03-12 68 views
-1

嘿所有我有這個JavaScript函數,積極搜索我在我的網頁上的表。該功能在Mozilla和Chrome中工作,但不在IE中。任何人都可以幫助我調整它,以便它可以在所有瀏覽器中工作?這裏是代碼:javascript搜索功能在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>

+1

什麼不起作用? – Gabe 2012-03-12 16:13:36

+0

變量是否可以以下劃線開頭? – alt 2012-03-12 16:14:20

+0

@JacksonGariety是的。 – GolezTrol 2012-03-12 16:14:40

回答

0

如果你想保存自己的一些麻煩,同時運用一些華而不實的表格功能(包括過濾器,這是我認爲你試圖在這裏實現),我建議DataTables。

http://datatables.net/

1

聽起來IE是在插入TBODY dom元素堅持。嘗試改變var table = document.getElementsByName(_name)[0];var table = document.getElementsByName(_name)[0].tBodies[0];

編輯

閱讀下面的意見後,做谷歌搜索了一下事實證明,name沒有一個全球性的屬性,而不是根據HTML4.01 specification表上有效的屬性(此在當前的HTML5 specification草案中沒有改變),這是不幸的,當你的IE瀏覽器的JavaScript引擎正在成爲一個規則的粘貼者時,當你做document.getElementsByName(_name)時,其他瀏覽器製造商實際上違反了規範。

+0

仍然無法工作,它會與innerHTML調用有關嗎? IE不喜歡那太多的權利?有沒有辦法用jQuery語法來執行該行? – user1258430 2012-03-12 16:51:24

+0

@ user1258430你是對的。您不能爲''元素設置'innerHTML'。試圖這樣做會導致「未知的運行時錯誤」。 – Teemu 2012-03-12 17:15:52

+0

@Teemu在進行更多的研究之後,感謝您的反饋,結果發現IE的JavaScript引擎嚴格執行HTML規範,該規範聲明名稱不是表元素上的有效屬性,因此不會在初始JavaScript查詢中返回任何表。用更多的信息更新了我的答案。 – 2012-03-13 11:16:01

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>