Javascript 如何检查类的某个值,然后通过标记管理器返回结果

Javascript 如何检查类的某个值,然后通过标记管理器返回结果,javascript,google-tag-manager,Javascript,Google Tag Manager,1:我想做的是检查页面是否包含具有特定字符串的特定类,如果包含,则向Google Tag Manager发送事件 2:我还需要一个宏来检查页面上是否存在某个元素,如果存在,则触发上面的标记 到目前为止,我所能收集到的是所谓的标签: <html> <head></head> <body> ... <a class="myClass">Captured value</a> ... </body> </html&

1:我想做的是检查页面是否包含具有特定字符串的特定类,如果包含,则向Google Tag Manager发送事件

2:我还需要一个宏来检查页面上是否存在某个元素,如果存在,则触发上面的标记

到目前为止,我所能收集到的是所谓的标签:

<html>
<head></head>
<body>
...
<a class="myClass">Captured value</a>
...
</body>
</html>
如果类不存在,我如何编写更干净的代码以不生成错误

关于第二个问题,我应该如何编写带有return语句的函数?我就是搞不懂这个。我尝试了以下几点:

function () {
var t = document.getElementsByClassName("myClass")[0].innerHTML;
var y = dataLayer.push({'event':'trigger'})
if (t.match ("Captured value")) {
return y;
}
我想使用一个宏来检查该类是否存在于具有正确值的页面上,这反过来又可以作为触发第一个标记的触发器。要在GTM中使用宏,我需要返回一个值。我只是不知道如何检查类值,并在验证后激活标记

当然,另一种方法是编写一个自定义HTML标记,在所有页面上触发,并让JavaScript查找、验证和发送事件。我目前还不具备JavaScript能力,无法弄清楚这会是什么样子


非常感谢您的任何建议

对于您的第二块代码,我将首先使其成为一个自调用函数

<script>
(function(){
   ...
}()
</script>

(功能(){
...
}()

检查有问题的类是否存在,并检查所需的文本。使用'indexOf'而不是'matches'(因此不需要处理正则表达式)。如果这两个条件为真,则将事件推送到数据层。当事件等于gtm.dom时触发此标记,以及您认为应该应用的任何其他条件,并且应该这样做。

Google tag Manager为此提供了一个完全可用的dom元素变量。转到变量(假设gtm v2),“新建”,“dom元素”,选择方法“CSS选择器”,选择器“.myClass”(来自您的示例)

设置触发器“页面视图”,触发器类型“DOM就绪”,触发“YourDomeElement eq”“捕获值”


除非我误解了您的需求,否则您不应该编写任何自定义javascript。

我的方法完全是反向的。我尝试使用javascript解决方案,而我可以在标记管理器中使用自定义JS来检查定义的值,如果解析为true,则触发

我想我所考虑的方法是正确的,但这样做的方式过于复杂了

我所做的是添加一个名为cjs.return class的自定义JavaScript宏(使用v1表示该容器),并添加了以下代码:

function (){
    x = document.getElementsByClassName("myClass")[0].innerHTML;
    return x;
}
此函数返回未定义值或“捕获值”,具体取决于它是否是正确的页面。然后,我设置了一个新规则,在以下情况下触发我的标记:

  • 事件等于gtm.dom
  • 返回类等于捕获值
这条新规则触发了我的标签,而我的标签又可以发送我希望它触发的特定页面集上的数据


感谢Eike和nyuen的回答,让我更清楚地了解我做错了什么。

您使用什么类型的标记来检查页面以及何时触发这些标记?当事件等于gtm.dom时,您应该使用自定义HTML触发。是的,这是正确的。我计划在gtm.dom上触发自定义HTML标记,同时触发iggers事件。很好的反馈。不幸的是,到目前为止他们还没有运行v2,所以我现在无法使用CSS选择器。据我所知,v1只使用ID,而且由于我试图触发的值不是ID而是类,我认为我不能使用它。谢谢你的反馈,我现在知道如何自调用函数了!:),使用indexOf可能会更好。
<script>
(function(){
   ...
}()
</script>
function (){
    x = document.getElementsByClassName("myClass")[0].innerHTML;
    return x;
}