我有以下代码,它循环遍历DOM,寻找ID为" sale - "的元素,其中包含属性" data-id",捕获值,然后剥离开始和关闭方括号 - 将它全部推入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+",")
});
这有效,输出为:
现在,当我想在循环之前和之后应用一些静态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
]
}
});
答案 0 :(得分: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
可以改进,但您尚未说明您希望定位哪个属性。