我知道可以使用不同的框架,如prototype或jQuery来附加函数到window.onload
,但这不是我想要的。
我需要像.readyState
这样的东西,这样我就可以做出这样的事情:
if(document.isReady){
var id = document.getElem ...
}
除了使用框架提供的方法,还有其他方法吗?
我知道可以使用不同的框架,如prototype或jQuery来附加函数到window.onload
,但这不是我想要的。
我需要像.readyState
这样的东西,这样我就可以做出这样的事情:
if(document.isReady){
var id = document.getElem ...
}
除了使用框架提供的方法,还有其他方法吗?
看起来这个问题很久以前就被问过了。今天我们有document.readyState
,甚至还有一个与之配套的事件。
为了达到相同的效果:
if(document.isReady){
var id = document.getElem ...
}
const doTask = () => {
var id = document.getElem ....
}
if (document.readyState !== 'loading') {
// in case we missed the `loading` state, start running the
// task now...
doTask();
} else {
// otherwise register a listener to be notified of the next state
document.addEventListener('readystatechange', event => {
if (event.target.readyState === 'interactive') {
doTask();
}
});
}
window:DOMContentLoaded
事件的答案,将在上述事件侦听器运行之后接收该事件,这意味着使用readystatechange
事件允许您在DOMContentLoaded
被触发之前开始处理DOM,同时仍然能够与DOM元素交互。const log = document.querySelector('.event-log-contents');
const reload = document.querySelector('#reload');
reload.addEventListener('click', () => {
log.textContent ='';
window.setTimeout(() => {
window.location.reload(true);
}, 200);
});
window.addEventListener('load', (event) => {
log.textContent = log.textContent + 'load\n';
});
document.addEventListener('readystatechange', (event) => {
log.textContent = log.textContent + `readystate: ${document.readyState}\n`;
});
document.addEventListener('DOMContentLoaded', (event) => {
log.textContent = log.textContent + `DOMContentLoaded\n`;
});
<div class="controls">
<button id="reload" type="button">Reload</button>
</div>
<div class="event-log">
<label>Event log:</label>
<textarea readonly class="event-log-contents" rows="8" cols="30"></textarea>
</div>
document.addEventListener('DOMContentLoaded' ...
,而不是使用库中的方法。 - Pierre H.