Brock의 대답 은 좋지만 더 현대적이고 우아한 AJAX 문제에 대한 또 다른 솔루션을 제공하고 싶습니다. 그의 스크립트는 또한 setInterval()
주기적으로 (300ms) 확인 하는 데 사용되기 때문에 즉시 응답 할 수 없습니다.
즉시 응답해야하는 경우을 사용 MutationObserver()
하여 DOM 변경을 수신하고 요소가 생성되는 즉시 응답 할 수 있습니다.
(new MutationObserver(check)).observe(document, {childList: true, subtree: true});
function check(changes, observer) {
if(document.querySelector('#mySelector')) {
observer.disconnect();
}
}
비록 이후 check()
모든 DOM 변경시 발생하기 DOM이 자주 변경되거나 조건을 평가하는 데 오랜 시간이 걸리는 경우 속도가 느려질 수 있습니다.
또 다른 사용 사례는 특정 요소를 찾지 않고 페이지 변경이 중지되기를 기다리는 경우입니다. 이것을 결합 setTimeout()
하여 기다릴 수도 있습니다.
var observer = new MutationObserver(resetTimer);
var timer = setTimeout(action, 3000, observer);
observer.observe(document, {childList: true, subtree: true});
function resetTimer(changes, observer) {
clearTimeout(timer);
timer = setTimeout(action, 3000, observer);
}
function action(o) {
o.disconnect();
}
이 방법은 매우 다재다능하므로 속성 및 텍스트 변경 사항도들을 수 있습니다. 그냥 설정 attributes
과 characterData
에 true
옵션에
observer.observe(document, {childList: true, attributes: true, characterData: true, subtree: true});
(function init(){var counter = document.getElementById('id-of-element');if (counter) { /* do something with counter element */ } else { setTimeout(init, 0);}})();
요소의 존재를 지속적으로 폴링 하는 데 사용할 수 있습니다 . 이것이 가장 일반적인 솔루션입니다.