我正在尝试使用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>
我有这种感觉 - 这是微不足道但是......提前谢谢!)
答案 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的兼容级别(其他浏览器实现的功能)。