本文介绍: 它是一个开源的JavaScript类库常见的JavaScript类库:jQuery、Prototype、ExtJS、Mootools和YUI等。jQuery核心理念write lessdo more(写的更少,做的更多)。jQuery是一个轻量级脚本,其代码非常小巧。语法简洁易懂,学习速度快,文档丰富。支持CSS1~CSS3定义属性选择器。跨浏览器,支持的浏览器包括IE6~IE11和Chrome等。实现了JavaScript脚本和HTML代码分离,便于后期编辑和维护。

1 jQuery快速入门

1.1 什么是jQuery

它是一个开源的JavaScript类库

常见的JavaScript类库:jQuery、Prototype、ExtJS、Mootools和YUI等。

jQuery的核心理念write lessdo more(写的更少,做的更多)。

jQuery的特点:

1.2 下载jQuery

jQuery下载链接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打开链接 -> 右键网页另存为(或者 Ctrl + S)-> 选择保存目录

1.3 使用jQuery

<!-- 方式1:引入本地下载的jQuery -->
<script src="jquery-1.12.4.min.js"></script>
<!-- 方式2:通过CDN(内容分发网络)引入jQuery -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

在HTML页面创建含有文本测试”和属性align=“center”)的<h2>元素

// 原生JavaScript的实现方式
var h2 = document.createElement('h2'); 	// 创建h2元素节点
var text = document.createTextNode('测试'); // 创建文本节点
var attr = document.createAttribute('align');	// 创建属性节点
attr.value = 'center'; 			// 为属性节点赋值
h2.setAttributeNode(attr);  	// 为h2元素添加属性节点
h2.appendChild(text); 		// 为h2元素添加文本节点
// 将h2节点追加body元素的子节点
document.querySelector('body').appendChild(h2);

// jQuery的实现方式
$('<h2 align="center">测试</h2>').appendTo('body');

2 元素操作

2.1 jQuery对象

jQuery对象:是对DOM对象的一层包装

作用:是通过自身提供的一系列快捷功能简化DOM操作复杂度,提高程序的开发效率

解决问题不同浏览器的兼容问题

// 创建一个jQuery对象,该对象包装了document对象
var $doc = $(document);
// 在控制台输出jQuery对象
console.log($doc);       

2.2 jQuery选择器

jQuery选择器类似CSS选择器的机制的一种操作HTML元素的方式。

好处:可以轻松的获取DOM元素。

jQuery选择器的基本语法:$(选择器)。

根据选择获取方式的不同大致可以将其分为以下几类。

2.2.1 基本选择器

jQuery中基本的选择器,常用的分别为:标签选择器、类选择器和ID选择器。

选择器 功能描述 示例
element 根据指定元素名匹配所有元素 $("li")选取所有的<li>元素
.class 根据指定类名匹配所有元素 $(".bar")选取所有classbar的元素
#id 根据指定id匹配一个元素 $("#btn")选取idbtn的元素
selector1,selector2,… 同时获取多个元素 $("li,p,div")同时获取所有<li>、<p>和<div>元素
2.2.2 层级选择器

层级选择器,通过一些指定符号,如空格、>、+和~完成多层级元素之间获取

选择器 功能描述 示例
selector selector1 选取祖先元素下的所有后代元素 $("div .test") 选取<div>下所有class名为test的元素(多级
parent > child 获取父元素下的所有子元素 $(".box >.con") 选取class名为box下的所有class名为con的子元素(一级)
prev + next 获取当前元素紧邻的一下同级元素 $("div + .title")获取紧邻<div>的下一个class名为title的兄弟节点
prev~siblings 获取当前元素后的所有同级元素 $(".bar ~ li")获取class名为bar的元素后的所有同级元素节点<li>
2.2.3 基本过滤选择器

基本过滤选择器,表示对获取到的元素进行筛选,如偶数行中的元素等。

选择器 功能描述 示例
:first 获取指定选择器中第一个元素 $("li :first")获取第1个<li>元素
:last 获取指定选择器中最后一个元素 $("li :last")获取最后1个<li>元素
:even 获取索引偶数指定选择器中奇数行数据,索引默认从0开始 $("li :even")获取所有li元素中,索引偶数的奇数行数据,如索引为0,2,4的第1个、第3个和第5个<li>元素
:odd 获取索引为奇数的指定选择器中偶数数据索引默认从0开始 $("li :odd")获取所有<li>元素中,索引为奇数的偶数数据,如索引为1,3,5的第2个、第4个和第6个<li>元素
:eq(index) 获取索引等于index的元素,默认从0开始 $("li:eq(3)")获取索引为3的<li>元素
:gt(index) 获取索引大于index的元素 $("li:gt(3)")获取索引大于3的所有<li>元素
:lt(index) 获取索引小于index的元素 $("li:lt(3)")获取索引小于3的所有<li>元素
:not(seletor) 获取除指定的选择器外的其他元素 $("li:not(li:eq(3))")获取除索引为3外的所有<li>元素
:focus 匹配当前获取焦点的元素 $("input:focus")匹配当前获取焦点的<input>元素
:animated 匹配所有正在执行动画效果的元素 $("div:not(:animated)")匹配当前没有执行动画<div>元素
:target 选择由文档URI的格式化识别表示目标元素 若URI为http://example.com/#foo,则$("div:target")将获取<div id="foo">元素
2.2.4 内容选择器

根据元素的内容完成指定元素的获取。例如,获取所有元素内容为空<li>等。

选择器 功能描述 示例
:contains(text) 获取内容包含text文本的元素 $("li:contains('js')")获取内容中含“js”的<li>元素
:empty 获取内容为空的元素 $("li:empty")获取内容为空<li>元素
:has(selector) 获取内容包含指定选择器的元素 $("li:has('a')")获取内容中含<a>元素的所有<li>元素
:parent 获取内容不为空的元素(特殊 $("li:parent")获取内容不为空<li>元素
2.2.5 可见性选择器

为了方便开发,jQuery中还提供了可见或隐藏元素的获取。

选择器 功能描述 示例
:hidden 获取所有隐藏元素 $("li:hidden")获取所有隐藏的<li>元素
:visible 获取所有可见元素 $("li:visible")获取所有可见的<li>元素
2.2.6 属性选择器

根据元素的属性获取指定元素的方式。如获取class值为current<div>元素等。

选择器 功能描述 示例
[attr] 获取具有指定属性的元素 $("div[class]")获取含有class属性的所有<div>元素
[attr=value] 获取属性值等于value的元素 $("div[class=current]")获取class等于current的所有<div>元素
[attr!=value] 获取属性值不等于value的元素 $("div[class!=current]")获取class不等于current的所有<div>元素
[attr^=value] 获取属性值以value开始的元素 $("div[class^=box]")获取class属性值以box开始的所有<div>元素
[attr$=value] 获取属性值以value结尾的元素 $("div[class$=er]")获取class属性值以er结尾的所有<div>元素
[attr*=value] 获取属性值包含value的元素 $("div[class*='-']")获取class属性值中含有“-”符号的所有<div>元素
[attr~=value] 获取元素的属性值包含一个value,以空格分隔 $("div[class~='box']")获取class属性值等于“box”或通过空格分隔并含有box的<div>元素,如“t box”
[attr1][attr2]...[attrN] 获取同时拥有多个属性的元素 $("input[id][name$='usr']")获取同时含有id属性和属性值以usr结尾的name属性的<input>元素
2.2.7 子元素选择器
选择器 功能描述
:nthchild(index/even/odd/公式) 索引index默认从1开始,匹配指定index索引、偶数、奇数、或符合指定公式(如2n,n默认从0开始)的子元素
:firstchild 获取第一个子元素
:lastchild 获取最后一个子元素
:onlychild 如果当前元素是唯一的子元素,则匹配
:nth-lastchild(index/even/odd/公式) 选择所有它们父元素的第n个子元素。计数最后一个元素开始到第一个
:nth-of-type(index/even/odd/公式)) 选择同属于一个父元素之下,并且标签名相同的子元素中的第n个子元素
:first-of-type 选择所有相同的元素名称第一个子元素
:last-of-type 选择所有相同的元素名称最后一个子元素
:only-of-type 选择所有没有兄弟元素,且具有相同的元素名称的元素
:nth-last-of-type(index/even/odd/公式) 选择所有它们的父级元素的第n个子元素,计数最后一个元素到第一个

带有“of-type” 与未带有“of-type”项的选择器有一定的区别

2.2.8 表单选择器
选择器 功能描述
:input 获取页面中的所有表单元素,包含<select>以及<textarea>元素
:text 选取页面中的所有文本框
:password 选取所有的密码
:radio 选取所有的单选按钮
:checkbox 选取所有的复选框
:submit 获取submit提交按钮
:reset 获取reset重置按钮
:image 获取type="image"图像
:button 获取button按钮,包括<button></button>type="button"
:file 获取type="file"文件
:hidden 获取隐藏表单
:enabled 获取所有可用表单元素
:disabled 获取所有不可用表单元
:checked 获取所有选中的表单元素,主要针对radiocheckbox
:selected 获取所有选中的表单元素,主要针对select

选择器$("input")$(":input")虽然都可以获取表单项,但是它们表达的含义有一定的区别,前者仅能获取表单标签<input>控件,后者则可以同时获取页面中所有的表单控件,包括表单标签<select>以及<textarea>控件

2.3 元素遍历

操作HTML文档中的DOM元素时,经常需要进行元素遍历

jQuery提供的方法each()

<ul>
    <li>PHP</li><li>iOS</li>
    <li>Java</li><li>UI</li>
</ul>
<script src="jquery-1.12.4.min.js"></script>
<script>
    $('li').each(function(index, element) {
        console.log('第' + (index + 1) + '个:' + $(element).text());
    });
</script>

提示:在回调函数内部还可以直接使用$(this)来表示当前元素。

2.4 元素内容

元素内容的操作有两种:获取和设置

语法 说明
html() 获取第一个匹配元素的HTML内容
html(content) 设置第一个匹配元素的HTML内容
text() 获取所有匹配元素包含的文本内容组合起来的文本
text(content) 设置所有匹配元素的文本内容
val() 获取表单元素的value值
val(value) 设置表单元素的value值
<div class="desc">
    <font color="red"><b>Smiles to the rocky</b></font>
    <ul>
        <li>天生我材必有用,千金散尽还复来。</li>
        <li>行到水穷处,坐看云起时。</li>
    </ul>
</div>
<script src="jquery-1.12.4.min.js"></script>
<script>
    var desc = $('.desc');     // 获取class为desc的元素
    var html = desc.html();    // 获取desc的HTML内容(含有标签
    var text = desc.text();    // 获取desc的文本内容
    console.log(html);
    console.log(text);
</script>

val()方法还可以操作表单(select、radiocheckbox)的选中情况,当要获取的元素是<select>元素时,返回结果一个包含所选值的数组;当要为表单元素设置选中情况时,可以传递数组参数

2.5 元素样式

元素样式操作是指获取或设置元素的style属性。

在jQuery中,可以很方便的设置元素的样式位置尺寸等属性。

例如,通过css()方法可以设置背景色

语法 说明
css(name) 获取第一个匹配元素的样式
css(properties) 将一个键值对形式的对象设置为所有匹配元素的样式
css(name, value) 为所有匹配的元素设置样式
width() 获取第一个匹配元素的当前宽度值(返回数值结果
width(value) 为所有匹配的元素设置宽度样式(可以是字符串数字
height() 获取第一个匹配元素的当前高度值(返回数值结果
height(value) 为所有匹配的元素设置高度样式(可以是字符串数字
offset() 获取元素的位置返回的是一个对象,包含lefttop属性
offset(properties) 利用对象设置元素的位置,必须包含lefttop属性

css()方法传递参数若是对象,则需要去掉CSS属性中的“-”,将第2个单词首字母变为大写

<div style="width:100px; height:100px; background-color: red"></div>
<script src="jquery-1.12.4.min.js"></script>
<script>
    var ele = $('div');
    var w = ele.css('width');
    var h = ele.css('height');
    ele.css({border: '2px solid black', backgroundColor: '#ccc'});
    console.log('div元素的宽:' + w + ',高:' + h);
</script>

2.6 元素筛选

jQuery提供的元素过滤查找方法可提供元素个性化的处理,增强对文档的控制能力。

查找方法

语法 说明
find(expr) 搜索所有与指定表达式匹配的元素
parents([expr]) 取得一个包含所有匹配元素的祖先元素的元素集合(不包含根元素)
parent([expr]) 取得一个包含所有匹配元素的唯一父元素的元素集合
siblings([expr]) 获取所有同级元素(不分上下)
next([expr]) 匹配紧邻的同级的下一个元素
prev([expr]) 匹配紧邻的同级的上一个元素

过滤方法

语法 说明
eq(index) 获取第N个元素
filter(expr|obj|ele|fn) 使用选择器、对象、元素或函数完成指定元素的筛选
hasClass(class) 检查当前的元素是否含有某个特定的类,如果有,则返回true
is(expr) 用一个表达式检查当前选择的元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true
has(expr) 保留包含特定后代的元素,去掉那些不含有指定后代的元素
<div>
    <ul><li>Spring</li><li>summer</li></ul>
    <ul><li>autumn</li><li>winter</li></ul>
</div>
<script src="jquery-1.12.4.min.js"></script>
<script>
    // 获取div下的所有ul
    $uls = $('div').find('ul');
    // 为下标为1的ul设置背景色
    $uls.eq(1).css('background-color', '#ccc');
</script>	

2.7 元素属性

基本属性的操作有三种:获取、设置和删除

语法 说明
attr(name) 取得第一个匹配元素的属性值,否则返回undefined
attr(properties) 将一个键值对形式的对象设置为所有匹配元素的属性
attr(name, value) 为所有匹配的元素设置一个属性值
attr(name, function) 将函数的返回值作为所有匹配的元素的name属性值
prop(name) 取得第一个匹配元素的属性值,否则返回undefined
prop(properties) 将一个键值对形式的对象设置为所有匹配元素的属性
prop(name, value) 为所有匹配的元素设置一个属性值
prop(name, function) 将函数的返回值作为所有匹配的元素的name属性值
removeAttr(name) 从每一个匹配的元素中删除一个属性
  • attr()prop()方法只能获取第一个匹配元素的属性值。

  • 要获取所有匹配元素的属性值,则需要配合jQuery提供的each()方法进行元素遍历

在获取或设置属性时,建议操作元素的状态,如checked、selected或disabled时使用prop()方法,其他的情况使用attr()方法。

虽然attr()方法可完成基本的属性操作,但是对于class属性的操作却不够灵活。

因此,为了方便操作,jQuery专门提供了针对class属性操作的方法。

语法 作用 说明
addClass(class) 追加样式 每个匹配的元素追加指定的类名
removeClass(class) 移除样式 从所有匹配的元素中删除全部或者指定的类
toggleClass(class) 切换样式 判断指定类是否存在存在删除,不存在添加
hasClass(class) 判断样式 判断元素是否具有class样式

2.8 练习作业

3 DOM节点操作

3.1 节点追加

节点追加指的是在现有的节点树中,进行父子或兄弟节点的追加

语法 作用 说明
父子节点 append(content) content内容追加到匹配的元素内容尾部
父子节点 prepend(content) content内容追加到匹配的元素内容头部
父子节点 appendTo(content) 把匹配到的内容插入content内容的尾部
父子节点 prependTo(content) 把匹配到的内容插入到content内容的头部
兄弟节点 after(content) 把content内容插入到元素的尾部
兄弟节点 before(content) 把content内容插入到元素的头部
兄弟节点 insertAfter(content) 把所有匹配的内容插入到content元素的尾部
兄弟节点 insertBefore(content) 把所有匹配的内容插入到content元素的头部
  • 父子节点添加指的是在匹配到的元素内部添加指定的content内容。
  • 兄弟节点指的是在匹配到的元素外部添加指定的content内容。

3.2 节点替换

节点替换是指将选中的节点替换为指定的节点。

语法 说明
replaceWith(content) 将所有匹配的元素替换成指定的HTML或DOM元素
replaceAll(selector) 用匹配的元素替换掉所有selector匹配到的元素

replaceWith()方法的参数是一个函数时,它的返回值类型必须是字符串类型用于完成指定元素的替换操作。

3.3 节点删除

语法 说明
empty() 清空元素的内容,但不删除元素本身
remove([expr]) 清空元素的内容,并删除元素本身(可选参数expr用于筛选元素)
detach([expr]) 从DOM中删除所有匹配的元素(保留所有绑定事件、附加的数据等)
  • empty()方法仅能删除匹配元素的文本内容,而元素节点依然存在
  • remove()法则可以同时删除匹配元素本身和文本内容。

3.4 节点复制

语法 说明
clone([false]) 复制匹配的元素并且选中这些复制副本默认参数为false
clone(true) 参数设置为true时,复制元素的所有事件处理

开发中若在复制元素节点时,想要同时复制该节点的所有事件处理,则可以将clone()方法的操作设置为true,否则节点复制时使用默认操作false即可

3.5 练习作业

4 事件操作

4.1 常用事件

标签中通过属性设置事件,每个属性都由一个on和事件名组成。例如点击事件对应的属性为onclick

在jQuery中则可直接使用其提供的与事件类型同名的方法。例如点击事件对应的方法为click()

这些事件方法允许重复绑定处理程序,按照绑定顺序依次执行

省略参数,则表示触发事件。

分类 方法 说明
表单事件 blur([[data],function]) 当元素失去焦点时触发
表单事件 focus([[data],function]) 当元素获得焦点时触发
表单事件 change([[data],function]) 当元素的值发生改变时触发
表单事件 focusin([data],function) 在父元素上检测子元素获取焦点的情况
表单事件 focusout([data],function) 在父元素上检测子元素失去焦点的情况
表单事件 select([[data],function]) 文本框(包括<input><textarea>)中的文本被选中触发
表单事件 submit([[data],function]) 当表单提交触发
键盘事件 keydown([[data],function]) 键盘按键按下触发
键盘事件 keypress([[data],function]) 键盘按键(Shift等非字符键除外)被按下触发
键盘事件 keyup( [[data],function ]) 键盘按键被松开时触发
鼠标事件 mouseover([[data],function]) 鼠标移入对象时触发
鼠标事件 mouseout([[data],function]) 鼠标从元素上离开时触发
鼠标事件 click([[data],function]) 单击元素时触发
鼠标事件 dblclick([[data],function]) 双击元素时触发
鼠标事件 mousedown([[data], function]) 鼠标指针移动到元素上方,并按下鼠标按键时触发
鼠标事件 mouseup([[data], function]) 当在元素上放松鼠标按钮时,会被触发
浏览器事件 scroll([[data],function]) 滚动条发生变化时触发
浏览器事件 resize([[data], function]) 当调整浏览器窗口大小时会被触发
$('input[type=text]').focus(function() { // 文本框获取焦点
    var tips = $('<span></span>');
    tips.html('请按要求输入');
    $('input:focus').after(tips);
});
$('input[type=text]').blur(function() {  // 文本框失去焦点
    $(this).next().remove();
});
// div块的移动
// 事件对象.which:获取当前按下键盘的对应码值keyCode
// 通过offset()获取当前按下键盘时div元素的位置(lefttop值)
// 根据码值修改div元素位置( lefttop值)
// 提示:37(左)、38(上)、39(右)、40(下)
$(document).keydown(function(event) {
    var opt = event.which;            // 获取当前按下键盘的对应码值keyCode
    var item = $('.boxes');           // 获取操作的元素
    var left = item.offset().left;    // 获取元素距离文档左侧的位置,单位像素
    var top = item.offset().top;      // 获取元素距离文档上面的位置,单位像素
    switch(opt) {
        case 37: item.offset({left: left - 1, top: top}); break;    // 左
        case 38: item.offset({left: left, top: top - 1}); break;    // 上
        case 39: item.offset({left: left + 1, top: top}); break;    // 右
        case 40: item.offset({left: left, top: top + 1}); break;    // 下
    }
});
// 鼠标移入
$('.hit').mouseover(function() {
    $(this).css('background-color', 'green');
});
// 鼠标移出
$('.hit').mouseout(function() {
    $(this).css('background-color', '');
});

4.2 页面加载事件

类比选项 window.onload $(document).ready()
执行时机 必须等待网页中的所有内容加载完成后(包括外部元素,如图片)才能执行 网页中的所有DOM结构绘制完成后就执行(可能关联内容并未加载完成
编写个数 不能同时编写多个 能够同时编写多个
简化写法 $()

jQuery中的ready与JavaScript中的onload相比,不仅可以在页面加载后立即执行,还允许注册多个事件处理程序

// jQuery中的页面加载事件方法有3种语法形式,具体如下
$(document).ready(function() {  });  // 语法方式1
$().ready(function() {  });		     // 语法方式2
$(function() {  });			         // 语法方式3

4.3 事件绑定切换

事件处理机制,即事件绑定和事件切换统一事件处理的各种方法。

语法 说明
on(events,[selector],[data],function) 在匹配元素上绑定一个或多个事件处理函数
off(events,[selector],[function]) 在匹配元素上移除一个或多个事件处理函数
one(events,[data],function) 为每个匹配元素的事件绑定一次性的处理函数
trigger(type,[data]) 在每个匹配元素上触发某类事件
triggerHandler(type,[data]) 同trigger(),但浏览器默认动作将不会被触发
hover([over,]out) 元素鼠标移入与移出事件切换
  • 参数events表示事件名(多个用空格分隔)。
  • 参数selector表示选择器。
  • 参数data表示将要传递事件处理函数function的数据。
  • 参数type表示为元素添加的事件类型(多个用空格分隔)。
  • 参数over和out分别表示鼠标移入移出时的事件处理函数。
// 事件的绑定
$('div').on('click', function() {
    console.log('已完成单点击');
});
// 事件的取消
$('div').off('click');
// 绑定单次事件
$('div').one('click', function() {
    console.log('已完成1次单点击');
});
// 多个事件绑定同一个函数
$('div').on('mouseover mouseout', function() {
    console.log('鼠标移入或移出');
});
// 多个事件绑定不同的函数
$('div').on({
    mouseover: function() {
        console.log('鼠标移入');
    },
    mouseout: function() {
        console.log('鼠标移出');
    }
});
// 为以后创建的元素委派事件
$('body').on('click', 'div', function() {
    console.log('收到');
});
//测试:创建<div>元素
$('body').append('<div>测试</div>');
// 鼠标移入移出事件切换
$('div').hover(function() {
    console.log('鼠标移入')
}, function() {
    console.log('鼠标移出');
});

on()方法与off()方法是jQuery从1.7版本开始新增的方法。jQuery官方推荐使用on()方法进行事件绑定,在新版本中已经取代了bind()delegate()live()方法。

4.4 练习作业

5 动画特效

5.1 常用动画

分类 方法 说明
基本特效 show([speed,[easing],[fn]]) 显示隐藏的匹配元素
基本特效 hide([speed,[easing],[fn]]) 隐藏显示的匹配元素
基本特效 toggle([speed],[easing],[ fn]) 元素显示与隐藏切换
滑动特效 slideDown([speed],[easing],[ fn]) 垂直滑动显示匹配元素(向下增大)
滑动特效 slideUp([speed,[easing],[ fn]]) 垂直滑动显示匹配元素(向上减小)
滑动特效 slideToggle([speed],[easing],[ fn]) 在slideUp()和slideDown()两种效果间的切换
淡入淡出 fadeIn([speed],[easing],[ fn]) 淡入显示匹配元素
淡入淡出 fadeOut([speed],[easing],[ fn]) 淡出隐藏匹配元素
淡入淡出 fadeTo([[speed],opacity,[easing],[ fn]]) 以淡入淡出方式将匹配元素调整到指定的透明度
淡入淡出 fadeToggle([speed,[easing],[ fn]]) fadeIn()和fadeOut()两种效果间的切换

5.2 自定义动画

方法 说明
animate(params [,speed] [,easing] [,fn]) 用于创建自定义动画的函数
$.speed([speed] [,settings]) 创建一个包一组属性的对象用来定义自定义动画
queue([queueName]) 显示被选元素上要执行的函数队列
delay(speed [,queueName]) 设置一个延时来推迟执行队列中之后的项目
clearQueue([queueName]) 从尚未运行的队列中移除所有项目
dequeue([queueName]) 队列移除下一个函数,然后执行函数
finish([queueName]) 停止当前正在运行的动画,删除所有排队的动画,并完成匹配元素所有的动画
stop([clearQueue] [, jumpToEnd]) 停止所有在指定元素上正在运行的动画
<input id="btn" type="submit" value="开始动画"><div></div>
<script>	
    $('#btn').click(function () {
        $('div').css({background: 'red', width: 0, height: 0});
        var params = {width: '100px', height: '100px'};
        var settings = $.speed(2000, 'linear');
        $('div').animate(params, settings);
    });
</script>
// 动画队列
$('div').show('slow')
    .animate({left: '+=200'}, 2000)
    .animate({left: '-=200'}, 1500)
    .slideUp('normal', runQue);
// 队列长度
$('div').queue('fx').length;
div.show('slow')
    .animate({left: '+=200'}, 2000)
    .queue(function() {
    // 为队列添加额外操作
    $(this).css('background', 'green').dequeue();
})
    .animate({left: '-=200'}, 1500)
    .slideUp('normal', runQue)
    .queue(function() {
    // 为队列添加额外操作
    $(this).css('background', 'red').dequeue();
});

5.3 练习作业

6 jQuery操作Ajax

传统的Ajax是通过XMLHttpRequest实现的,不仅代码复杂,而且浏览器兼容问题比较多。

jQuery中通过对Ajax操作的封装极大简化了Ajax操作的开发过程

分类 方法 说明
高级应用 $.get(url[,data][,fn][,type]) 通过远程HTTP GET请求载入信息
高级应用 $.post(url[,data][,fn][, type]) 通过远程HTTP POST请求载入信息
高级应用 $.getJSON(url[,data][,fn]) 通过HTTP GET请求载入JSON数据
高级应用 $.getScript(url[,fn]) 通过HTTP GET请求载入并执行一个JavaScript文件
高级应用 元素对象.load(url[,data] [,fn]) 载入远程HTML文件代码并插入至DOM中
底层应用 $.ajax(url[,options]) 通过HTTP请求加载远程数据
底层应用 $.ajaxSetup(options) 设置全局Ajax默认选项
选项名称 说明
url 处理Ajax请求的服务器地址
data 发送Ajax请求时传递的参数,字符串类型
success Ajax请求成功时所触发的回调函数
type 发送的HTTP请求方式,如getpost
datatype 期待的返回值类型,如xmljson、script或html数据类型
async 是否异步,true表示异步false表示同步默认值为true
cache 是否缓存,true表示缓存false表示不缓存默认值为true
contentType 请求头,默认值application/x-wwwformurlencoded; charset=UTF-8
complete 服务器URL接收完Ajax请求传送的数据后触发的回调函数
jsonp 在一个jsonp请求中重写回调函数的名称
$.post('index.php', {'id': 2, 'name': 'JS'}, function(msg) {
    console.log(msg.id + '-' + msg.name);    // 输出结果:2-JS
}, 'json');

上述代码表示处理当前Ajax请求的地址同级目录下的index.php,在Ajax请求成功后,接收index.php返回的JSON格式的数据并在控制台进行输出

除此之外,在jQuery中还为操作Ajax额外的提供了一些辅助的函数以及相关的Ajax事件处理方法,方便开发。

分类 方法/函数 说明
辅助函数 $.param(obj) 创建数组或对象的序列化表示
辅助函数 serialize() 通过序列化表单值,创建URL编码文本字符串
辅助函数 serializeArray() 通过序列化表单值,创建对象数组(名称和值)
Ajax事件 ajaxComplete(fn) Ajax请求完成时触发的事件执行函数
Ajax事件 ajaxError(fn) Ajax请求发生错误时触发的事件执行函数
Ajax事件 ajaxSend(fn) Ajax请求发送前触发的事件执行函数
Ajax事件 ajaxStart(fn) Ajax请求开始时触发的事件执行函数
Ajax事件 ajaxStop(fn) Ajax请求结束时触发的事件执行函数
Ajax事件 ajaxSuccess(fn) Ajax请求成功时触发的事件执行函数
// 序列化对象
var data = {'id': 2, 'name': 'Lucy', skill: ['PHP', 'JS']};
var seri_data = $.param(data);
var deseri_data = decodeURIComponent(seri_data);
// 输出结果:id=2&amp;name=Lucy&amp;skill%5B%5D=PHP&amp;skill%5B%5D=JS
console.log(seri_data); 
// 输出结果:id=2&amp;name=Lucy&amp;skill[]=PHP&amp;skill[]=JS
console.log(deseri_data);

上述代码表示处理当前Ajax请求的地址是同级目录下的index.php,在Ajax请求成功后,接收index.php返回的JSON格式的数据并在控制台进行输出

// 序列化表单数据
$('input[type=button]').on('click', function () {
    console.log($('form').serialize());
    console.log($('form').serializeArray());
});

Ajax各个事件处理的先后顺序ajaxStart() > ajaxSend() > ajaxSuccess()、ajaxError() > ajaxComplete() > ajaxStop()

根据Ajax请求是否发生错误在Ajax发送后执行ajaxSuccess()还是ajaxError()方法进行相关的处理。

$(document).ajaxError(function() {
    console.log('ajaxError');
});
$.post('index.php', {'id': 2, 'name': 'JS'}, function(msg) {
    console.log(msg.id + '-' + msg.name);
}, 'xml');

7 插件机制

7.1 自定义插件

  • 封装jQuery对象方法

    // 在插件封装1个方法
    (function($){
        $.fn.方法名 = function() {
            // 实现插件代码
            ……
        };
    })(jQuery);
    
    • .

      f

      n

      j

      Q

      u

      e

      r

      y

      原型对象(相当于

      .fn是jQuery的原型对象(相当于

      .fnjQuery原型对象(相当于.prototype)。

    • 通过“$.fn.方法名”的方式将封装的功能方法对每一个jQuery实例都有效,成为jQuery的插件
    • jQuery的简写

      ”是可以被修改的,为了避免影响插件中的代码,建议插件方法放在“

      (

      f

      u

      n

      c

      t

      i

      o

      n

      (

      ”是可以被修改的,为了避免影响插件中的代码,建议将插件方法放在“`(function(

      是可以被修改的,为了避免影响到插件中的代码,建议将插件方法放在“‘(function(){……})(jQuery);`”这个包装函数中,该函数的参数$就表示jQuery全局对象。

    // 在插件中封装多个方法
    jQuery.fn.extend({
        方法名1:function(参数列表) {
            // 实现插件的代码
            ……
        },
        方法名2:function(参数列表) {
            // 实现插件的代码
            ……
        }
    });
    
    • 若要在一个插件中封装多个方法,则可以借助extend()方法,为该方法传递对象类型的参数。
    • 参数的设置按照JavaScript对象语法的编写方式即可实现多个方法的封装。
    • 插件文件的名称建议遵循“jquery.插件名.js”的命名规则,防止与其他JavaScript库插件混淆
  • 定义全局函数

    // 定义全局函数的插件
    jQuery.extend({
        方法名1: function(参数列表){
            // 实现插件的代码
            ……
        },
        方法2: function(参数列表){
            // 实现插件的代码
            ……
        }
    });
    
  • 定义选择器

    $.expr[":"].方法名称 = function(obj) {
        // 自定义选择器代码
        return 匹配HTML元素的条件;
    };
    

7.2 jQuery插件库

随着jQuery的发展,诞生了许多优秀的插件。

网站地址为:http://plugins.jquery.com/。

通过在搜索框中输入插件名即可搜索需要的插件。

7.3 jQuery UI

<!-- 引入所需文件 -->
<script src="jQuery-1.12.4.min.js"></script>
<script src="jquery-ui/jquery-ui.min.js"></script>
<link rel="stylesheet" href="jquery-ui/jquery-ui.css">

<div id="datepicker"></div>

<!-- 实例datepicker -->
<script>
    $('#datepicker').datepicker();
    
    // 自定义日历显示样式
    $('#datepicker').datepicker({
        changeMonth: true,      	// 下拉列表方式选择月份
        changeYear: true,       	// 下拉列表方式选择年
        firstDay: 1,            	// 星期显示顺序为:“Mo Tu We Th Fr Sa Su”
        showOtherMonths: true, // 当前月中空白日期利用相邻日期填充
    });
    
    // 自定义中文显示
    var m = ['一月', '二月', '三月', '四月', '五月', '六月','七月', '八月', '九月', '十月', '十一月', '十二月'];
    var d = ['日', '一', '二', '三', '四', '五', '六'];
    $('#datepicker').datepicker({
        ……
        monthNamesShort: m,
        dayNamesMin: d,
    });
</script>

在实际项目中若只做中文开发,则每次使用时都配置这些属性会比较麻烦,建议将中文相关配置保存到一个JavaScript文件中,每次使用时直接引用即可

7.4 练习作业

  • 自定义全选与反选插件
    • 编写表格展示数据,为其提供“全选”、“反选”和“全不选”操作按钮
    • 引入jQuery文件以及自定义的插件文件(待编写)。
    • 编写自定义插件文件,利用封装jQuery对象方法的方式实现插件。
    • 在HTML中,调用插件封装的方法,实现全选、反选以及全不选的功能。

ery-ui.min.js”>


> 在实际项目中若只做中文开发,则每次使用时都配置这些属性会比较麻烦,建议将中文相关配置保存到一个JavaScript文件中,每次使用时直接引用即可。



### 7.4 练习作业

- 自定义全选与反选插件
  - 编写表格展示数据,为其提供“全选”、“反选”和“全不选”操作按钮。
  - 引入jQuery文件以及自定义的插件文件(待编写)。
  - 编写自定义插件文件,利用封装jQuery对象方法的方式实现插件。
  - 在HTML中,调用插件封装的方法,实现全选、反选以及全不选的功能。


原文地址:https://blog.csdn.net/zhangchen124/article/details/133383936

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_33288.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注