window.onload与$(document).ready()的区别
对于很多初学者来说,window.onload出现在代码中的频率非常高,这似乎变成了一种习惯,可是并不知道具体为什么要加这句代码,可以做几个试验对比:
实验一:
<script>
document.getElementById("me").style.color = "blue";
</script>
<body>
<h1 id="me">大宝章 is Double Zhang</h1>
</body>
实验结果是 h1字体为原始黑色,并没有被渲染为蓝色,原因是document文档是从上向下解析执行,当执行到script时,body中的h1还未被执行和加载到网页中,这时候 document.getElementById("me") 并没有获取到h1对象,就更不存在将它的字体设置为蓝色了。
------------------------------------------------------------------------------------------------------------
实验二:
<body>
<script>
document.getElementById("me").style.color = "blue";
</script>
<h1 id="me">大宝章 is Double Zhang</h1>
</body>
实验结果字体为原始的黑色,可以很好的解释“document文档是从上向下解析执行”,当执行script时,h1仍旧没有被加载。
------------------------------------------------------------------------------------------------------------
实验三:
<body>
<h1 id="me">大宝章 is Double Zhang</h1>
<script>
document.getElementById("me").style.color = "blue";
</script>
</body>
实验结果字体为蓝色,终于渲染成功,从上而下万年不变的真理啊。
------------------------------------------------------------------------------------------------------------
实验四:
<script>
window.onload = function(){
document.getElementById("me").style.color = "blue";
}
</script>
<body>
<h1 id="me">大宝章 is Double Zhang</h1>
</body>
相比实验一添加了神器window.onload,字体为蓝色。这里有必要解释一下window.onload了,它表示网页完成了加载,包括DOM树的创建、网页中图片等外部资源的加载。window.onload=function(){这里的代码将在网页加载完成以后执行},这就是为什么实验四能够成功渲染蓝色字体,因为body里的内容已经加载完成,h1已经存在,才执行了颜色设置。
这里有一个隐患,当页面中需要加载的文件非常多(如图片),window.onload里面的代码就迟迟无法执行,将带来很差的用户体验。
------------------------------------------------------------------------------------------------------------
实验五:
<script>
setTimeout(function(){
document.getElementById("me").style.color = "blue";
},3000);
</script>
<body>
<h1 id="me">大宝章 is Double Zhang</h1>
</body>
字体成功渲染为蓝色,因为做了一个定时器的延时3秒,在这3秒里,页面完成了加载工作,h1已经建立好,再添加颜色就没问题了,但是运行会看到字体会闪一下,闪之前为黑色,闪之后变为红色,因为页面刚加载好,h1默认呈现黑色,三秒时变为红色。
这也是一种方法,但是我们并不提倡,因为我们无法把握页面加载完成的准确时间,就意味着我们不能避免“闪一下”的问题,并且,setTimeout设置的延迟时间如果小于页面加载的时间,字体也不会渲染为蓝色。
-----------------------------------------------------------------------------------------------
实验六:
<script>
$(document).ready(function(){
document.getElementById("me").style.color = "blue";
});
</script>
<body>
<h1 id="me">大宝章 is Double Zhang</h1>
</body>
字体成功渲染蓝色!wuli jQuery的ready方法,就是在DOM树创建完成后(HTML解析的第一步)就触发,无需等待页面中其他资源(图片等)的加载,成功解决了实验四中的隐患。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
自己模拟一个jQuery的ready方法:
function myReady(fn){
//利用能力检测区分浏览器
if(document.addEventListener){
document.addEventListener("DOMContentLoaded",fn,false);
}
else{ //这里是IE低版本浏览器
IEContentLoaded(fn);
}
//IE模拟DOMContentLoaded
function IEContentLoaded(fn){
var d = document.window;
//保证fn回调函数只执行一次
var done = false;
var init = function(){
if(!done){
done = true;
fn();
}
}
(function(){
try{
//DOM树未创建前调用doScroll会抛出异常
d.documentElement.doScroll('left');
}
catch(e){
//arguments.callee指向这个即可执行的(function(){})();
//没有捕获异常意味着DOM成功创建,就可以执行回调函数了
setTimeout(arguments.callee,60);
return;
}
})();
//监听document的加载状态
d.onreadystatechange = function(){
if(d.readyState == 'complete'){
d.onreadyState == null;
init();
}
}
}
}
window.onload与$(document).ready()的区别的更多相关文章
- window.onload和$(document).ready()的区别
window.onload和$(document).ready()的区别,如下表所示 window.onload $(document).ready() 执行时间 在页面所有内容(图片.文件)加载 ...
- window.onload和document.ready的区别
window.onload和document.ready虽然两个方法的运行效果都一样,但他们之间是存在着区别的: 一.从执行的时间 window.onload在dom文档结构加载完毕以后就可以执行,不 ...
- window.onload 与 $(document).ready() 的区别
以浏览器装载文档为例,在页面加载完毕后,浏览器会通过 JavaScript 为 DOM 元素添加事件.在常规的 JavaScript 代码中,通常使用 window.onload 方法 ,而在 jQu ...
- 浏览器加载模式:window.onload和$(document).ready()的区别(详解)
jQuery库文件是在body元素之前加载的,必须等待所有的DOM元素加载后,延迟支持DOM操作,否则就无法获取到. 在延迟等待加载,JavaScript提供了一个事件为load,方法如下: wind ...
- 【jQuery】window.onload 和 $(document).ready() 的区别
... 在Stack Overflow上看到了这个问题,自己翻译了过来. The onload event is a standard event in the DOM, while the read ...
- window.onload与document.ready的区别
1. window.onload必须等到网页中所有的内容加载完(包含图片)才执行 document.ready网页中所有DOM结构绘制完执行,可能DOM并没有加载完 所有document.ready比 ...
- window.onload与$(document).ready()之区别
1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕. 2 ...
- window.onload()和$(document).ready的区别( $(document).ready == $(function(){ }) )
首先$(function(){}) 和 $(document).ready(function(){}) 是一个方法,$(function(){})为简写(用的多) $(document).ready和 ...
- window.onload和$(document).ready(function(){})的区别
前段时间在面试之前查找并整理了一下window.onload和$(document).ready(function(){})区别,今天有时间更到我的博客上,由于本人资历尚浅,如有不对的地方,还请指正. ...
随机推荐
- 从APP跳转到WI-FI
之前以为,苹果不支持直接从应用跳到系统设置里的WiFi界面.后来发现,这个小功能是可以实现的,而且实现起来并不麻烦.让我们一起来看看吧! 需求 从应用跳到系统设置里的WiFi界面有这个需求存在吗?答案 ...
- python 新手遇到的问题
作为新手,我把之前遇到的问题贴出来 错误提示1: TypeError: unbound method a() must be called with A instance as first argum ...
- Java面试连环炮问题收集记录贴【JVM方面】
写这类文章是为了记录下网上看到的/自己经历的一些一环扣一环的面试问题,一方面提高自己的理论知识,另外一方面也给自己去参加面试或面试他人提供点参考和帮助. 问题一: 为什么一个对象会被GC? 对象在进行 ...
- parted LVM划分4T磁盘,在线扩展1.5T
磁盘分区: parted /dev/emcpowera (parted) print Model: Unknown (unknown) Disk /dev/emcpowera: 4398GB Se ...
- c语言快速入门2
如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 1.1.12 函数的概念 函数的定义:c语言的基本单位,c语言 ...
- 【手把手教你全文检索】Apache Lucene初探
PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...
- Codeforces Round #388 (Div. 2) - B
题目链接:http://codeforces.com/contest/749/problem/B 题意:给定平行四边形的3个点,输出所有可能的第四个点. 思路:枚举任意两个点形成的直线,然后利用这两个 ...
- 【转】oracle中rowid的用法 (全面)
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...
- ECF R9(632E) & FFT
Description: 上一篇blog. Solution: 同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了. 同样有许多需要注意的地方:我们只是判断可行性, ...
- maven中把依赖的JAR包一起打包
<buizld> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId ...