javascript - IE v. FF : Is table. tBodies[0] 有效吗?

标签 javascript html dom prototypejs

据我所知,tBodies[0] 似乎可以在 IE 中运行,但不能在 FF 中运行。这是IE错误吗?我创建了一个小文件来演示这种不一致,我想知道解决此问题的最佳方法。

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>

tB​​odies[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>

这两个函数是否正确?基本上,我真的不知道发生了什么(我推测这些脚本中至少有一个是无效的,但我不知道是哪个或为什么)。

最佳答案

tBodies 属性是 DOM Level 2 标准的一部分,它 works在两种浏览器上。

您所遇到的区别是 IE 总是注入(inject) TBODY元素作为空表的子元素。

如果元素为空,则 Firefox、Chrome 和其他浏览器不会执行此操作,如果 TABLE元素至少有一个TRTH ,他们将创建TBODY隐式地。

您可以添加TBODY你自己的元素,以及你的example将毫无问题地工作:

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

关于javascript - IE v. FF : Is table. tBodies[0] 有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817832/

相关文章:

javascript - 如何提交带有标题的 HTML 表单

javascript - 获取 iframe 的当前位置/url 并分配给变量

javascript - 如何处理 Array.prototype.reduce() 函数中的 eslint no-param-reassign 规则

javascript - 无法找到树中的所有模式

javascript - 纯 Javascript - 单击按钮/输入键时将文本输入的值添加到 <li>

javascript - DIV-元素绝对(!)定位

javascript - 动态选择要打开的模态

javascript - html5 Canvas 元素消失

html - XPath 用于根据元素文本内容从 HTML 片段获取节点

javascript - JS、正则表达式、奇怪的行为