2011-03-02 47 views
0

我有一些jQuery代碼加載由JSP Servlet生成的XML文件的內容。XML到JQUERY,顯示數據,但循環內容

它的想法是拉動信息,然後顯示它,同時每1秒刷新一次。

這個問題我有,是每次刷新它只是增加了數據返回到舊數據的時間,所以它只是循環了相同的價值觀:

這裏是我的代碼:

<script> 


     $(document).ready(function() { 




     }); 
    </script> 

我怎樣才能讓它顯示一次,然後當它刷新它,清除它的自我。

感謝

回答

0

電話:

$('#tidm').html(''); // .empty() is slightly faster 

您的每次循環之前,這將清除舊的HTML

編輯: 我最初的回答只是清除HTML,但一些評論從原始問題中指出代碼中的有效性能問題。 因此,雖然原始代碼的性能不是問題的主題,但我會用我認爲更高效的方式更新我的答案。

我沒有測試過這個,但意圖應該清楚。

$(document).ready(function() { 
    var $tidm = $('#tidm'); 
    var html; 
    setInterval(function() { 
     $.get('Stocks', function(data) { 
      html = ''; 
      $tidm.empty(); // using empty instead of .html('') as suggested 
      $(data).find('stock').each(function() { 
       var $stock = $(this); 
       var tidm = $stock.find("tidm").text(); 
       var name = $stock.find("name").text(); 
       var price = $stock.find("price").text(); 
       var change = $stock.find("change").text(); 
       html += '<p>tidm = ' + tidm + '</p>'; 
       html += '<p>name =' + name + '</p>'; 
       html += '<p>price = ' + price + '</p>'; 
       html += '<p>change = ' + change + '</p>'; 
      }); 
      $tidm.html(html); 
     }); 
    }, 1000); // 1000 milliseconds = 1 second. 
}); 

如果有可能進行或我犯了錯,讓我在評論中知道任何其他改進。

+0

完美的作品,非常感謝! – Lunar 2011-03-02 16:13:53

+0

在那裏你有2個問題的表現。 ** a)**你做一個額外的document.getElementById和jQuery-fy它;和b)html('')不如空()優化(因爲它在那裏做的是\t \t \t'this.empty()。append(value);') – 2011-03-03 01:57:17

+0

@Tom沒有提及$(' #tidm'),所以我必須在某處找到引用,重寫原始代碼以便更高性能超出問題範圍。我更新了我的答案,注意.empty()比.html('')謝謝:) – DannyLane 2011-03-03 09:33:34

1

更換您的線路$('#tidm').append($(html));$('#tidm').empty().append($(html));

+1

如果$(data).find('stock')返回多個,那麼上面的代碼將清除html在每次迭代中,導致只顯示一個股票。如果只顯示一個股票,那麼這個解決方案也可以工作,但我認爲可以安全地假設會有多個股票,因爲存在一個循環。 – DannyLane 2011-03-02 16:06:28

+0

你說得對,我的錯。但.html()方法應該在每個循環之外。性能FTW。 (我之前沒有意識到) – 2011-03-03 02:03:15

+0

我的確建議在每個循環之前使用.html()清除元素。什麼會更高性能將是循環迭代保持html字符串,然後在循環結束時將整個html字符串傳遞給.html()方法(而不是在每次迭代時附加),還創建一個jQuery對象從html字符串不是必需的,.html()需要一個字符串就好了。 – DannyLane 2011-03-03 09:13:10