То, что вы описываете, на самом деле не так уж и увлекательно. Это просто вопрос понимания того, как консоль сообщает о значениях.
При вводе:
document.getElementsByClassName("example");
консоль ответит сообщением о возвращаемом значении этого оператора. getElementsByClassName()
возвращает список узлов (также известный как HTML-коллекция), поэтому консоль показывает вам:
HTMLCollection []
Элементы были там все время. Если бы вы набрали:
document.getElementsByClassName("example")[0];
Консоль сообщит об этом конкретном элементе DOM. И, если бы вы набрали:
document.getElementsByClassName("example").length;
Консоль сообщит о количестве элементов в этой коллекции.
Но, когда вы проверяете элемент, вы сообщаете консоли, что вы заинтересованы только в одном элементе, и, хотя инструменты разработки каждого поставщика построены по-разному, все они будут показывать контент, входящий в сферу действия этого проверенного элемента. элемент. Поэтому, когда вы вернетесь к консоли и снова попробуете свой код, вы получите ту же коллекцию, что и раньше, но с проверенным элементом, который занимает центральное место.
По сути, все это сводится к знанию того, как интерпретировать вывод консоли. Дело не в том, что DOM готов в одном случае, а не в другом.
Если бы вы установили обработчик событий DOMContentLoaded
и попробовали свой код там, вы бы увидели, что ваш код работает правильно все время.