Javascript 工业工程v。FF:table.tBodies[0]有效吗?

Javascript 工业工程v。FF:table.tBodies[0]有效吗?,javascript,html,dom,prototypejs,Javascript,Html,Dom,Prototypejs,据我所知,tBodies[0]似乎在IE中起作用,但在FF中不起作用。这是一个错误吗?我创建了一个小文件来演示不一致性,我想知道最好的方法 HTML: <html> <body> <table id="dataGrid"> </table> <input type="button" onclick="insertRow();" value="New row"> </body> </html> 此脚本应

据我所知,tBodies[0]似乎在IE中起作用,但在FF中不起作用。这是一个错误吗?我创建了一个小文件来演示不一致性,我想知道最好的方法

HTML:

<html>
<body>
 <table id="dataGrid">
 </table>
 <input type="button" onclick="insertRow();" value="New row">
</body>
</html>

此脚本应在每次单击按钮时添加一行。它在IE中工作,但在Firefox中中断:

<script type="text/javascript" src="/costplan/script/prototype.js"></script>
<script>    
function insertRow(){
 var objTbl = $('dataGrid').tBodies[0]; 
 lastRow = objTbl.rows.length;
 alert(lastRow);
 var newRow = objTbl.insertRow(lastRow);
}
</script>

函数insertRow(){
var objTbl=$('dataGrid').tBodies[0];
lastRow=objTbl.rows.length;
警报(最后一行);
var newRow=objTbl.insertRow(lastRow);
}
tBodies[0]是否无效?我不知道为什么,但这段代码在FF和IE中都有效:

<script type="text/javascript" src="/costplan/script/prototype.js"></script>
<script>
function insertRow(){
 var objTbl = $('dataGrid');
 lastRow = objTbl.rows.length;
 alert(lastRow);
 var newRow = objTbl.insertRow(lastRow);
}    
</script>

函数insertRow(){
var objTbl=$('dataGrid');
lastRow=objTbl.rows.length;
警报(最后一行);
var newRow=objTbl.insertRow(lastRow);
}    
这两个函数中有一个正确吗?基本上,我真的不知道发生了什么(我收集到这些脚本中至少有一个是无效的,但我不知道是哪个或为什么无效)。

该属性是DOM Level 2标准的一部分,在两种浏览器上都是无效的

区别在于IE总是将
TBODY
元素作为空表的子元素注入

如果元素为空,Firefox、Chrome和其他浏览器不会这样做,如果
元素至少有一个
TR
TH
,它们将隐式创建
TBODY

您可以自己添加
TBODY
元素,这样您的工作就不会出现问题:

<table id="dataGrid">
  <tbody>
  </tbody>
</table>


您使用的是Prototype,对吗?另外,很好的一点是,有效的原型就是有效的原型。正确。据我所知,它只与$function有关。我不知道prototype,但为什么在jquery中可以执行
$('dataGrid tbody:first')
@Pointy我猜是这样的,但我想确定并希望理解为什么另一个是无效的。看起来像tBodies[0]。行应该适合我。