Javascript Firefox浏览器是否无法识别table.cells?

Javascript Firefox浏览器是否无法识别table.cells?,javascript,firefox,cells,Javascript,Firefox,Cells,我有以下JavaScript代码 这在IE中运行良好,它返回一个表单元格集合。但在Firefox中,同一行返回“undefined”。我正在使用IE 9和Firefox 12。您应该使用document.getElementById(“myTbl”).getElementsByTagName(“td”) 今天在移植一个旧的Internet Explorer应用程序时偶然发现了这一点 警告: container.getElementsByTagName(“标记名”)返回容器中与查询标记名匹配的

我有以下JavaScript代码




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

您应该使用
document.getElementById(“myTbl”).getElementsByTagName(“td”)

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

警告:
container.getElementsByTagName(“标记名”)
返回容器中与查询
标记名匹配的所有元素

因此
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
-调整
表.rows[X].cells,但没有成功(尽管我觉得这样做不安全)

用法示例:
var identifier=tableCells(/*此处引用table(或thead/tbody/tfoot*)
它将返回一个数组(不是一个活动的集合),就像来自
table.cells
的结果一样


希望这对某人有所帮助

谢谢。这看起来是一个更好的方法。W3C参考说明Firefox支持此[链接](w3schools.com/jsref/coll_table_cells.asp)。此外,在Firefox中尝试tableObject.cells也能奏效,因为它不是“W3C参考”。是学校。这通常是错误的,在这种情况下肯定是错误的。您的示例是查看表行上的.cells,实际上所有浏览器都支持它。@BorisZbarsky:是的,它是w3schools。对不起,这里的符号不对。但我要说的是,通过将警报更改为
alert(document.getElementById(“myTable”).cells)来尝试该示例而且它工作得很好!我只是试着按照您的描述编辑它,在Firefox中,警报显示为
未定义
,正如预期的那样。我再次尝试,得到的警报为“2”。由于限制,我无法上传屏幕截图,但我将寻找与您共享的方法。就是Firefox将这些数据存储在某个地方,如果我第一次使用
document.getElementById(“myTable”).rows[0].cells
运行代码,第二次使用
document.getElementById(“myTable”).cells
运行代码,那么它将从存储中显示相同的结果。我将在当天晚些时候在另一台机器上验证这一点。
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;
}