2015-01-02 16 views
0

我有一個網站,包含以下內容:如何讓宏中的函數返回Google標記的html類名稱?

<ul class="top"> 
<li class="first menu">...</li> 
<li class="some menu">...</li> 
<li class="another menu">...</li> 
<li class="last menu">...</li> 
</ul> 

我一直在試圖寫在宏的功能(谷歌標籤管理器),將返回「另一個菜單」或「第一菜單」,或任何菜單取決於哪個菜單的元素被點擊。我試過了這個例子的代碼,以確保一切可以工作:

function() { 
    var now = new Date(); 
    return now.getTime(); 
    } 

它工作正常,所以我需要做的就是修改功能,直到它做什麼,我想要它做的。我試圖從這裏類似的問題下面的想法,但他們都導致未定義 - 未定義(而不是 - '一些菜單'):

function() { 
     var now= $(this).attr("class"); 
return now; 
} 

var gtval = aData[4]; 
$(gtval).attr('class').split(' ')[0]); 

var gtval = aData[4]; 
$($.trim(gtval)).attr('class').split(' ')[0]; 

var gtval = aData[4]; 
var classList = gtval.attr('class').split(/\s+/); 
return classList; 

return $('selector').attr('class').split(' ')[0]); 

return document.getElementsByClassName(names); 

它似乎並不像這將是非常難以實現我想要什麼,我只是無法弄清楚如何做到這一點。謝謝你的幫助!

+0

託梅克已經回答了這一點,但如果你仍然想在宏價值記得DOM必須加載它可被查詢過,所以這對pageload/gtm.load或默認的「all pages」規則不起作用(您的規則必須聽取gtm.dom)。 –

回答

0

謝謝你的答案,但我無法讓他們工作。幸運的是,我的同事想出瞭如何做到這一點。我張貼瞭解決此,它可能有利於他人:

function() { 
var $element = $({{element}}); 
return $element.closest("li").attr("class"); 
} 
1

我相信你不需要使用jQuery來實現這一點。如果列表中的元素不是很複雜,您可以改爲使用「Click Listener」標籤。如果將「Click Listener」標記添加到容器中,它將捕獲網頁上任何元素的所有點擊,併爲您提供有關它的基本信息(包括element.class宏中的類)。要檢查它是否能夠解決您的問題,只需將「Click Listener」添加到您的容器中,進入調試模式,進入您的網頁,點擊列表元素並檢查將在gtm上的element.class宏中存儲哪些信息。點擊事件。

如果你在列表元素中有一些相當複雜的東西,那麼element.class在click事件上很可能會給你帶來一些愚蠢的東西。爲了在這種情況下處理你的問題,你可以使用jquery,但方式稍有不同。您不應該在點擊事件時調用jquery函數,因爲GTM不會將您單擊的元素傳遞到腳本中。我建議爲您的網站添加一個標籤,其中包含這樣一個腳本。

$('li').click(function(){ 
    dataLayer.push({ 
    'event' : 'li_class_click' // optional, to be used if you want do 
           // something specific on moment of click 
    'li_class' : $(this).attr('class') 
    }) 
}); 

有了這樣的標籤,您將爲每個li元素添加一個函數調用。點擊此功能後,將在dataLayer中放置所需的類名稱。你可以進一步將它放在宏中。此外,如果您希望做點什麼來響應點擊,則只需將'event':'li_class_click'添加到dataLayer推送中,並將所有魔法放置在僅在li_class_click event上觸發的另一個標籤中。