2015-10-20 62 views
-2

繼承人的對象要通過運行:在僅環適用於最後一個關鍵的對象

var content = { 

book_1: { 

    nameyo: "Doctor who", 
    subject: "Books", 
    price: "$10,000", 
    tags: ["BOOK", "FUNNY", "KIDS", "STUPID"] 

}, 

book_2: { 

    nameyo: "Chica boom", 
    subject: "Books", 
    price: "$10,000", 
    tags: ["BOOK", "FUNNY", "KIDS", "STUPID"] 

}, 

Album_1: { 

    nameyo: "Beatles", 
    subject: "Music", 
    price: "$10,000", 
    tags: ["MUSIC", "BEATLES", "GOOD", "STUPID"] 

}, 

Album_2: { 

    nameyo: "ACDC", 
    subject: "Music", 
    price: "$10,000", 
    tags: ["MUSIC", "ACDC", "GOOD", "STUPID"] 

} 

}; 

,這裏是jQuery的

function createIDForName(key) { 
return key + "blah"; 
} 
function createIDForType(key) { 
return key + "okay"; 
} 
function createIDForPrice(key){ 
return key+"stuff"; 
} 

for (var key in content) { 
    $(".row").append($("<div class=col-3>")).append($("<p class=name>")).append($("<p class=type>")).append($("<p class=price>")); 


    $(".name").attr("id", createIDForName(key)); 

    $(".type").attr("id", createIDForType(key)); 

    $(".price").attr("id", createIDForPrice(key)); 

} 

所以,當這一切產生,它只做它內容對象中的最後一個鍵,Album_2。爲什麼是這樣?或者每次都壓倒一切?如果是的話,爲什麼呢?任何幫助表示讚賞。

+0

.name和.TYPE,。價格-selectors選擇所有的p元素與班,甚至在for循環的最後一次迭代中加入的人。所以最後的值將被添加到每個p元素中。 – Esko

+2

好吧,'$(「。name」)'匹配所有帶'name'類的元素,不僅僅是你追加的元素,還有你之前追加的其他元素,所以你最終會得到相同的值其中 – adeneo

+0

最有可能不需要所有這些ID的第一位 – charlietfl

回答

1

你可以也使用.each()方法來執行此操作。此外,我用另一個參數將createID()函數壓縮爲一個函數,並使JSON有效。 DEMO

var content = { 
    'book_1': { 
     'nameyo': "Doctor who", 
     'subject': "Books", 
     'price': "$10,000", 
     'tags': ["BOOK", "FUNNY", "KIDS", "STUPID"] 
    }, 
    'book_2': { 
     'nameyo': "Chica boom", 
     'subject': "Books", 
     'price': "$10,000", 
     'tags': ["BOOK", "FUNNY", "KIDS", "STUPID"] 
    }, 
    'Album_1': { 
     'nameyo': "Beatles", 
     'subject': "Music", 
     'price': "$10,000", 
     'tags': ["MUSIC", "BEATLES", "GOOD", "STUPID"] 
    }, 
    'Album_2': { 
     'nameyo': "ACDC", 
     'subject': "Music", 
     'price': "$10,000", 
     'tags': ["MUSIC", "ACDC", "GOOD", "STUPID"] 
    } 
}; 

function createID(key, type) { 
    return key + type; 
} 

$.each(content, function(key, val){ 
    var col = '<div class="col-3"><p class="name" id="' + createID(key, 'blah') + '"></p><p class="type" id="' + createID(key, 'okay') + '"></p><p class="price" id="' + createID(key, 'stuff') + '"></p></div>'; 
    $(".row").append(col); 
}); 
0

在結果中,您將具有相同類的幾個DOM元素:.name, .type, .price,然後你會得到所有這些,一遍又一遍重寫他們的價值觀。所以在結果中你有最後的關鍵值;

0

的選擇$(".name")$(".price")等剛剛追加與類name,不只是一個所有元素相匹配,但其他人你以前那麼你最終爲所有這些相同的值追加爲好, 。

爲了避免這種情況,使生活更輕鬆,只是不停的元素

for (var key in content) { 
    var _name = $('<p />', {'class' : 'name'}); //note that window.name exists 
               // be careful with the name "name" 

    _name.attr("id", createIDForName(key)); 

最簡單的引用將是隻需添加ID在創建元素時

for (var key in content) { 
    var _col = $('<div />', {'class' : 'col-3'}), 
     _name = $('<p />', {'class' : 'name', id : createIDForName(key)}), 
     _type = $('<p />', {'class' : 'type', id : createIDForType(key)}), 
     _pric = $('<p />', {'class' : 'price', id : createIDForPrice(key)}); 

    $(".row").append(_col, _name, _type, _pric); 
} 
相關問題