我正在尝试创建一个自定义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/