2011-09-04 137 views
0

基本上我想要做的是遍歷一個相當大(> 2k行)的表,並通過javascript for循環獲取一些信息。 第一次迭代正在做我想要的,但就是這樣。它不做任何事情,但返回第一行並停止。第一次迭代後循環停止的Javascript

沒有任何錯誤,在搜索幾個小時後可能會出現問題後,我不知所措。

這是腳本:

function start() { 
    for (var i = 0; i < 100; i++){ 
     var tr = document.getElementsByTagName('tr')[i]; 

     var date = tr.getElementsByTagName('td')[1].innerHTML; 
     var btime = tr.getElementsByTagName('td')[2].innerHTML; 
     var etime = tr.getElementsByTagName('td')[3].innerHTML; 
     var name = tr.getElementsByTagName('td')[5].innerHTML; 
     var loc = tr.getElementsByTagName('td')[8].innerHTML; 

     document.write(date + " " + name + " at " + loc + " from " + btime + " - " + etime); 
    } 
    document.write("End"); 
} 

,什麼是返回如下:

05-09-2011 Intro Module, Intro AI at AMC K01-222 
from 10:00 - 12:00 

而且第一表的例子:

<table class="TableBody"> 
    <tr> 
     <td class="dayCol">Ma</td> 
     <td class="typeCol">05-09-2011</td> 
     <td class="startCol">10:00</td> 

     <td class="endCol">12:00</td> 
     <td class="nameCol">3.1 Artificiële Intelligentie</td> 
     <td class="nameCol">Intro Module, Intro AI</td> 
     <td class="typeCol">H</td> 
     <td class="staffCol">dr. D. Sent<br></td> 
     <td class="roomCol"><a href="http://rooster.uva.nl/current_nl/showtimetable.aspx?type=reporturl&amp;idstring=830K01222">AMC K01-222</a><br></td> 

     <td class="commentCol"> </td> 
    </tr> 
    <tr> 
     <td class="dayCol">Ma</td> 
     <td class="typeCol">05-09-2011</td> 
     <td class="startCol">12:45</td> 
     <td class="endCol">16:45</td> 

     <td class="nameCol">3.1 Artificiële Intelligentie</td> 
     <td class="nameCol">Zoeken</td> 
     <td class="typeCol">H</td> 
     <td class="staffCol">dr. N.B. Peek<br></td> 
     <td class="roomCol"><a href="http://rooster.uva.nl/current_nl/showtimetable.aspx?type=reporturl&amp;idstring=830K01222">AMC K01-222</a><br></td> 
     <td class="commentCol"> </td> 

    </tr> 
    </table> 

所以第一TR區塊的功能與預期完全相同,但不會進入第二區塊並進一步(使用i變量來自循環。

如果我了變量在第三行手動,但它示出了從投入數TR塊的信息(例如,如果我改變 15,它顯示了第15塊的信息)。

所以我真的不知道這裏發生了什麼問題。如果另一雙眼睛能看到我在這裏做錯了,我會愛上它。

回答

1

這是因爲document.write清空表,所以在下一次迭代document.getElementsByTagName('tr')什麼都不返回。

而不是使用document.write寫入文檔,你可以將它附加到一個DOM元素。看看這個。

工作demo

+0

非常好!這聽起來也很合理,根本就不會在那個方向上進行搜索。謝謝,很大的幫助! – Kishan

1

您正在使用document.write,它將用您所寫的內容替換當前文檔。所以,當你到達循環中的第二次迭代時,表格不再存在。

0

你應該把var tr =外循環,再加上document.write由別人指出的問題。

function start() { 
    var tr = document.getElementsByTagName('tr'); 
    for (var i = 0; i < tr.length; i++){ 
     var date = tr[i].getElementsByTagName('td')[1].innerHTML; 
     var btime = tr[i].getElementsByTagName('td')[2].innerHTML; 
     var etime = tr[i].getElementsByTagName('td')[3].innerHTML; 
     var name = tr[i].getElementsByTagName('td')[5].innerHTML; 
     var loc = tr[i].getElementsByTagName('td')[8].innerHTML; 

     var div = document.createElement('div'); 
     div.innerHTML = date + " " + name + " at " + loc + " from " + btime + " - " + etime; 
     document.body.appendChild(div); 
    } 
    var end = document.createElement('div'); 
    end.innerHTML = "END"; 
    document.body.appendChild(end); 
} 

http://jsfiddle.net/userdude/hxpZn/

0

試試這個:

function start() { 
    var alltrs = document.getElementsByTagName('tr'); 
    for (var i = 0; i < 100; i++){ 
     var tr = alltrs[i]; 

.... 
0

發了輕微的修改。它在小提琴中,在這裏:http://jsfiddle.net/nwnSz/。這將表分配給一個變量,以便document.write不會將其清除。