对象不支持IE11中的属性或方法“getElementsById”

我正在尝试使用java-script将html数据导出到excel中。 有趣的是,当我使用getElementsByTagName而不是getElementById时,它工作。 但是,我需要查明id元素,因此' getElementById '是我需要的(我猜)。 当我在IE中debugging下面的代码时,它给了我:

对象不支持属性或方法'getElementsById'

这是我得到的:

HTML(仅作为一个想法):

 <body> <table> <tr> <td>content 1</td> <td>content 2</td> <td id="R">content I need</td> <td>some other content</td> </tr> </table> </body> 

和陪同的JS

 <script type="text/javascript"> function write_to_excel() { str=""; var mytable = document.getElementById("R")[0]; var row_Count = mytable.rows.length; var col_Count = mytable.getElementById("R")[0].getElementById("R").length; var ExcelApp = new ActiveXObject("Excel.Application"); var ExcelSheet = new ActiveXObject("Excel.Sheet"); ExcelSheet.Application.Visible = true; for(var i=0; i < row_Count ; i++) { for(var j=0; j < col_Count; j++) { str= mytable.getElementById("R")[i].getElementById("R")[j].innerHTML; ExcelSheet.ActiveSheet.Cells(i+1,j+1).Value = str; } } } </script> 

我有这种感觉 – 这是小事,但…提前致谢!)

getElementById方法返回一个单一的DOM元素(如果你有多个具有相同ID的HTML元素,那么你的页面是错误的,但浏览器不会抱怨,因为10年前这是一个很多人制造的常见错误)。 正如这样的陈述:

 document.getElementById("R")[0] 

没有任何意义。 相反,你想要的是:

 var myTD = document.getElementById("R"); 

如果你有这样的页面结构:

 <table id='T'> <tr> <td>content 1</td> <td>content 2</td> <td>content I need</td> <td>some other content</td> </tr> </table> 

并且想要迭代每一行中的每一列,您都可以这样做:

 var mytable = document.getElementById("T"); var table_rows = mytable.getElementsByTagName('tr'); for (var row=0;row<table_rows.length;row++) { var row_columns = table_rows[row].getElementsByTagName('td'); for (var col=0;col<row_columns.length;col++) { var item = row_columns[col]; // process item here } } 

有关如何导航DOM的更多信息,请参阅HTMLElement的文档: https : //developer.mozilla.org/en/docs/Web/API/Element

DOM API的完整文档: https : //developer.mozilla.org/en/docs/DOM

您也可以查看MSDN上的相关文档,而不是针对特定IE的MDN,但是我更喜欢MDN,因为它logging了API的兼容级别(其他浏览器实现了哪些function)。

ID必须是唯一的。

因此,你正在寻找的函数被称为getElementById (单数)