对象不支持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
(单数)