2012-02-22 14 views
0

firefox(10.0.2を使用)で、JavaScriptを使用してテーブル内の行を取得しようとすると問題が発生しました。 ChromeとIEでは次のような作業が可能ですが、Firefoxでは動作しません。 Firefoxの、結果のallTRオブジェクトでFireFoxを使用してDOMのテーブル行コレクションを取得できません

var tbl = "myTable"; 
var allTR; 
allTR = document.getElementById(tbl).childNodes[0].childNodes; 

var table = document.getElementById(tbl); 
var tbody = table.getElementsByTagName("tbody")[0]; 
allTR = tbody.getElementsByTagName("tr"); 
allTR = tbody.children; 
allTR = tbody.childNodes; 
allTR = $("#myTable").find("tbody").find("tr"); 
allTR = $('#myTable tobdy tr'); 

私はそれがlengthプロパティを持っていることが確認できていても「未定義」として、Firebugのに表示されます。

これが起こる理由は誰にも分かりますか?

+0

デモ[jsFiddle](HTTP上:// jsfiddle。 net /)は役に立ちます – Tomalak

+0

JavaScriptをさまざまなブラウザすべてに適用することは大きな苦痛です。可能であれば、jQueryのようなライブラリの使用を開始してください。 –

+0

@SteveWellens:通常は必要ありません。あなたが考えるよりも簡単です。 –

答えて

0

あなたがテーブルのすべての行をしたい場合:

allTR = document.getElementById(tbl).getElementsByTagName("tr"); 

あなたが最初のTBODYで行をしたい場合:

allTR =document.getElementById(tbl).getElementsByTagName("tbody")[0].getElementsByTagName('tr') 
+0

私が提供した例を見ると、私はすでにこのコードを使っていて、失敗していました。 Tomalakは私にjsFiddleに例を挙げて尋ねました。私はそれを投稿するための準備としてローカルにテストコードを作成しましたが、もちろんうまくいきました。私の疑惑は、FireFoxが動的に作成されたテーブルでうまく動かないということです。私の特に問題は、実行時にajax呼び出しとclientside JSを使用して生成されたテーブルに結び付けられています。 – Kberg59

+0

@ Kberg59:これは私の答えよりもなぜ優れていますか? –

0

あなたのテーブルには、あなたが考慮していない空の空白ノードがいくつかあるようです。たとえば、IE < 9はDOM内の空白のテキストノードを反映しませんが、他のすべての主要なブラウザではtable.childNodes[0]があなたの考えではないかもしれません。 <tr>要素の便利cellsプロパティもあり

var allTR = document.getElementById("myTable").rows; 

、あなたがそれを必要とする必要があります

最も簡単な解決策は、rowsとして、便利で普遍的にサポートDOMのテーブルのプロパティを使用することです。 <tbody>要素にはrowsプロパティもあります。

関連する問題