2017-06-20 8 views
1

DOMをループし、IDが「sale-」で始まり、属性「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を向上させることができることに注意していますが、ターゲットとすることを期待しているどの属性に述べていません。