2014-02-21 767 views
1

我想用java脚本将html数据导出到excel中。有趣的是,当我使用getElementsByTagName而不是getElementById时它可以工作。但是,我需要查明id元素,因此'getElementById'是我需要的(我猜)。当我在IE调试下面的代码它给我:对象不支持IE11中的属性或方法'getElementsById'

对象不支持属性或方法“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> 

我有一种感觉 - 这是儿戏,但...在此先感谢)

回答

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 
    } 
} 

见HTML元素的文档以了解如何导航DOM的详细信息:https://developer.mozilla.org/en/docs/Web/API/Element

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

您也可以查看MSDN上的相关文档,而不是MDN,但是我更喜欢MDN,因为它记录了相应的兼容级API。

+0

哇,谢谢!我刚开始进入JS,很抱歉,如果我的问题看起来很愚蠢)))。按照上面的方法修正了文件后,它现在可以工作,因为它可以让Excel打开工作表,并且......没有任何内容跳转((((( – Alexander

+0

嗨,我有类似的表,并且出现错误:Object不支持属性或方法'getElementsByTagName'on line var table_rows = mytable.getElementsByTagName('tr');第一行返回类型为[object DispHTMLElementCollection]的对象..请建议可以做什么.. – Anu

2

ID必须是唯一的!

因此,你要寻找的函数被调用getElementById(单数)

+0

哦,这只是一个错字,代码是正确的,但是非常感谢!))) – Alexander

+0

@Alexander:出于同样的原因,函数只存在于'document',而不是其他DOM元素。 – SLaks

相关问题