github编辑

2020 年了,jQuery 是否还值得学

2020 年了,jQuery 是否还值得学

jQuery 是一个 JavaScript 库,极大地简化了原生 JavaScript 编程,源码值得学习。

可以先了解 jQuery 的一些基本用法,然后再去看源码,这样会更容易理解。

  • 初识 jQuery

  • jQuery 的两把利器

  • 使用 jQuery 核心函数

  • 使用 jQuery 对象

  • jQuery 对象

  • 练习

一、初识 jQuery

1、一个 JS 库

2、操作更方便

  • HTML 元素选取(选择器)

  • HTML 元素操作

  • CSS 操作

  • HTML 事件处理

  • JS 动画效果

  • 链式调用

  • 读写合一

  • 浏览器兼容

  • 易扩展插件

  • Ajax 封装

  • ......

封装简化 DOM 操作(CRUD)/ Ajax

强大选择器:方便快速查找 DOM 元素

隐式遍历(迭代):一次操作多个元素

读写合一:读数据/写数据用的是一个函数

事件处理、链式调用、DOM 操作、样式操作……

3、jQuery 的使用

使用

(1) 引入库:本地引入、CDN 远程引入,测试版、生产版(压缩版)

(2) 使用库:函数($/jQuery)、对象($xxx

二、jQuery 的 2 把利器

  • jQuery 函数:$/jQuery

    • jQuery 向外暴露的就是 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()

理解:

  • $jQuery

  • jQuery 定义了这个全局的函数供我们调用

  • 它既可作为一般函数调用,且传递的参数类型不同/格式不同功能就完全不同

  • 也可作为对象调用其定义好的方法,此时 $ 就是一个工具对象

作为函数调用:

  • 参数为函数 $(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、$ 工具方法

  1. $.each():遍历数组或对象中的数据

  2. $.trim():去除字符串两边的空格

  3. $.type(obj):得到数据的类型

  4. $.isArray(obj):判断是否是数组

  5. $.isFunction(obj):判断是否是函数

  6. $.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):添加 class

  • removeClass(classValue):移除指定 class

操作HTML代码/文本/值

  • val() / val(value):读写标签的value

  • html() / html(htmlString):读写标签体文本

练习表格隔行变色改进--->odd样式类

2、CSS

(1) style 样式(设置 CSS 样式/读取 CSS 值)

  • css(styleName): 根据样式名得到对应的值

  • css(styleName, value): 设置一个样式

  • css({多个样式对}): 设置多个样式

(2) 位置坐标(获取/设置标签的位置数据)

  • offset():读/写当前元素坐标(原点是页面左上角)

  • position():读当前元素坐标(原点是父元素左上角)

  • scrollTop()/scrollLeft():读/写元素/页面的滚动条坐标

  1. scrollTop():读取/设置滚动条的Y坐标

  2. $(document.body).scrollTop()+$(document.documentElement).scrollTop():读取页面滚动条的 Y 坐标

  3. $('body,html').scrollTop(60);:滚动到指定位置

(3) 尺寸(获取/设置标签的尺寸数据)

  • 内容尺寸

    • height():height

    • width():width

  • 内部尺寸

    • innerHeight():height + padding

    • innerWidth():width + padding

  • 外部尺寸

    • outerHeight(false/true):height + padding + border 如果是 true,加上 margin

    • outerWidth(false/true):width + padding + border 如果是 true,加上 margin

3、筛选

(1) 过滤

在 jQuery 对象中的元素对象数组中过滤出一部分元素来

  1. first()

  2. last()

  3. eq(index|-index):index 为正数,从前往后数;index 为负数,从后往前数

  4. filter(selector):对当前元素提要求

  5. not(selector):对当前元素提要求,并取反

  6. has(selector):对子孙元素提要求

(2) 查找

在已经匹配出的元素集合中根据选择器查找孩子/父母/兄弟标签

  1. children():子标签中找

  2. find():后代标签中找

  3. parent():父标签

  4. prevAll():前面所有的兄弟标签

  5. nextAll():后面所有的兄弟标签

  6. 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/mouseleave mouseover/mouseout focus/blur

      • 优缺点:

        • eventName:编码方便,但只能加一个监听,且有的事件监听不支持

        • on:编码不方便,可以添加多个监听,且更通用

  • 解绑事件

    • off('eventName'):解绑对应事件名的监听,例如 $('#div').off('click');

(2) 事件切换

hover(function(){}, function(){}):同时绑定鼠标移入和移出监听

区别 mouseovermouseenter?

  • mouseover:在移入子元素时也会触发,对应 mouseout

  • mouseenter:只在移入当前元素时才触发,对应 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 插件

六、其他

1、多库共存

2、jQuery 中的 $(function(){})

3、练习

以前用原生 js 实现过的用 jQuery 来一遍

(1) 爱好选择器

(2) 增删员工记录

初级版本

进阶版本

(3) 轮播图

jQuery 文档的结构图

最后更新于