2012-03-12 20 views
-1

こんにちはすべて私は私のWebページ上にあるテーブルを積極的に検索するこの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

+0

変数はアンダースコアで始めることはできますか? – alt

+0

@JacksonGarietyはい。 – GolezTrol

答えて

0

あなたは(フィルタを含むいくつかの滑らかなテーブルの機能を付与しながら自分自身にいくつかのトラブルを保存したい場合は、私が思うましたここで達成しようとしている)、私はDataTablesを提案します。

http://datatables.net/

1

IEはTBODYのDOM要素を挿入を主張しているように聞こえます。 (これを、それはnameはグローバル属性ではなくHTML4.01 specificationに応じて、テーブル上の有効な属性ではないことが判明した以下のコメントを読んだ後var table = document.getElementsByName(_name)[0];

var table = document.getElementsByName(_name)[0].tBodies[0];にEDIT

を変更し、グーグルのビットをやってみてくださいHTML5 specificationの現在のドラフトでは変更されていません)これは、不幸にも、IEのjavascriptエンジンがdocument.getElementsByName(_name)を実行したときに0の長さの配列を返すルールのためのスティックであり、他のブラウザのメーカーが実際に仕様を破っているときです。

+0

まだ動作していない、それはinnerHTML呼び出しと関係がありますか? IEはあまり好きではない? jquery構文でその行を実行する方法はありますか? – user1258430

+0

@ user1258430あなたは正しいです。 '' -elementに 'innerHTML'を設定することはできません。これを試みると、「不明なランタイムエラー」が発生します。 – Teemu

+0

@Teemuより多くの研究をした後、フィードバックをお寄せいただきありがとうございます。IEのjavascriptエンジンは厳密に、その名前が表要素の有効な属性ではないことを示すHTML仕様を強制していますので、最初のjavascriptクエリの表は返されません。私の答えをより多くの情報で更新しました。 –

1

ここはすべてのブラウザで機能する私の答えです。 Internet Explorer、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> 
関連する問題