2

我有以下 JavaScript 代码。


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

这在 IE 中运行良好,它返回一个表格单元格的集合。但同一行在 Firefox 中返回“未定义”。我正在使用 IE 9 和 Firefox 12。

4

2 回答 2

5

你应该使用document.getElementById("myTbl").getElementsByTagName('td');

于 2012-05-22T11:26:26.447 回答
4

今天在移植旧的 Internet Explorer 应用程序时偶然发现了这一点。

警告:
container.getElementsByTagName('tagname')返回与查询匹配的所有元素。containertagname

因此table.getElementsByTagName('td')将返回所有td的,包括嵌套表的!
但是table.cells不这样做(在实施的地方)。

此外,显然,它不会匹配th。所以这些单元格不在返回的集合中,可选地导致如何解决它们相对于 td 的顺序的“问题”......

为了填充(同时table.cells返回并按DOM 顺序返回)的预期功能,我编写了以下简单函数: 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 the table.rows[X].cells,但这没有用(尽管这样做我觉得不安全)

用法示例:
var identifier = tableCells( /*reference to table (or thead/tbody/tfoot) here*/ );
它将返回一个数组(不是实时集合),如table.cells.

希望这可以帮助某人

于 2014-05-19T05:37:01.390 回答