2012-09-22 120 views
0

我有一個Jquery腳本,用於加載XML文件並將內容吐出。不過,我想將這些內容格式化爲一個表格,每行3列。目前,它使得一行很長,我還沒有發現任何關於在.each加載了幾個項目之後調用新函數的谷歌。每次調用一個新函數。每個函數執行3個循環

要重申,我想如果(hideproduct == 「」){}已成功實施3次後執行功能NEWROW()

var product_xml = "xml/products_loaded.xml" 
function xmlParser() { 
$.ajax({ 
    type: "GET", 
    url: product_xml, 
    dataType: "xml", 
    success: function(xml) { 

     function newrow(){ 
      $("#output").append("</tr><tr>") 
     } 

     $(xml).find("SAVED_EXPORT").each(function(){ 

      var productcode = $(this).find("productcode").text() 
      var productname = $(this).find("productname").text() 
      var productprice = $(this).find("productprice").text() 
      var hideproduct = $(this).find("hideproduct").text() 

      if(hideproduct == ""){ 
       $("#output").append("<td class='product' id='" + productcode + "'>" 
       + "<a href='/i/" + productcode + ".htm' title='" + productname + ", " + productcode + "'>" + productname + "</a><br>" 
       + "<span><font class='text colors_text'><b><span class='price'>Our Price</span>: </b></font> $" + productprice + "</span><br>" 
       + "<img src='/v/vspfiles/photos/" + productcode + "-1.jpg' border='0' alt='" + productname + "'>" 
       + "</td>");; 

      } 
     })  
    } 
}) 
} 

在此先感謝任何有關如何解決此問題的想法的人。

+0

您正在追加破碎的標記'$(「#output」)。append(「」)' – undefined

回答

2

關鍵的是,你需要一個計數器變量.each外存儲狀態:

var count = 0; 

,因爲你不能使用本地var聲明.each回調函數存儲狀態變量。

然後,if (hideproduct ...)塊內,指望它被稱爲次數:

++count; 

,並在必要時,調用函數

if (count === 3) { 
    newRow(); 
    count = 0; 
} 

碰巧你newRow()功能無論如何不會工作,因爲您不能使用.append創建不平衡的HTML標籤。

一個更好的解決辦法是:

var tr = null; 
var count = 0; 

$(xml).find("SAVED_EXPORT").each(function() { 
    if (hideproduct === "") { 
     if (tr === null) { // create a new row 
      tr = $('<tr>').appendTo('#output'); 
     } 

     tr.append(...);  // add your content 

     if (++count % 3 === 0) { 
      tr = null;  // force a new <tr> on the next iteration 
     } 
    } 
}); 

注意如何在新的<tr>只在必要時創建,然後在你的<td>元素的新內容直接添加到這一點,不要#output

+0

謝謝你這個很詳細的帖子。我得到它的工作! –

+0

@JackCole不要忘記註冊並接受! – Alnitak

+0

@JackCole我剛剛注意到'if(tr === null)'測試需要放在'if(hideproduct ===「」)'測試中,並相應地更新了代碼。 – Alnitak

0

這是怎麼回事?

var i = 1; 
    $(xml).find("SAVED_EXPORT").each(function(){ 

     [...] 

     if(hideproduct == ""){ 
      [...] 
      if(i%3 == 0) 
       newRow(); 
      i++; 
     } 
    }); 

我不確定你想要測試「3測試」的確切位置,但你明白了!基本上,i%3 == 0測試將檢查我是否是3(0,3,6,9 ...)的倍數。

相關問題