我正在尝试创建一个自定义GTM JavaScript变量,该变量将返回JSON-LD中特定面包屑链接的值。

但是我写的循环只返回第一个值:

JavaScript(GTM变量)

function() {
    var bcLink = document.getElementsByClassName("bcLink");
    for (i=0; i<bcLink.length; i++) {
        return bcLink[i].getAttribute("href");
    }
}


的HTML

<ul class="breadcrumbs">
    <li><a class="bcLink" href="http://www.site1.com">Home</a></li>
    <li><a class="bcLink" href="http://www.site2.com">Dumpsters</a></li>
    <li><a class="bcLink" href="http://www.site3.com">State</a></li>
    <li><a class="bcLink active" href="http://www.site4.com">City</a></li>
</ul>


输出的JSON-LD

{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"http://www.site1.com","name":"Dumpsters"}},{"@type":"ListItem","position":2,"item":{"@id":"http://www.site1.com","name":"Dumpsters"}},{"@type":"ListItem","position":3,"item":{"@id":"http://www.site1.com","name":"Dumpsters"}},{"@type":"ListItem","position":4,"item":{"@id":"http://www.site1.com","name":"Dumpsters"}}]}}


您可以看到只有“ http://www.site1.com”被打印为“ @id”

有任何想法吗?

最佳答案

您设置的自定义JavaScript变量将仅返回第一个值。

这是由于return语句所致,一旦脚本对此求值,它将返回当前值,即索引0并关闭循环。因此,它将永远只返回第一个索引。

由于您无法将值传递到“自定义JavasScript变量”中,因此需要返回一个格式化的对象才能使用。

function() {
var bcLink = document.getElementsByClassName("bcLink");
var data = [];
for (i=0; i<bcLink.length; i++) {
// you will need to create/format the data suitable to your needs
data.push({ 'url' : bcLink[i].getAttribute("href") });
}
//return the data object to use elsewhere
return data;
}

关于javascript - 面包屑的自定义GTM变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40386738/

10-09 15:07
查看更多