2014-02-21 106 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

相關問題