Диспетчер тегов не находит дочерние элементы по имени класса - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь создать строку из конкатенации innerHTML и значений атрибутов элемента из дочерних элементов с помощью Google Tag Manager. Когда я запускаю getElementsByClassName для захвата всех дочерних элементов через GTM, он не захватывает никаких данных, так как я проверяю «isPdpFamilyMember.length» и в результате получаю 0.

Я использовал и GTM, и расширение TamperMonkey Chrome для запуска скрипта в режиме реального времени. Единственный раз, когда скрипт запускается правильно, это когда загрузка страницы завершается, и я вхожу в панель консоли Chrome devtools и нажимаю «return».

Это пример кода, который должен обрабатывать скрипт. Он присутствует в клиенте, но не в исходном коде:

<div id="mz-family-container">
    <div class="family-members"></div>
    <div class="family-members"></div>
</div>

Это то, что на самом деле в исходном коде:

<div id="mz-family-container"></div>

Это скрипт из GTM:

(function() {
      window.onload=function(){var pdpMain = document.querySelectorAll('div[itemtype="http://schema.org/Product"]')[0],
        isPdpFamily = document.getElementById('mz-family-container'),
        isPdpFamilyMember,
        pdpMainIdNos = /[0-9]{4,7}/,
        pdpMainId = pdpMainIdNos.exec(pdpMain.querySelectorAll('span[itemprop="sku"]')[0].innerHTML),
        pdpMainColorContainer,
        pdpMainColor,
        pdpMainSizeContainer,
        pdpMainSize,
        pdpMainSku,
        i;
    if (isPdpFamily) {
        isPdpFamilyMember = isPdpFamily.getElementsByClassName('family-members');

        for (i = 0; i < isPdpFamilyMember.length; i++) {
            var isPdpFamilyMemberThis = isPdpFamilyMember[i].getAttribute('id');
            if (isPdpFamilyMemberThis = pdpMainId) {
                pdpMainColorContainer = isPdpFamilyMember[i].querySelectorAll('select[data-mz-product-option="tenant~color"]')[0];
                pdpMainColor = pdpMainColorContainer.options[1].value;
                pdpMainSizeContainer = isPdpFamilyMember[i].querySelectorAll('select[data-mz-product-option="tenant~size"]')[0];
                pdpMainSize = pdpMainSizeContainer.options[1].value;
                pdpMainSku = isPdpFamilyMemberThis + "-" + pdpMainColor.toUpperCase() + "-" + pdpMainSize.toUpperCase();
            } else {
            continue;
            }
        }
    } else {
        pdpMainColorContainer = pdpMain.querySelectorAll('select[data-mz-product-option="tenant~color"]')[0];
        pdpMainColor = pdpMainColorContainer.options[1].value;
        pdpMainSizeContainer = pdpMain.querySelectorAll('select[data-mz-product-option="tenant~size"]')[0];
        pdpMainSize = pdpMainSizeContainer.options[1].value;
        pdpMainSku = pdpMainId + "-" + pdpMainColor.toUpperCase() + "-" + pdpMainSize.toUpperCase();
    }
return pdpMainSku;
                              }
})();

Поскольку «isPdpFamilyMember.length» приводит к 0, дочерние атрибуты не существуют, и строка не может быть создана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...