如何使用 Google 跟踪代码管理器提取图片旁边的文本?

How can I extract the text next to an image with Google Tag Manager?

挑战如下:

我们有一张图片和描述它的文字嵌套在同一个 div 中。当有人点击该图片时,我们希望 Google 标签管理器 return 该文本。

基本上,我们需要:

  1. 上去3个父节点
  2. 下到class“右段”的子节点
  3. 下到带有class“is-title”的子节点
  4. 下到标签为“a”的子节点
  5. 提取文本

利用我粗陋的、自学的 Javascript 知识,我想出了这个怪异的函数:

function(){
  return el.parentNode.parentNode.parentNode.getElementsByClassName("right-section")[0].getElementsByClassName("is-title")[0].getElementsByTagName("a")[0].innerText;
}

...根本不起作用。

有什么建议吗?

这是一个示例标记,基本上这个想法是使用 closest 函数向上移动到 dom 树,然后使用 'querySelector' 和该结果向下移动到其中的任何元素

const img = document.querySelector(".item_image")
img.onclick = e=>{
    const root = e.target.closest(".card") // goind back to root element
    const text = root.querySelector(".text") // going down to text element
    console.log(text.innerText)
}
<div class="card" style="width:400px;">
    <div class="sections">
        <img class="item_image" style="width:200px;" src="https://2.img-dpreview.com/files/p/E~C1000x0S4000x4000T1200x1200~articles/3925134721/0266554465.jpeg" alt="">
    </div>
    <div class="another-seci">
        <div class="text">
            Despite its modest MSRP, Fujifilm's entry-level X-A3 has dual control dials, a tilting touchscreen, and the same 24MP sensor from the company's flagship models - but with a traditional Bayer color filter array instead of X-Trans. We're pushing through our full 
        </div>
    </div>
</div>

document.querySelectorAll('.item_image').forEach(item => {
  item.addEventListener('click', event => {
        const root = event.target.closest(".card") // goind back to root element
    const text = root.querySelector(".text") // going down to text element
    console.log(text.innerText)
  })
})
<div class="card" style="width:400px;">
    <div class="sections">
        <img class="item_image" style="width:200px;" src="https://2.img-dpreview.com/files/p/E~C1000x0S4000x4000T1200x1200~articles/3925134721/0266554465.jpeg" alt="">
    </div>
    <div class="another-seci">
        <div class="text">
            Despite its modest MSRP, Fujifilm's entry-level X-A3 has dual control dials, a tilting touchscreen, and the same 24MP sensor from the company's flagship models - but with a traditional Bayer color filter array instead of X-Trans. We're pushing through our full 
        </div>
    </div>
</div>
<div class="card" style="width:400px;">
    <div class="sections">
        <img class="item_image" style="width:200px;" src="https://2.img-dpreview.com/files/p/E~C1000x0S4000x4000T1200x1200~articles/3925134721/0266554465.jpeg" alt="">
    </div>
    <div class="another-section">
        <div class="text">
            BlaDespite its modest MSRP, Fujifilm's entry-level X-A3 has dual control dials, a tilting touchscreen, and the same 24MP sensor from the company's flagship models - but with a traditional Bayer color filter array instead of X-Trans. We're pushing through our full 
        </div>
    </div>
</div>

好的,这是您需要执行的操作的示例。如果您需要一个只需复制粘贴就可以解决的确切答案,请显示 HTML 的块,看看 Amir 是如何做的。我使用了 Amir 的 HTML 示例来解决这个问题。此外,如果您发现当您点击不同的图像时它采用相同的文本,请在您的 html 片段中包含来自其他图像的代码,以便我们可以看到它们与父图像的关系并可以改进选择器。

这是您的 CJS 代码:

function(){
  return {{Click Element}}.parentElement.parentElement.querySelector(".text").innerText
}

一旦到达底部,就完全没有必要从一个节点跳到另一个节点。从底部的 parentElement 开始,只需执行一次查询选择器,您就万事大吉了。

您也可以使用 .closest,但它的复杂性似乎远远超过几个父元素。我知道这微不足道,但是嘿。

以下是我在此页面上调试它的方式(在 Amir 的回答中):

以下是最终有效的方法,适用于谷歌搜索的任何人:

function (){
     el = {{Click Element}};
     var item = el.parentElement.parentElement.nextElementSibling.getElementsByTagName('a')[0].innerText;
     return item;
}