css-selectors - 如何检索要在触发器定义中使用的父节点的元素 ID

标签 css-selectors google-tag-manager

在 Google 跟踪代码管理器中,可以触发基于 css 选择器匹配的触发器。如果 html 元素与 css 选择器匹配,则会触发触发器(此处提供更多详细信息:http://www.simoahava.com/analytics/matches-css-selector-operator-in-gtm-triggers/)

目前我使用以下 css 选择器匹配来确定是否应触发触发器:

div#admin-button-id, div#admin-button-id *

因此逗号前的第一部分表示一种可能性,它匹配所有具有 id admin-button-id 的 div 元素。 第二种可能性(在逗号之后)匹配所有 html 元素,这些元素是具有 id admin-button-id 的 div 元素的子元素。这行得通,但我更喜欢一个我不必复制 div#admin-button-id 的版本。所以,像

div#admin-button-id *?

表示 child 是可选的。有这样一个有效的结构吗?

最佳答案

根据@nyen 的建议,我想出了以下解决方案:

我必须处理以下标记代码(省略不必要的 css 类):

<div id="admin-button-id">
    <span>
        <span>Administration</span>
    </span>
</div>

可以单击此按钮的各个部分,最里面的 span、中间的 span 或外部的 div。但只有外部 div 包含一个 id,我可以使用它来匹配我的 GTM 触发器。因此,在 GTM 中,我创建了一个名为“calculatedClickId”、类型为“Custom JavaScript”的用户定义变量。自定义函数向外(从最里面的span到最外面的div)在dom树中查找id:

function() {
  if ({{Click Element}}.id != "") {
    return {{Click Element}}.id;
  }
  if ({{Click Element}}.parentNode.id != "") {
    return {{Click Element}}.parentNode.id;
  }
  return {{Click Element}}.parentNode.parentNode.id;
}

{{Click Element}} 是 GTM 提供的 html 元素。所以现在在我的 html 元素中发生点击并不重要,变量 calculatedClickId 总是设置为外部 div 的 ID。

这让我可以轻松地在我的触发器配置中使用变量 calculatedClickId:

enter image description here

我知道自定义 javascript 方法(还)不是万无一失的,可能会进一步完善,但这个解决方案是对 css 选择器方法的改进。

关于css-selectors - 如何检索要在触发器定义中使用的父节点的元素 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40024126/

相关文章:

twitter-bootstrap - :before pseudo-element when there is one class but NOT another class 的 CSS 选择器

google-analytics - 跟踪代码管理器未在 AMP 页面上触发

html - Google Analytics 命中返回 302,第二个请求无效

javascript - Google 跟踪代码管理器中的简单 DOM 属性匹配

javascript - 用于同一主机上 2 个独立网络应用程序的 Google 跟踪代码管理器

javascript - Google 跟踪代码管理器中 dataLayer 的顺序重要吗?

html - CSS 在 href 悬停时显示子菜单

css - 是否有 CSS 父级选择器?

css - 动画 :before does not work properly

css - 嵌套主题组件 : apply styles depending on a theme class of the nearest themed parent, 忽略承载主题类的更深层次父级