2011-07-24 27 views
2

下面的代碼:jQuery的各不對象的每個元件執行的HTML

var object = [ 
    {'item1': 'value1a', 'item2':'value2a', 'item3':'value3a'}, 
    {'item1': 'value1b', 'item2':'value2b', 'item3':'value3b'}, 
]; 


$.each(object, function(key,value) { 
    $('.my-div').html('<li>'+ value.item1 + '</li>'); 
}); 

這僅輸出一個<li>value1b</li>。出於某種原因跳過除了最後一次迭代之外的所有內容。

想法?

回答

2

它覆蓋了所有的HTML而不是附加它。

變化

$('.my-div').html('<li>'+ value.item1 + '</li>'); 

$('.my-div').append('<li>'+ value.item1 + '</li>'); 

工作演示:http://jsfiddle.net/AlienWebguy/hpLa6/1/

+0

哎,所以使用的append()? – djreed

+0

@djreed你的循環的每次迭代通過附加'追加了單'li',這是可以解決的替代的'。我-div'全部內容'而不是替換全部內容'htm l' –

1

您在每次迭代覆蓋它。你需要做的像

$('.my-div').html($('.my-div').html()+'<li>'+ value.item1 + '</li>');

編輯以修正錯誤

+0

-1選擇節點兩次,並使用$(this)不當 – AlienWebguy

+0

你顯然不明白downvoting的目的 –

+0

對不起你的代碼不會使用'$(this)'這樣的http:// jsfiddle.net/AlienWebguy/hpLa6/2/ – AlienWebguy

0

是否有必要使用jQuery這一點,爲什麼不直接使用一個簡單的:

for (var obj in objects) { 
    $('.my-div').append('<li>'+ obj.item1 + '</li>'); 
} 

提示:我會避免使用任何語言的編號object

1

以前的編輯被覆蓋。它這樣做相當於:

int total = 0; 
for (int x=0;x<10;++x) 
    total = x; 

(明顯不同的編程語言)

以上的答案是「9」,而不是預期的答案。

您需要附加每個html調用。

編輯:

哇靠人打我...... :-(

0

由於一些人喜歡,因爲低效率的,以downvote ...這會更有效,因爲它選擇的節點只有一次

$(function(){ 
     var object = [ 
      {'item1': 'value1a', 'item2':'value2a', 'item3':'value3a'}, 
      {'item1': 'value1b', 'item2':'value2b', 'item3':'value3b'}, 
     ]; 

    var content = ''; 
    $.each(object, function(key,value) { 
     content += '<li>'+ value.item1 + '</li>';  
    }); 
    $('.my-div').html(content); 
});