2017-12-20 5 views
0

Javascriptを使用してページをスクラップしてGoogleデータレイヤの配列にデータを挿入しようとしています。以下のコードは、コンソールの確認に従って、HTMLにリストされているすべての項目を正常に処理します。下のコード例のように、3つの項目すべてをプッシュする正しいdataLayer.push関数を書くのには苦労しています。JSを使用してページをスクラップし、変数をGTMデータレイヤにプッシュする方法

誰か助けてもらえますか?

注:「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>

+0

それはそうあなた'each'関数内で' dataLayer.push'を呼び出します。また、各「li」内のアイテムには矛盾するIDがあり、問題を引き起こす場合もありませんが、ベストプラクティスではない場合もあります。 – James

+0

こんにちは@ジェームズ、あなたはIDについて正しいです、それらはクラスでなければなりません。実際のページはここで使用するには適していないより複雑な構造を持つため、この例ではHTMLをすばやく書きました。今すぐエラーを修正します。 – Klikerko

答えて

2

、その後、各機能に分けてお使いの製品の配列を構築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 
    } 
    } 
}); 
関連する問題