2

私は次のJavaScriptコードを持っています。


var myCellCollection = document.getElementById('myTbl').cells;

これはIEでうまく機能し、テーブルセルのコレクションを返します。しかし、Firefoxでは同じ行が「未定義」を返します。IE9とFirefox12を使用しています。

4

2 に答える 2

5

使用する必要がありますdocument.getElementById("myTbl").getElementsByTagName('td');

于 2012-05-22T11:26:26.447 に答える
4

古いInternetExplorerアプリを移植しているときに、今日これに遭遇しました。

警告:クエリに一致する内部のすべて
container.getElementsByTagName('tagname')の要素を返します。containertagname

したがって、ネストされたテーブルのものを含むすべてのtable.getElementsByTagName('td')を返します! ただし、それは行いません(実装されている場合)。 td
table.cells

また、明らかに、それは一致しませんth。したがって、これらのセルは返されたコレクションに含まれず、オプションで、tdに対する順序を解決する方法の「問題」が発生します。

(とDOM順の両方table.cellsを返す)の期待される機能をシムするために、次の単純な関数を作成しました。 thtd

function tableCells(t){
   if(t.cells) return t.cells; // use internal routine when supported
   for(var a=[], r=t.rows, y=0, c, x; t=r[y++];){
      for(c=t.cells, x=0; t=c[x++]; a.push(t));
   } 
   return a;
}

または、「if-else」による「single return」を使用すると、正確に同じサイズにパックされますが、上記のgzipは小さくなります。PS:私はconcat-tingを試しましたtable.rows[X].cellsが、それはうまくいきませんでした(とにかくそうするのは安全ではないと思いますが)

使用例:
var identifier = tableCells( /*reference to table (or thead/tbody/tfoot) here*/ );
からの結果のような配列(ライブコレクションではない)を返しtable.cellsます。

これが誰かに役立つことを願っています

于 2014-05-19T05:37:01.390 に答える