эй, я пытаюсь понять, как заставить мой сценарий ждать, выполняя его часть, пока элемент загружается, но в настоящее время он в основном просто передает его и не ждет его. Как лучше всего это сделать в vanilla js?
это код
this.heading = document.getElementById("heading");
что я хочу, чтобы он подождал, или повторяю проверку, пока заголовок не появится наверняка каждый раз
Спасибо
у меня есть html-файл, который загружается в индекс по хешу, и этот скрипт не ждет, пока он загрузит весь код, который можно увидеть здесь: github.com/benonymus/vanilla-js-mvc-with-routing2
Звучит как работа для наблюдателя за мутациями.
IMHO предложение, сделанное @JosanIracheta, - лучшее и более элегантное решение этой проблемы. Пример можно найти на developer.mozilla.org/en-US/docs/Web/API/…



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете неоднократно проверять заголовок, а затем что-то с ним делать, как только он будет получен таким образом.
var heading;
function getHeading() {
var interval = setInterval(function() {
if (heading = document.getElementById('heading')) {
clearInterval(interval);
console.info(heading);
// do some stuff here with your heading
}
}, 100); // 100 represents how often the script checks for existence of heading in ms
}
getHeading();
@JonasWilms: что было бы правильным способом сделать это в случае страницы на стороннем веб-сайте?
Сделайте это после загрузки вашего шаблона. Повторная проверка, если что-то произошло (опрос), обычно является плохой идеей. Это должно произойти так как загруженного шаблона. В вашем случае это похоже на goToRoute:
goToRoute: function (htmlName) {
(function(scope) {
var url = 'views/' + htmlName,
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
scope.rootElem.innerHTML = this.responseText;
// Now it's ready
}
};
xhttp.open('GET', url, true);
xhttp.send();
})(this);
}
Возможно, не имеет смысла помещать конкретный код, о котором вы думаете, в goToRoute; чтобы сделать его более универсальным, вы можете подумать о том, чтобы заставить goToRoute принимать параметр обратного вызова или использовать события.
Да. Определенно. А теперь небольшой пример того, что вы имели в виду в своем последнем предложении, и ответ заслуживает поддержки :)
да, это кажется интересным, но как мне сохранить mvc в целости и сохранности?
Как он загружается?