[关闭]
@tsingwong 2016-02-29T14:05:18.000000Z 字数 3655 阅读 733

锋利的jQuery Day1

jQuery JavaScript


一、 认识jQuery

1. JavaScript简介

JavaScript是一门脚本语言。JavaScript的出现使得网页和用户之间实现了一种实时的、动态的和交互的关系。但JavaScript自身存在3个弊端,即复杂的文档对象模型(DOM),不一致的浏览器实现和缺乏便捷的开发、调试工具。

2. JavaScript库作用及对比

JavaScript库封装了很多预定义的对象和实用函数,能帮助使用者轻松建立高难度交互的Web2.0特性的富客户端页面,并且兼容各大浏览器。
Prototype,最早成型的JavaScript库之一,对内置对象做了大量的拓展。但由于Prototype成型年代早,从整体上对于面向对象的编程思想把握不是很到位,导致了结构的松散。
Dojo,强大之处在于提供了很多其他JavaScript库所没有提供的功能。例如,离线存储的API、生成图标的组件等等。Dojo是一款非常适合企业级应用的JavaScript库,并得到了IBM、SUN等大公司的支持。但其学习曲线陡,文档不齐全,最严重的是API不稳定。
YUI,由Yahoo公司开发的一套完备的、拓展性良好的富交互网页程序工具集。YUI封装了比较多的功能,如DOM操作和Ajax应用等,也包括几个核心的CSS文件。该库文档及其完备,代码编写非常规范。
Ext JS,简称Ext,原为对于YUI的一个拓展,主要用于创建前端用户界面,现发展到可以利用包括jQuery在内的多种JavaScript框架作为基础库,而Ext作为页面的拓展库来使用。该库侧重界面,本身较为臃肿,且并不完全免费。
MooTools,是一套轻量、简洁、模块化和面向对象的JavaScript框架。语法基本与Prototype一样,但提供了更为强大的功能。完全彻底的面向对象的编程思想,语法简洁直观,文档完善,是一个非常不错的JavaScript库。
jQuery,同为轻量级库,拥有强大的选择器,出色的DOM操作,可靠的事情处理、完善的兼容性和链式操作等。

jQuery 凭借简洁的语法和跨平台的兼容性,极大地简化了JavaScript开发人员遍历HTML文档、操作DOM、处理事件、执行动画和开发Ajax的操作。
jQuery强调的理念是写得少、做得多(write less, do more)。其优势有如下:
1. 轻量级:非常轻巧,约莫几十KB。
2. 强大的选择器:允许开发者使用从CSS1到CSS3几乎所有的选择器,及jQuery独创的高级选择器。
3. 出色的DOM操作的封装:封装了大量常用的DOM操作。
4. 可靠的事件处理机制
5. 完善的Ajax:将所有的Ajax操作封装到了一个函数$.ajax()里。
6. 不污染顶级变量:只建立一个名为jQuery的对象,所有的函数方法都是在这个对象下。
7. 出色的浏览器兼容性
8. 链式操作方式:对发生在同一个jQuery对象上的一组动作,可以直接连写而无需重复获取对象。
9. 隐式迭代
10. 行为层与结构层的分离:可以使用jQuery选择器选中元素,然后直接给元素添加事件。
11. 丰富的插件支持
12. 完善的文档
13. 开源

3. jQuery代码的编写

一般有两种版本,无压缩版,主要用于测试、学习和开发;压缩版主要应用于产品和项目。
jQuery无需安装,只需把下载的js文件放到一个公共位置,当某个页面需要使用jQuery时,在HTML文档中引入该库即可。

在编写jQuery程序之前,首先要明确一点,在jQuery库中,("#foo")和jQuery("#foo")是等价的,$.ajax和jQuery.ajax是等价的。

  1. <script type="text/javascript" src="scripts/jquery-1.12.1.js"></script>
  2. <script type="text/javascript">
  3. $(document).ready(function() {
  4. alert("Helll World!");
  5. });
  6. </script>

其中的

  1. $(document).ready(function(){
  2. //
  3. });

代码的作用类似传统JavaScript中的window.onload()方法,但两者还是有部分区别的。

  window.onload $(document).ready()
执行时机 必须等待网页中所有的内容加载完毕后(包括图片)才能执行 网页中所有DOM结构绘制完毕后执行,可能DOM元素关联的东西并没有加载完
编写个数 不能同时编写多个
以下代码无法正确执行:
window.onload = function(){
alert("test1");
};
window.onload = function(){
alert("test2");
};
结果只会输出“test2”
能同时编写多个
以下代码正确执行:
$(document).ready(function(){
alert("Hello World!");
});
$(document).ready(function(){
alert("Hello again!");
});
结果两次都输出
简化写法 $(document).ready(function(){
//...
});
可以简化为:
$(function(){
//...
});

统一jQuery代码编码风格,对日后代码的维护是非常有利的。

  1. $(document).ready(function(){
  2. $(".level1 > a").click(function(){
  3. $(this).addClass("current")//为当前元素添加“current”样式
  4. .next().show()//下一个元素显示
  5. .parent().siblings().children("a").removeClass("current")//父元素的同辈元素的子元素<a>移除“current”样式
  6. .next().hide();//下一个元素隐藏
  7. return false;
  8. });
  9. });

jQurey代码格式调整,3种注意事项:
(1) 对于同一个对象不超过3个操作的,可以直接写在一行。代码如下:

  1. $("li").show().unbind("click");

(2) 对于同一个对象的较多操作,建议每行写一个操作。代码如下:

  1. $this.removeClass("mouseout")
  2. .addClass("mouseover")
  3. .stop()
  4. .fadeTo("fast".0.6)
  5. .fadeTo("fast".1)
  6. .unbind("click")
  7. .click(function(){
  8. // do something...
  9. });

(3) 对于多个对象的少量操作,可以每个对象写一行,如果设计子元素,可以考虑适当地缩进。例如:

  1. $this.addClass("highlight")
  2. .children("li").show().end()
  3. .siblings().removeClass("highlight")
  4. .children("li").hide();
4. jQuery对象和DOM对象

DOM(Document Object Model,文档对象模型),每份DOM可以表示成一棵树。可以通过JavaScript中的getElementsByTagName或者getELementById方法来获取元素节点。
jQuery对象就是通过jQuery包装DOM对象后产生的对象。如果一个对象是jQuery对象,那么就可以使用jQuery里的方法,例如:

  1. $("#foo").html();//获取id为foo的元素内的html代码。.html()是jQuery里的方法。

这段代码等同于:

  1. document.getElementById("foo").innerHTML;

在jQuery对象里无法使用DOM对象的任何方法,同样在DOM对象中也无法使用jQuery里的方法。

jQuery对象转化成DOM对象,有以下两种方法。
(1) jQuery对象是一个类似数组的对象,可以通过[index]的方法得到相应 的DOM对象:

  1. var $cr = $("#cr");
  2. var cr = $cr[0];
  3. alert(cr.checked);

(2)jQuery本身提供的,通过get(index)方法可以得到相应的DOM对象。

  1. var $cr = $("#cr");
  2. var cr = $cr.get(0);
  3. alert(cr.checked);

DOM对象转化成jQuery对象,用$()把DOM对象包装起来,可以获得jQuery对象。

  1. var cr = document.getElementById("cr");
  2. var $cr = $(cr);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注