一般比较保险的做法是,将需要改变网页内容的JavaScript放在页面加载完成之后再去执行。
为了防止文档尚未加载完全,运行JavaScript时出现找不到节点,然后报错,导致整个页面出错。
在jQuery中的写法是
$(document).ready(function{
console.log('页面加载完成');
});
相当于调用了下jQuery的ready函数,给ready函数传入的参数,也是一个函数。jQuery会判断在网页加载完成之后,开始调用执行我们传入的这个函数。
原生JavaScript的写法是
document.ready=function(){
console.log('网页加载完成');
};
通过jQuery的load函数加载的页面内容,为什么js就失效了呢?
通过load函数加载的内容
js是有效的, 并不会失效, 当然这跟怎么用load的一些细节有些关系
下面举个实例, 可以看到js是有效的, 请看下面视频演示
具体怎么实现的呢, 下面看实际代码
首先准备2个html页面
demo_js_load.html : 这个是主运行页面, 用来实现功能
demo_js_load_ch.html : 这个是被加载的页面, 里面放了2种js代码以展示效果
然后运行demo_js_load.html就能看到被加载的页面中
自动运行的alert在被load成功后就运行
其内部的function函数testjs()也能被正常调用
贴出主要代码:
没加载数据前
这是被Load的内容
如果以上内容有不对的地方, 欢迎讨论
jQuery是如何判断HTML页面加载完毕的?它的原理是什么?
这个问题我之前刚看过。
他用的不是window.onload
$(document).ready是在页面加载完毕时执行回调
而window.onload是在页面全部加载完成时,包括一些资源比如图片。
所以window.onload比$(document).ready更延后一些。
window.onload自然不必说,是浏览器自身支持的。
但是$(document).ready我看了一下源代码。
他根据的是document.documentElement对象去判断的。
他每次调用document.documentElement.scrollLeft方法
如果此方法产生了异常,就说明scrollLeft无法执行,此时页面还未加载完成,
所以他就用try块包含这条语句,然后catch住,用setTimeout方法,重新执行一遍。
直到scrollLeft可以执行时,就说明页面加载完成了,此时再去回调。
很有意思。
"