我有以下JavaScript代码。
var myCellCollection = document.getElementById('myTbl').cells;
这在IE中运行良好,它返回一组表格单元格。但是同一行在Firefox中返回“undefined”。我使用的是IE 9和Firefox 12。
答案 0 :(得分:4)
您应该使用document.getElementById("myTbl").getElementsByTagName('td')
;
答案 1 :(得分:1)
今天在移植旧的Internet Explorer应用程序时偶然发现了这一点。
警告:强>
container.getElementsByTagName('tagname')
返回 ALL 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'到相同大小的完全,但上面的gzips更小。 PS:我尝试了concat
- table.rows[X].cells
,但是没有用(虽然我不觉得这样做也不安全)
用法示例:
var identifier = tableCells( /*reference to table (or thead/tbody/tfoot) here*/ );
它将返回一个数组(不是实时集合),如table.cells
的结果。
希望这有助于某人