jQuery

jQuery

1. 介绍

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

jQuery它是javascript的一个轻量级框架,对javascript进行封装,它提供了很多方便的选择器。供你快速定位到需要操作的元素上面去。还提供了很多便捷的方法

jQuery最大的特点是:浏览器兼容,链式编程,隐式迭代,丰富的选择器操作。

1.1 jQuery环境

Jquery它是一个JavaScript类库,要想使用它,必须先引入;jQuery库的类型分为两种,分别是生产版(最小化和压缩版)和开发版(未压缩版),它们的区别如表1-1所示。

表1-1 几种jQuery库类型对比

名  称 大  小 说  明
jquery.js(开发版) 约229 KB 完整无压缩版本,主要用于测试、学习和开发
jquery.min.js(生产版) 约31 KB 经过工具压缩或经过服务器开启Gzip压缩 主要应用于产品和项目

1.2 jQuery简单案例

    
    
  1. 引入jQuery的js文件
  2. 文件初始化代码$(function () {});与原生的window.onload()代码类似,不过还是有区别的,对它们进行了简单对比。
window.onload $(document).ready()
执行时机 必须等到页面中所有的文件都加载完毕才会执行(DOM结构、js文件、图片等) 网页中的DOM结构绘制完毕后就可以执行
编写的个数 不能同时的编写多个,当有多个window.onload=function(){};时,只有最后的一个有作用 能同时编写多个,都可以执行
简化写法 $(function(){、、、});

1.3 jQuery代码风格

虽然jQuery做到了行为和内容的分离,但jQuery代码本身也应该拥有良好的层次结构及规范,这样才能进一步改善代码的可读性和可维护性

(1)对于同一个对象不超过3个操作的,可以直接写成一行

(2)对于同一个对象的较多操作,建议每行写一个操作

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

(4)为代码添加注释

1.4 jQuery对象和DOM对象

jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的。如果一个对象是jQuery对象,那么就可以使用jQuery里的方法。例如:

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

这段代码等同于:

document.getElementById('foo').innerHtml()

在jQuery对象中无法使用DOM对象的任何方法。例如$("#id").innerHTML$("#id").checked之类的写法都是错误的,可以用$("#id").html()$("#id").attr("checked")之类的jQuery方法来代替。同样,DOM对象也不能使用jQuery里的方法。例如document.getElementById("id").html()也会报错,只能用document.getElementById("id").innerHTML语句。

jQuery对象和DOM对象是可以相互转化的

  • jQuery对象转化为DOM对象
var $cr = $('#cr');  
// 第一种方法
var cr  = $cr[0];
// 第二种方法
var cr  = $cr.get(0);
  • DOM对象转化为jQuery对象
var cr = document.getElementById('cr');
// 转化为jQuery对象
var $cr = $(cr);

2. 选择器

jQuery中的选择器完全继承了CSS的风格。利用jQuery选择器,可以非常便捷和快速地找出特定的DOM元素,然后为它们添加相应的行为,而无需担心浏览器是否支持这一选择器。学会使用选择器是学习jQuery的基础,jQuery的行为规则都必须在获取到元素后才能生效。

需要注意的是,$('#tt')获取的永远是对象,即使网页上没有此元素。因此当要用jQuery检查某个元素在网页上是否存在时,不能使用以下代码:

if($('tt')){
    //do something
}

应该根据元素的长度判断

if($('tt').length>0){
    //do something
}

2.1 基本选择器

基本选择器是jQuery中最常用的选择器,也是最简单的选择器,它通过元素id、class和标签名等来查找DOM元素。在网页中,每个id名称只能使用一次,class允许重复使用。基本选择器的介绍说明如表2-1所示。

2-1 基本选择器

选择器 描述 返回 示例
#id 根据给定的id匹配一个元素 单个元素 $('#test')选取id为test的元素
.class 根据给定的类名匹配元素 集合元素 $('.test')选取class为test的元素
element 根据给定元素名匹配元素 集合元素 $(p)选取所有的

元素

2.2 层次选择器

如果想通过DOM元素之间的层次关系来获取特定元素,例如后代元素、子元素、相邻元素和同辈元素等那么层次选择器是一个非常好的选择。层次选择器的介绍说明如表2-2所示

选择器 描述 返回 示例
$(ancestor descendent) 选取ancestor(祖先)里面的所有descendent(后代)元素 集合元素 $(div span)选择div里的所有的span标签
$(parent->child) 选取parent下的child(子元素),不包括孙子代 集合元素 $(div-> span)`选择div里的所有的子span标签
$(pre+next) 选取紧接在pre元素后面的next元素 集合元素 $(.one+div)选取class为one的下一个
同辈元素
$(pre~siblings) 选取pre元素之后的所有siblings元素 集合元素 $(#two~div)选取id为two的元素后面的所有
同辈

可以使用next()方法来替代pre+next

选择器 方法
等价关系 $('.one+div') $('.one').next('div')

可以使用nextAll()方法来代替$('prev〜siblings')选择器

选择器 方法
等价关系 $('.pre ~ div') $('.pre').nextAll('div')

在此我将后面要讲解的siblings()方法拿出来与$("#prev〜div")选择器只能选择“prev”元素后面的同辈

元素。而siblings()方法与前后位置无关,只要是同辈节点就都能匹配。

2.3 过滤选择器

过滤选择器主要是通过特定的过滤规则来筛选出所需的DOM元素,过滤规则与CSS中的伪类选择器语法相同,即选择器都以一个冒号(:)开头。按照不同的过滤规则,过滤选择器可以分为基本过滤、内容过滤、可见性过滤、属性过滤、子元素过滤和表单对象属性过滤选择器。这里只对最为常用的过滤器进行介绍

2.3.1 基本过滤选择器

选择器 描述 返回 示例
:first 选取第一个元素 单个元素 $('div:first'):选取所有
中的第一个元素
:last 选取最后一个元素 单个元素 $('div:last'):选取所有
中的最后一个元素
:not(selector) 去除于给定选择器匹配的元素 集合元素 $(input:not(myClass):选取classs不是myClass的元素
:even 选取索引值为偶数的元素(索引从0开始) 集合元素 $(input:even:选取索引是偶数的元素
:odd 选取索引值为奇数的元素(索引从0开始) 集合元素 $(input:odd):选取索引是奇数的元素
:eq(index) 选取索引值等于index的元素(index从0开始) 集合元素 $(input:eq(1)):选取索引等于1的元素
:gt(index) 选取索引值大于index的元素(index从0开始) 集合元素 $(input:gt(1)):选取索引大于1的元素
:lt(index) 选取索引值小于index的元素(index从0开始) 集合元素 $(input:lt(1)):选取索引大于1的元素

2.3.2 内容过滤器

选择器 描述 返回 示例
:contains(text) 选取含有文本内容为“text”的元素 集合元素 $("div.contains('我')")选择文本含有‘我’的
元素
:has(selector) 选择含有选择器所匹配的元素的元素 集合元素 $(div:has(p))选取包含

元素的

元素
:empty 选择不包含子元素或者是文本的元素 集合元素 $(div:empty)选取不包括子元素(文本元素)的
空元素

2.3.3 可见性过滤选择器

可见性过滤选择器是根据元素的可见和不可见状态来选择相应的元素

选择器 描述 返回 示例
:hidden 选取所有不可见元素 集合元素 $(:hidden)选取所有的不可见的元素。包括,
等元素。如果只想选取元素,可以使用$(input:hidden)
:visibe 选取所有可见元素 集合元素 $("div:visibe")选取所有可见的
元素

2.3.4 属性过滤选择器

选择器 描述 返回 示例
[attribute] 选取拥有此属性的元素 集合元素 $("div[id]")选取拥有属性为id的
元素
[attribute=value] 选取属性值为value的元素 集合元素 $("div[title=test]")选取拥有属性title的值为text的
元素
[attribute*=value] 选取属性值含有value的元素 集合元素 $("div[title*=test]")选取拥有属性title含有值为test的
元素
[attribute^=value] 选取属性值以value开头的元素 集合元素 $("div[title^=test]")选取拥有属性title值以test开头的
元素
[attribute$=value] 选取属性值以value结尾的元素 集合元素 $("div[title$=test]")选取拥有属性title值以test结尾的
元素

2.3.5 子元素选择器

子元素过滤选择器的过滤规则相对于其它的选择器稍微有些复杂,不过没关系,只要将元素的父元素和子元素区分清楚,那么使用起来也非常简单。另外还要注意它与普通的过滤选择器的区别。

选择器 描述 返回 示例
:nth-child(index/even/odd/equation) 选取父元素下的第index个子元素或者奇偶元素(index从1开始) 集合元素 :eq(index)只匹配一个元素,而:nth-child(index)为每一个父元素匹配子元素,并且index的值 从1开始的
:first-child 选取父元素的第一个元素 集合元素 :first只返回单个元素,而:first-child选择符将为每一个父元素匹配子元素。例如$(ul li:first-child)选取每个
    中第一个
  • 元素
:last-child 选取父元素的最后一个元素 集合元素 :last只返回单个元素,而:last-child选择符将为每一个父元素匹配子元素。例如$(ul li:first-child)选取每个
    中最后一个
  • 元素

:nth-child()选择器是很常用的子元素过滤选择器,详细功能如下。

(1):nth-child(even)能选取每个父元素下的索引值是偶数的元素。

(2):nth-child(odd)能选取每个父元素下的索引值是奇数的元素。

(3):nth-child(2)能选取每个父元素下的索引值等于2的元素。

(4):nth-child(3n)能选取每个父元素下的索引值是3的倍数的元素,(n从1开始)。

(5):nth-child(3n+1)能选取每个父元素下的索引值是(3n+1)的元素。(n从1开始)

2.3.6 表单对象属性过滤选择器

此选择器主要是对所选择的表单元素进行过滤,例如选择被选中的下拉框,多选框等元素。表单对象属性

选择器 描述 返回 示例
:enabled 选取所有可用的元素 集合元素 $(#form1 :enabled)选择id为“form1”的表单内的所有可用元素
:disabled 选取所有不可用的元素 集合元素 $(#form2 :disabled)选择id为“form2”的表单内的所有不可用元素
:checked 选取所有可用的元素(单选框,复选框) 集合元素 $("input:checked")选择所有被选中的元素
:selected 选取所有被选中的选项元素 集合元素 $(select option:selected)选取所有被选中项的元素

2.4 表单选择器

为了使用户能够更加灵活地操作表单,jQuery中专门加入了表单选择器。利用这个选择器,能极其方便地获取到表单的某个或某类型的元素。

选择器 描述 返回 示例
:input 选取所有的