学习jQuery,首先学习的肯定是?John Resig大神的jQuery开篇。
Tutorial:How jQuery works(指南:jQuery怎么工作?)
学习后的目标:
1. jQuery的基本使用方式
2. 明白window.onload 和 $(document).read()的区别
3. 怎么通过jQuery获取dom对象
?
在jQuery的官网下载jQuery,然后创建一个html的测试页面,
?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>jQuery tutorial</title> </head> <body> <h1>jQuery Tutorial!</h1> <a href="http://jquery.com">jQuery</a> <script type="text/javascript" src="javascript/jquery-1.7.1.js"></script> </body> </html>?
?
注意到一个细节,大神的引入jQuery的<script>的位置在body的最后一行,在firebug下面看了下,这样是有好处的,因为js的加载是阻塞式的,当映入js的代码在head中的时候,浏览器会去加载js,而阻塞了,其他的http请求和页面html的加载。而放在body的最后一行,这样等着dom加载完毕才去请求js,加载js,页面加载的速度会快一点。在firebug看了下,在head中引入jQuery的页面加载速度41ms,而在body的最后一行加载的速度是19ms,如果考虑在网络上,这个差距估计还会大一点。
?
在没有使用jQuery之前,我一般在写非侵入的js的时候会用到window.onload, 如:
?
window.onload = function() { ...... }
?
?这样写的好处是,当用document.getElementById的时候避免dom在id元素还没有加载出来,从而得不到dom的id对象。当然也可以不用window.onload,直接把js放在body最后面就像上面说的那样。
?
我们看看大神怎么解释$(document).read()的优点的。
?
当浏览器加载页面时不会去运行js的代码,直到所有图片的下载完成(包括那些侧边广告额~)。在第一个地方使用window.onloa去试着运行你的代码时,html的dom还没有完成加载。而jQuery通过document的ready事件,只要监测到页面的dom完成渲染加载就可以去操作。
?
简单的讲就是,window.onload也等待页面所有的dom元素和属性完成加载,如需要等到图片完成加载后,才可以运行。
而jQuery的原理是只要页面的dom树可以渲染和加载就可以操作dom,效率要高一点。
?
$(document).ready(function(){ //your code here! });
?
?
还有就是window.onload只能运行一次,
如:
?
<script type="text/javascript"> window.onload = function() { console.log("a"); } window.onload = function() { console.log("b"); } window.onload = function() { console.log("c"); } </script>
?
?可以在firebug或者google的web develop tools里面看到输出的是c,
?
而通过$(document).ready();
?
$(document).ready(function() { console.log("a"); }); $(document).ready(function () { console.log("b"); }); $(document).ready(function() { console.log("c"); });
?
?输出的是a b c
?
jQuery的选择器小试牛刀-- 选择测试页面中的超链接,当点击时,给出一个alert
?
$(document).ready(function() { $("a").click(function() { alert("I am learning jQuery!"); }); });
?
?我们看到页面弹出alert,且发生跳转。
?
如果想阻止事件的默认行为可以:
?
$(document).ready(function() { $("a").click(function(event) { alert("I am learning jQuery!"); event.preventDefault(); }); });?
?
亲,还跳转吗?
?
?
通过js给dom添加css
我们把超链接的字体改一改
?
<style type="text/css"> .test { font-weight: bold; font-size: 24px; } </style>
?$(document).ready(function() {
?
// $("a").click(function(event) { // alert("I am learning jQuery!"); // event.preventDefault(); // }); $("a").addClass("test"); setTimeout(function() { $("a").removeClass("test") }, 2000); });?
为了看到效果,两秒后去除css的效果。
?
jQuery简单特效--点解连接慢慢的消失
?
$(document).ready(function() { $("a").addClass("test"); $("a").click(function(event) { event.preventDefault(); $("a").hide("slow"); }); });?
?
回调函数和函数
?
回调函数是作为另一个函数的参数,在父函数执行完毕的时候开始执行。
如:$.get("home.html", myCallBack);
这里的第二个参数就是一个简单的回调函数,在js中函数可是一等公民啊。
如果回调函数带参数怎么办呢?
$.get("home.html", myCallBack(param1, param2));
这样是不对的,因为不是回调函数,而是第二个参数是函数的返回值。
?
可以这样:
$.get('home.html', function(){
? ? ?myCallBack(param1, param2);
})
?