2020 年了,jQuery 是否还值得学
2020 年了,jQuery 是否还值得学
jQuery 是一个 JavaScript 库,极大地简化了原生 JavaScript 编程,源码值得学习。
可以先了解 jQuery 的一些基本用法,然后再去看源码,这样会更容易理解。
初识 jQuery
jQuery 的两把利器
使用 jQuery 核心函数
使用 jQuery 对象
jQuery 对象
练习
一、初识 jQuery
1、一个 JS 库
一个优秀的 JS 函数库
使用了 jQuery 的网站超过90%中大型 WEB 项目开发首选
Write Less, Do More!!!
2、操作更方便
HTML 元素选取(选择器)
HTML 元素操作
CSS 操作
HTML 事件处理
JS 动画效果
链式调用
读写合一
浏览器兼容
易扩展插件
Ajax 封装
......
封装简化 DOM 操作(CRUD)/ Ajax
强大选择器:方便快速查找 DOM 元素
隐式遍历(迭代):一次操作多个元素
读写合一:读数据/写数据用的是一个函数
事件处理、链式调用、DOM 操作、样式操作……
3、jQuery 的使用

(1) 引入库:本地引入、CDN 远程引入,测试版、生产版(压缩版)
(2) 使用库:函数($/jQuery)、对象($xxx)
二、jQuery 的 2 把利器
jQuery 函数:
$/jQueryjQuery 向外暴露的就是 jQuery 函数,可以直接使用
当成一般函数使用:
$(param)或jQuery(param)param 是 Function:相当于
window.onload = function(文档加载完成的监听)param 是选择器字符串:查找所有匹配的 DOM 元素,返回包含所有 DOM 元素的 jQuery 对象
param 是 DOM 元素:将 DOM 元素对象包装为 jQuery 对象返回
$(this)param 是标签字符串:创建标签 DOM 元素对象并包装为 jQuery 对象返回
当成对象使用:
$.xxx$.each(obj/arr, function(key, value){}):隐式遍历 obj/arr$.trim(str):去除字符串两端的空格
jQuery 对象
包含所有匹配的 n 个 DOM 元素的伪数组对象
执行
$()返回的就是 jQuery 对象基本行为:
length/size():得到 DOM 元素的个数[index]:得到指定下标对应的 DOM 元素each(function(index, domEle){}):遍历所有 DOM 元素index():得到当前 DOM 元素在所有兄弟中的下标
1、jQuery 核心函数
简称: jQuery 函数(
$/jQuery)jQuery 库向外直接暴露的就是
$/jQuery引入 jQuery 库后,直接使用
$即可当函数用:
$(xxx)当对象用:
$.xxx()
理解:
即
$或jQueryjQuery 定义了这个全局的函数供我们调用
它既可作为一般函数调用,且传递的参数类型不同/格式不同功能就完全不同
也可作为对象调用其定义好的方法,此时
$就是一个工具对象
作为函数调用:
参数为函数
$(fun)参数为选择器(selector)字符串
$("#div1")参数为 DOM 对象
$(div1Ele)参数为 HTML 标签字符串
$("<div>")
作为对象使用:
发送 ajax 请求的方法
$.ajax()$.get()$.post()......
其它工具方法
$.each()$.trim()$.parseJSON()......
2、jQuery 核心对象
简称:jQuery 对象
得到 jQuery 对象:执行 jQuery 函数返回的就是 jQuery 对象
使用 jQuery 对象:
$obj.xxx()
理解:
即执行 jQuery 核心函数返回的对象
jQuery 对象内部包含的是 DOM 元素对象的伪数组(可能只有一个元素)
jQuery 对象拥有很多有用的属性和方法,让程序员能方便的操作 DOM
属性/方法:
基本行为
size()/length:包含的 DOM 元素个数[index]/get(index):得到对应位置的 DOM 元素each():遍历包含的所有 DOM 元素index():得到在所在兄弟元素中的下标
属性:操作内部标签的属性或值
CSS:操作标签的样式
文档:对标签进行增删改操作
筛选:根据指定的规则过滤内部的标签
事件:处理事件监听相关
效果:实现一些动画效果
三、使用 jQuery 核心函数
1、选择器
(1) 说明
选择器本身只是一个有特定语法规则的字符串,没有实质用处
它的基本语法规则使用的就是 CSS 的选择器语法,并对基进行了扩展
只有调用
$(),并将选择器作为参数传入才能起作用$(selector)作用:根据选择器规则在整个文档中查找所有匹配的标签的数组,并封装成 jQuery 对象返回(用来查找特定页面元素)
(2) 分类
基本选择器
#id:id 选择器element:元素选择器.class:类选择器*:任意标签selector1,selector2,selectorN:取多个选择器的并集(组合选择器)selector1selector2selectorN:取多个选择器的交集(相交选择器)
层次选择器(查找子元素、后代元素、兄弟元素的选择器)
ancestor descendant:在给定的祖先元素下的后代元素中匹配元素parent > child:在给定的父元素下的子元素中匹配元素prev + next:匹配所有紧接在 prev 元素后的 next 元素prev ~ siblings:匹配 prev 元素之后的所有 siblings 元素
过滤选择器(在原有选择器匹配的元素中进一步进行过滤的选择器)
基本
:first:last:eq(index):lt:gt:odd:even:not(selector):header:animated:focus
内容
:contains(text):empty:has(selector):parent
可见性
:hidden:visible
属性
[attribute][attrName=value][attribute!=value][attribute^=value][attribute$=value][attribute*=value][attrSel1][attrSel2][attrSelN]
练习:表格隔行变色

表单选择器
表单
:input:text:checkbox:radio
表单对象属性
:checked:选中的
2、$ 工具方法
$ 工具方法$.each():遍历数组或对象中的数据$.trim():去除字符串两边的空格$.type(obj):得到数据的类型$.isArray(obj):判断是否是数组$.isFunction(obj):判断是否是函数$.parseJSON(json):解析 json 字符串转换为 js 对象/数组
练习:多 Tab 点击切换

3、ajax
ajax()get()post……
四、使用 jQuery 对象
1、属性/文本
操作标签的属性, 标签体文本
操作任意属性
attr(name)/attr(name, value): 读写非布尔值的标签属性prop(name)/prop(name, value): 读写布尔值的标签属性removeAttr(name)/removeProp(name): 删除属性
操作 class 属性
addClass(classValue):添加 classremoveClass(classValue):移除指定 class
操作HTML代码/文本/值
val()/val(value):读写标签的valuehtml()/html(htmlString):读写标签体文本
练习表格隔行变色改进--->odd样式类

2、CSS
(1) style 样式(设置 CSS 样式/读取 CSS 值)
css(styleName): 根据样式名得到对应的值css(styleName, value): 设置一个样式css({多个样式对}): 设置多个样式
(2) 位置坐标(获取/设置标签的位置数据)
offset():读/写当前元素坐标(原点是页面左上角)position():读当前元素坐标(原点是父元素左上角)scrollTop()/scrollLeft():读/写元素/页面的滚动条坐标
scrollTop():读取/设置滚动条的Y坐标$(document.body).scrollTop()+$(document.documentElement).scrollTop():读取页面滚动条的 Y 坐标$('body,html').scrollTop(60);:滚动到指定位置
(3) 尺寸(获取/设置标签的尺寸数据)

内容尺寸
height():heightwidth():width
内部尺寸
innerHeight():height + paddinginnerWidth():width + padding
外部尺寸
outerHeight(false/true):height + padding + border 如果是 true,加上 marginouterWidth(false/true):width + padding + border 如果是 true,加上 margin
3、筛选
(1) 过滤
在 jQuery 对象中的元素对象数组中过滤出一部分元素来
first()last()eq(index|-index):index 为正数,从前往后数;index 为负数,从后往前数filter(selector):对当前元素提要求not(selector):对当前元素提要求,并取反has(selector):对子孙元素提要求
(2) 查找
在已经匹配出的元素集合中根据选择器查找孩子/父母/兄弟标签
children():子标签中找find():后代标签中找parent():父标签prevAll():前面所有的兄弟标签nextAll():后面所有的兄弟标签siblings():前后所有的兄弟标签
4、文档处理
增加
append()/appendTo():向当前匹配的所有元素内部的最后插入指定内容preppend()/preppendTo():向当前匹配的所有元素内部的最前面插入指定内容before():将指定内容插入到当前所有匹配元素的前面after():将指定内容插入到当前所有匹配元素的后面替换节点
删除
remove():将自己及内部的孩子都删除empty():掏空(自己还在)
更新
replaceWith():用指定内容替换所有匹配的标签删除节点
5、事件
(1) 事件处理
绑定事件
eventName(function(){}):绑定对应事件名的监听,例如$('#div').click(function(){});on('eventName', function(){}): 通用的绑定事件监听,例如$('#div').on('click', function(){})常用:
click,mouseenter/mouseleavemouseover/mouseoutfocus/blur优缺点:
eventName:编码方便,但只能加一个监听,且有的事件监听不支持on:编码不方便,可以添加多个监听,且更通用
解绑事件
off('eventName'):解绑对应事件名的监听,例如$('#div').off('click');
(2) 事件切换
hover(function(){}, function(){}):同时绑定鼠标移入和移出监听
区别 mouseover 与 mouseenter?
mouseover:在移入子元素时也会触发,对应mouseoutmouseenter:只在移入当前元素时才触发,对应mouseleave
hover() 使用的就是 mouseenter() 和 mouseleave()
区别 on('eventName', fun) 与 eventName(fun)
on('eventName', fun):通用,但编码麻烦eventName(fun):编码简单,但有的事件没有对应的方法
(3) 事件委托
理解:将子元素的事件委托给父辈元素处理
事件监听绑定在父元素上,但事件发生在子元素上(事件会冒泡到父元素)
但最终调用的事件回调函数的是子元素:
event.target
好处
新增的元素没有事件监听
减少监听的数量(n==>1)
编码
delegate(selector, 'eventName', function(event){}) // 回调函数中的this是子元素undelegate('eventName')
引入:绑定事件监听的问题(新加的元素没有监听)
1、事件委托(委派/代理):
将多个子元素(li)的事件监听委托给父辈元素(ul)处理
监听回调是加在了父辈元素上
当操作任何一个子元素(li)时,事件会冒泡到父辈元素(ul)
父辈元素不会直接处理事件,而是根据
event.target得到发生事件的子元素(li),通过这个子元素调用事件回调函数
2、事件委托的 2 方:
委托方:业主 li
被委托方:中介 ul
3、使用事件委托的好处
添加新的子元素,自动有事件响应处理
减少事件监听的数量:n==>1
4、jQuery 的事件委托 API
设置事件委托:
$(parentSelector).delegate(childrenSelector, eventName, callback)移除事件委托:
$(parentSelector).undelegate(eventName)
事件坐标
event.offsetX/event.offsetY:原点是当前元素左上角(相对于事件元素左上角)event.clientX/event.clientY:原点是窗口左上角(相对于视口的左上角)event.pageX/event.pageY:原点是页面左上角(相对于页面的左上角)

事件相关处理
停止事件冒泡:
event.stopPropagation()阻止事件的默认行为:
event.preventDefault()
6、动画效果
在一定的时间内,不断改变元素样式
(1) 滑动动画(不断改变元素的高度来实现的)
slideDown():带动画的展开slideUp():带动画的收缩slideToggle():带动画的切换展开/收缩
(2) 淡入淡出动画(不断改变元素的透明度来实现的)
fadeIn():带动画的显示fadeOut():带动画隐藏fadeToggle():带动画切换显示/隐藏
(3) 显示/隐藏动画(不断改变元素的尺寸和透明度来实现)
show():(不)带动画的显示hide():(不)带动画的隐藏toggle():(不)带动画的切换显示/隐藏
(4) 自定义动画
animate({结束时的样式}, time, fun):自定义动画效果的动画stop():停止动画
jQuery 对象使用特点
链式调用:调用 jQuery 对象的任何方法后返回的还是当前 jQuery 对象
读写合一
读:内部第一个 DOM 元素
写:内部所有的 DOM 元素
五、jQuery 插件
1、扩展插件
扩展 jQuery 的工具方法
扩展 jQuery 对象的方法
例子:
2、jQuery 插件
理解
基于 jQuery 编写的扩展库
jquery-validation
表单验证插件
使用
下载
引入 js
jquery-1.11.1.js
jquery.validate.js
messages_zh.js
定义验证
直接在标签中指定
js 编码指定
jquery UI http://jqueryui.com/
laydate http://www.layui.com/laydate/
六、其他
1、多库共存
2、jQuery 中的 $(function(){})
$(function(){})3、练习
以前用原生 js 实现过的用 jQuery 来一遍
(1) 爱好选择器

(2) 增删员工记录

初级版本
进阶版本
(3) 轮播图
jQuery 文档的结构图

最后更新于