簡體   English   中英

Javascript for循環在第一次迭代后停止

[英]Javascript for loop stops after first iteration

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

沒有任何錯誤,在幾個小時內搜索出可能出現問題之后,我感到很茫然。

這是腳本:

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變量)。

如果我手動上升第三行中的i變量,它會確實顯示TR塊的信息(例如,如果我將i更改為15,則顯示第15個塊信息)。

所以我真的不知道這里出了什么問題。 我希望如果另一雙眼睛能看到我在這里做錯了什么。

您正在使用document.write ,它將使用您編寫的內容替換當前文檔。 因此,當您進入循環中的第二次迭代時,該表不再存在。

這是因為document.write清除了表,所以在下一個迭代document.getElementsByTagName('tr')什么都不返回。

您可以將其附加到dom元素中,而不是使用document.write寫入文檔。 看看這個。

工作演示

你應該把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/

試試這個:

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

....

做了一點修改。 這是小提琴,這里: http//jsfiddle.net/nwnSz/ 這會將表分配給變量,因此document.write不會清除它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM