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

时间:2014-02-21 18:53:47

标签: javascript excel

我正在尝试使用java脚本将html数据导出到excel中。有趣的是,当我使用getElementsByTagName代替getElementById时它会起作用。但是,我需要精确定位id元素,因此'getElementById'是我需要的(我猜)。当我在IE中调试下面的代码时,它给了我:

  

Object不支持属性或方法'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>

我有这种感觉 - 这是微不足道但是......提前谢谢!)

2 个答案:

答案 0 :(得分:2)

ID必须是唯一的。

因此,您正在寻找的功能称为getElementById(单数)

答案 1 :(得分:1)

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上的相关文档,而不是MDN的IE特定内容,但我更喜欢MDN,因为它记录了API的兼容级别(其他浏览器实现的功能)。