2017-06-20 36 views
1

我有下面的代碼,它通過DOM循環查找具有以「sale-」開頭的id,具有「data-id」屬性的元素,捕獲該值,然後剝離開閉方括號 - 推動這一切成JSON對象:創建JSON - 部分循環,部分純文本字符串

els = $("div[id^='sale-']"); 
Array.prototype.forEach.call(els, function(el) { 
var id = el.attributes[2].value.replace(/\[|\]/gi, ""); 

var jsonObject = {"id" :+id}; 

var myJSON = JSON.stringify(jsonObject); 
console.log(myJSON+",") 
}); 

這工作,輸出是:

enter image description here

現在的問題是當我想申請一些循環前後的靜態JSON代碼。

我想類似下面:

// static 
dataLayer.push({ 
    'ecommerce': { 
    'impressions': [ 

// loop portion 
{"id":50450}, 
{"id":49877}, 
{"id":49848}, 
{"id":49912}, 
{"id":49860}, 
{"id":49825}, 
{"id":48291}, 
{"id":49667}, 

// static 
] 
    } 
}); 

回答

2

首先,你可以讓數組創建更簡單的jQuery對象上調用map()。從那裏你可以簡單地將結果數組添加到具有所需結構的對象。試試這個:

var idArr = $("div[id^='sale-']").map(function() { 
    var id = this.attributes[2].value.replace(/\[|\]/gi, ""); 
    return { id: +id }; 
}).get(); 

dataLayer.push({ 
    ecommerce: { 
    impressions: idArr 
    } 
}); 

還要注意的是this.attributes[2].value可以改善,但是你有沒有說哪個屬性你希望那個目標。