我正在尝试创建一个自定义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"}}]}}
你只能看到&#34; http://www.site1.com&#34;正在打印为&#34; @ id&#34;
有什么想法吗?
答案 0 :(得分:0)
您设置的自定义JavaScript变量只会返回第一个值。
这是由于return语句,一旦脚本对此进行评估,它将返回当前值,即索引0并关闭循环。因此它只会返回第一个索引。
由于您无法将值传递到Custom JavasScript Variables中,因此您需要返回要使用的格式化对象。
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;
}