我正在尝试通过使用 Javascript 抓取页面来填充 Google 数据层数组。正如控制台所确认的,下面的代码成功地遍历了 HTML 中列出的所有项目。我正在努力编写正确的 dataLayer.push 函数来推送所有三项,而不是像下面的代码示例中那样只推送一项。
有人可以帮忙解决这个问题吗?
注意:您可以忽略“ID”和“收入”。
$("#theList li").each(function() {
var $this=$(this);
scrapeProductName=$this.find('.name').text();
scrapeProductPrice=$this.find('.price').text();
scrapeProductQuantity=$this.find('.quantity').text();
console.log('product: ' + scrapeProductName + '; price: ' + scrapeProductPrice + '; quantity: ' + scrapeProductQuantity);
});
dataLayer = [];
dataLayer.push( {
'ecommerce': {
'purchase': {
'actionField': {
'id': '11111111', 'revenue': '999.99'
},
'products': [
// start product list
{
'name': scrapeProductName,
'price': scrapeProductPrice,
'quantity': scrapeProductQuantity
}
// end product list
]
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="theList">
<li>
<div class="name">banana</div>
<div class="price">1.00</div>
<div class="quantity">3</div>
</li>
<li>
<div class="name">apple</div>
<div class="price">2.00</div>
<div class="quantity">5</div>
</li>
<li>
<div class="name">pear</div>
<div class="price">3.50</div>
<div class="quantity">1</div>
</li>
</ul>
最佳答案
在each函数中单独构建产品数组,然后在dataLayer.push调用中将其附加为单个实体:
var products = [];
$("#theList li").each(function() {
var $this=$(this);
scrapeProductName=$this.find('.name').text();
scrapeProductPrice=$this.find('.price').text();
scrapeProductQuantity=$this.find('.quantity').text();
console.log('product: ' + scrapeProductName + '; price: ' + scrapeProductPrice + '; quantity: ' + scrapeProductQuantity);
products.push({name: scrapeProductName, price: scrapeProductPrice, quantity: scrapeProductQuantity});
});
dataLayer = [];
dataLayer.push( {
'ecommerce': {
'purchase': {
'actionField': {
'id': '11111111', 'revenue': '999.99'
},
'products': products
}
}
});
关于javascript - 如何使用JS抓取页面并将变量推送到GTM数据层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47912231/