2015-04-16 133 views
1

我有一個for循環,它遍歷一些JSON併爲每個迭代輸出三個不同的值。從我讀過的內容來看,最好不要在for循環中進行追加操作,而是最好將值保存到數組中並將其追加到循環外部。追加循環迭代到html

我的問題是,如果我有三個包含我的值的數組,請說出書名,作者和URL - 我將如何追加這些以便它們如下所示?而不是三個單獨的所有值的列表。

Book Title 
Author 
URL 

Book Title 
Author 
URL 
+0

你爲什麼不創建一個列表,並通過一個新增項目一個從你的json。 – cracker

+1

你能告訴我們你現在得到了什麼嗎?你能顯示for循環嗎? –

+0

這就是我想要做的,但我不知道如何。我可以創建三個單獨的列表,即書名列表,作者列表和URL列表,但我似乎無法使它們如上所示出現。 – podusmonens

回答

3

你總是可以創建一個documentFragment

var data = ['1', '2', '3', '4']; 
// Create empty fragment 
var fragment = document.createDocumentFragment(); 
// My iteration that will append items to the fragment 
for (var i = 0; i < data.length; i++) { 
    var item = document.createElement('span'); 
    item.appendChild(document.createTextNode(data[i])); 
    fragment.appendChild(item); 
} 
// After my iteration i will append my fragment 
// to the place in the page I want my newly created items to appear. 
document.body.appendChild(fragment); 
0

如果所有三個數組的長度相同:

var titles = ['Title 1', 'Title 2', 'Title 3'], 
    authors = ['Author 1', 'Author 2', 'Author 3'], 
    urls = ['URL 1', 'URL 2', 'URL 3'], 
    fragment = document.createDocumentFragment(); 

for (var i = 0, len = titles.length; i < len; i++) { 

    var title = document.createTextNode(titles[i]), 
     author = document.createTextNode(authors[i]), 
     titleEl = document.createElement('h1'), 
     authorEl = document.createElement('h2'); 

    titleEl.appendChild(title); 
    authorEl.appendChild(author); 

    fragment.appendChild(titleEl); 
    fragment.appendChild(authorEl); 

    if (urls[i]) { 
     var url = document.createTextNode(urls[i]), 
      urlEl = document.createElement('p'); 
     urlEl.appendChild(url); 
     fragment.appendChild(urlEl); 
    } 

} 

document.body.appendChild(fragment) 
+0

謝謝你,我會試試看。雖然偶爾有一本書沒有URL,所以我想這會打破它,因爲數組會有不同的長度。 – podusmonens

+0

是的,但是你的數組有一個普遍的問題。如果該位置僅在URL數組中丟失,則不知道該URL屬於哪本書。您應該在URL數組中使用'null'填充這些缺少的URL。你懂我的意思嗎? – dsuckau

+1

是的,這是有道理的,我會調整我的代碼,所以如果JSON值爲空,它會將null添加到數組中。 – podusmonens