2011-09-04 144 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不会将其清除。