Невозможно передать значение из функции в массив уровня данных, используя Ja vaScript

Я пытаюсь собрать значение (отображается 1 -10 из 74) в приведенном ниже HTML

<body>
<p data-brackets-id="1217" class="search">

                <!--No Results Found-->
                <small data-brackets-id="1218" data-bind="visible:(searchResults().length == 0), html: translations.noResults" style="display: none;">No Results To Display Please Enter A Search Term Above</small>

                <!--Error Message-->
                <small data-brackets-id="1219" class="error-message" data-bind="visible:errorMessage, html:errorMessage" style="display: none;"></small>

                <!--Search Result Count-->
                <small data-brackets-id="1220" data-bind="html:currentlyShowing, visible:(searchResults().length > 0)">Showing 1 -10 of 19300</small>
            </p>
</body>

с помощью функции window.onload

/** * возвращает текст "Показано 1 -10 из 19300" после загрузки страницы и передачи значения в dataLayer. */

function showing () {
    var showResults = document.querySelector(".search small :nth-child(3)").innerHTML;
}

window.onload = showing;

и перейдите в объект dataLayer (Результаты поиска), чтобы аналитика Google могла получить значение из dataLayer.

<!-- start dataLayer -->
<script>
    var adobeInfo = {
            pageInfo: {
                'pageType': "welcome page",
                'Search Results': showResults
            }
    }

  <!-- end dataLayer -->

однако я не могу передать значение querySelector в dataLayer, так как я продолжаю получать "undefined". это windows.onload, который не позволяет мне передать значение, или я просто использую неправильный синтаксис кода для того, что мне нужно для выполнения этой задачи?

спасибо за любую помощь заранее.

<body>
<p data-brackets-id="1217" class="leader-1 no-trailer">
<!--No Results Found-->
<small data-brackets-id="1218" data-bind="visible:(searchResults().length == 0), html: translations.noResults" style="display: none;">No Results To Display Please Enter A Search Term Above</small>

<!--Error Message-->
<small data-brackets-id="1219" class="error-message" data-bind="visible:errorMessage, html:errorMessage" style="display: none;"></small>

<!--Search Result Count-->
<small data-brackets-id="1220" data-bind="html:currentlyShowing, visible:(searchResults().length > 0)">Showing 1 -10 of 74</small>
</p>

<script>  
function results () {
    alert(" alert inside results function");
    var showResults = document.querySelector("leader-1.no-trailer :nth-child(3)").innerHTML; // get the results of the showing info from search page.
    showResults.select();
}

window.onload = results();
</script>

  
<!-- Use dataLayer object to pass values to analytics -->

<script>
    var dataLayer = {
            pageInfo: {
                'pageType': "welcome page",
                'show Results': showResults // value of show results should go here (Showing 1 -10 of 74)
            }
         }
</script>

</body>

поэтому я предполагаю, что мой настоящий вопрос заключается в том, как передать значение функции window.onload в глобальную переменную, чтобы я мог передать его в свой dataLayer?

1 ответ

Решение

Настройка showResult вне datalayer делает программу трудной для чтения и отладки. Мое предложение определить загрузчик для data layer как ниже:

var dataLayer = {
  pageInfo: {
    'pageType': "welcome page",
  },
  load: function() {
    this.showResults = document.querySelector("leader-1.no-trailer :nth-child(3)").innerHTML; // get the results of the showing info from search page.
    this.showResults.select();
  }
}


// windows onload event
windows.onload = function() {
  dataLayer.load();
}
Другие вопросы по тегам