我有以下 JavaScript 代码。
var myCellCollection = document.getElementById('myTbl').cells;
这在 IE 中运行良好,它返回一个表格单元格的集合。但同一行在 Firefox 中返回“未定义”。我正在使用 IE 9 和 Firefox 12。
我有以下 JavaScript 代码。
var myCellCollection = document.getElementById('myTbl').cells;
这在 IE 中运行良好,它返回一个表格单元格的集合。但同一行在 Firefox 中返回“未定义”。我正在使用 IE 9 和 Firefox 12。
你应该使用document.getElementById("myTbl").getElementsByTagName('td')
;
今天在移植旧的 Internet Explorer 应用程序时偶然发现了这一点。
警告:
container.getElementsByTagName('tagname')
返回与查询匹配的所有元素。container
tagname
因此table.getElementsByTagName('td')
将返回所有td
的,包括嵌套表的!
但是table.cells
不这样做(在实施的地方)。
此外,显然,它不会匹配th
。所以这些单元格不在返回的集合中,可选地导致如何解决它们相对于 td 的顺序的“问题”......
为了填充(同时table.cells
返回并按DOM 顺序返回)的预期功能,我编写了以下简单函数: th
td
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
.
希望这可以帮助某人