@TOC
JQuery简介
什么是Jquery?
- 一个优秀的JS函数库
封装简化DOM操作(CRUD) / Ajax- 使用了jQuery的网站超过90%
- 中大型WEB项目开发首选
- Write Less, Do More!!!
为什么使用Jquery?
- 强大选择器: 方便快速查找DOM元素
- 隐式遍历(迭代): 一次操作多个元素
- 读写合一: 读数据/写数据用的是一个函数
- 链式调用: 可以通过.不断调用jQuery对象的方法
- 事件处理
- DOM操作(CUD)
- 样式操作
- 动画
- 浏览器兼容
如何使用Jquery?
- js库库文件
①开发版(测试版)----
jquery-1.10.1.js②生产版(压缩版)---jquery-1.10.1.min.js - 引用JS库的方式
①服务器本地库引入
(本地文件)<1>开发测试时使用 <2>加重了服务器负担, 上线时一般不使用这种方式 ②CDN远程库引入(网络文件)<1>地址:https://cdn.bootcdn.net/ajax/libs/jquery/1.10.0/jquery.js<2>BootCDN 是猫云联合 Bootstrap中文网共同支持并维护的前端开源项目免费 CDN 服务。< 3>项目上线时, 一般使用比较靠谱的CDN资源库 <4>减轻服务器负担 - jQuery的不同版本 ①1.x:兼容老版本IE,文件更大 ②2.x:部分IE8及以下不支持,文件小, 执行效率更高 ③3.x:完全不再支持IE8及以下版本,提供了一些新的API,提供不包含ajax/动画API的版本
- 使用jQuery ①使用jQuery核心函数: $/jQuery ②使用jQuery核心对象: xxx(执行()得到的)
CDN详解:
- CDN,中文名叫做「内容分发网络」,它的作用是减少传播时延,找最近的节点
- CDN 的优点: ①访问加速 ②减轻源站(服务器)负载 ③抗住攻击
- CDN本质:
①
其实 CDN 就是一个缓存,区别只是这个缓存是放在网络服务提供商节点的。 - 链接:闲话 CDN
jQuery的2把利器
jQuery核心函数:
- jQuery核心函数理解:
①
即: $ 或 jQuery②jQuery定义了这个全局的函数供我们调用 ③它既可作为一般函数调用, 且传递的参数类型不同/格式不同功能就完全不同 ④也可作为对象调用其定义好的方法, 此时$就是一个工具对象 作为函数调用①参数为函数----$(fun) ②参数为选择器(selector)字符串----$("#div1") ③参数为DOM对象----$(div1Ele)④参数为html标签字符串----$("<div>")作为对象使用①发送ajax请求的方法 <1>$.ajax() <2>$.get() <3>$.post() <4>..... ②其它工具方法 <1>$.each() <2>$.trim() <3>$.parseJSON() <4>.....
什么是伪数组对象?
伪数组是一个非数组类型的对象.有一个length属性,值为numder类型.- 以下标的方式存储数据.
jQuery核心对象:
- jQuery核心对象理解:
①
即执行jQuery核心函数返回的对象②jQuery对象是一个内部包含所有匹配的任意多个dom元素的伪数组对象(可能只有一个元素)。 ③jQuery对象拥有很多有用的属性和方法, 让程序员能方便的操作dom`` 属性/方法: ①基本行为: <1>size()/length:返回DOM元素数量 <2>[index]/get(index):返回指定索引值DOM元素<3>each():遍历DOM元素<4>index():返回DOM元素索引值 ②属性:操作内部标签的属性或值 ③CSS:操作标签的样式 ④文档:对标签进行增删改操作 ⑤筛选:根据指定的规则过滤内部的标签 ⑥事件:处理事件监听相关 ⑦效果:实现一些动画效果
使用jQuery核心函数
选择器:
- 选择器本身只是一个有特定语法规则的字符串, 没有实质用处
- 它的基本语法规则使用的就是CSS的选择器语法, 并对基进行了扩展
只有调用$(), 并将选择器作为参数传入才能起作用$(selector)作用 : 根据选择器规则在整个文档中查找所有匹配的标签的数组, 并封装成jQuery对象返回- 分类:
①
基本选择器:最基本最常用的选择器<1>#id:id选择器 <2>element:元素选择器 <3>.class:属性选择器 <4>*:任意标签 <5>selector1,selector2,selectorN:取多个选择器的并集(组合选择器) <6>selector1selector2selectorN:取多个选择器的交集(相交选择器) ②层次选择器:查找子元素, 后代元素, 兄弟元素的选择器<1>ancestor descendant :在给定的祖先元素下的后代元素中匹配元素 <2>parent > child :在给定的父元素下的子元素中匹配元素 <3>prev + next :匹配所有紧接在prev元素后的next元素 <4>prev ~ siblings :匹配prev元素之后的所有siblings元素 ③过滤选择器:在原有选择器匹配的元素中进一步进行过滤的选择器<1>基本 1、:first 2、:last 3、:eq(index) 4、:lt 5、:gt 6、:odd 7、:even 8、:not(selector) <2>内容 1、:contains(text) 2、:empty 3、:has(selector) 4、:parent <3>可见性 1、:hidden 2、:visible <4>属性 1、[attrName] 2、[attrName=value] - ④
子元素<1>:nth-child <2>:first-child <3>:last-child <4>:only-child ⑤表单选择器:<1>表单 1、:input 2、:text 3、:password 4、:radio 5、:checkbox 6、:submit 7、:image 8、:reset 9、:button 10、:file 11、:hidden <2>表单对象属性 1、:enabled 2、:disabled 3、:checked 4、:selected
工具方法:
- $.each():遍历数组或对象中的数据
- $.trim():去除字符串两边的空格
- $.type(obj) :得到数据的类型
- $.isarray(obj) :判断是否是数组
- $.isFunction(obj) :判断是否是函数
- $.parseJSON(json) : 解析json字符串转换为js对象/数组
- .......
ajax方法:
- ajax():ajax通用方法
- get():ajaxget方法
- post():ajaxpost方法
serialize() :通过序列化表单值创建 URL 编码文本字符串。- ......
使用jQuery对象
属性:
操作任意属性①attr() ②removeAttr() ③prop() ④attr 与 prop :具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()操作class属性①addClass() ②removeClass()操作HTML代码/文本/值①html() ②val()
CSS:
设置css样式/读取css值①css(styleName): 根据样式名得到对应的值 ②css(styleName, value): 设置一个样式 ③css({多个样式对}): 设置多个样式获取/设置标签的位置数据①offset():相对页面左上角的坐标 ②position():相对于父元素左上角的坐标 ③scrollTop() /scrollLeft(): <1>得到页面滚动条的scrollTop:$(document.body).scrollTop()+$(document.documentElement).scrollTop() <2>设置滚动条的新坐标:$('body,html').scrollTop(60); ④scrollLeft()获取/设置标签的尺寸数据①heigh() 和 width() :不包括内边距和边框的尺寸②innerHeight() 和innerWidth() :包括内边距,但不包括边框的尺寸③outerHeight() 和outerWidth() :包括内边距和边框的尺寸
文档:
添加节点①append(content) :向当前匹配的所有元素内部的最后插入指定内容 <1>返回值为当前匹配的所有元素自己<2>可进行链式操作②prepend(content) :向当前匹配的所有元素内部的最前面插入指定内容 ③before(content):将指定内容插入到当前所有匹配元素的前面 ④after(content):将指定内容插入到当前所有匹配元素的后面替换节点①replaceWith(content) :用指定内容替换所有匹配的标签删除节点①empty() :删除所有匹配元素的子元素 ②remove() :删除所有匹配的元素
筛选:
过滤:在jQuery对象中的元素对象数组中过滤出一部分元素来①first() ②last() ③eq(index|-index) ④filter(selector) ⑤not(selector) ⑥has(selector)查找孩子/父母/兄弟标签:在已经匹配出的元素集合中根据选择器查找孩子/父母/兄弟标签①children() ②find() ③parent() ④prevall() ⑤nextall() ⑥siblings()
事件:
事件处理①on():通用的绑定事件监听 ②xxx():绑定某个具体的事件监听,如click()③off():解绑事件监听 ④其中有几个特别注意的事件方法: <1>trigger() 方法触发被选元素的指定事件类型。tigger触发被选元素的指定事件 (一般来说点我 触发我的事件 但tigger是点我触发别人的事件)事件切换①hover():同时绑定鼠标移入和移出监听事件委派(委托): 将子元素的事件委托给父辈元素处理①事件监听绑定在父元素上, 但事件发生在子元素上,事件会冒泡到父元素,但最终调用的事件回调函数的是子元素: event.target。 ②好处:新增的元素没有事件监听,减少监听的数量(n==>1) ③delegate():绑定委托事件监听 ④undelegate():移除委托事件监听相关重要知识①事件坐标: <1>相对可视窗口左上角:event.clientX和event.clientY <2>相对页面左上角:event.pageX和event.pageY <3>相对元素左上角:event.offsetX和event.offsetY②阻止事件冒泡:event.stopPropagation(); ③取消事件的默认行为:event.preventDefault();
区别mouseover与mouseenter?
- mouseover: 在移入子元素时也会触发, 对应mouseout
- mouseenter: 只在移入当前元素时才触发, 对应mouseleave
hover()使用的就是mouseenter()和mouseleave()
效果:
滑动动画:不断改变元素的高度来实现的 ①slideDown():带动画的展开 ②slideUp():带动画的收缩 ③slideToggle():带动画的切换展开/收缩淡入淡出动画:不断改变元素的透明度来实现的 ①fadeIn():带动画的显示 ②fadeOut():带动画隐藏 ③fadeToggle():带动画切换显示/隐藏显示/隐藏动画:不断改变元素的尺寸和透明度来实现 ①show():(不)带动画的显示 ②hide():(不)带动画的隐藏 ③toggle():(不)带动画的切换显示/隐藏jQuery动画本质 : 在指定时间内不断改变元素样式值来实现的自定义动画:①animate():自定义动画效果的动画 ②stop():停止动画
jQuery对象使用特点:
链式调用:调用jQuery对象的任何方法后返回的还是当前jQuery对象读写合一:①读: 内部第一个dom元素②写: 内部所有的dom元素
jQuery插件
扩展插件:
extend()是一个方法!!!- 扩展jQuery的工具方法
$.extend({
xxx: fuction () {} // this是$
})
$.xxx()
- 扩展jQuery对象的方法
$.fn.extend({
xxx: function(){} // this是jQuery对象
})
obj.xxx()
jQuery插件:
- jQuery插件理解: ①基于jQuery编写的扩展库 ②jQuery插件地址
- jquery-validation: ①表单验证插件 ②参考"菜鸟教程"学习 ③使用: <1>先去下载插件包 <2>引入js: 1、jquery-1.11.1.js 2、jquery.validate.js 3、messages_zh.js <3>定义验证: 1、直接在标签中指定 2、js编码指定。
- jquery UI:
①UI组件:
html+css②jquery UI库地址 - laydate: ①日期控件 ②laydate库地址
多库共存
多库共存:
- 问题 : 如果有2个库都有$, 就存在冲突
- 解决 : jQuery库可以释放$的使用权, 让另一个库可以正常使用, 此时jQuery库只能使用jQuery了
API : jQuery.noConflict()
//释放$的使用权,让另一个库可以正常使用
jQuery.noConflict()
//使用的是myLib.js中的$
$()
//使用jQuery
jQuery(function () {
jQuery('body')
})
jQuery总结
jQuery 对象和 dom 对象区分:
- Dom 对象 : ①通过 getElementById()查询出来的标签对象是 Dom 对象 ②通过 getElementsByName()查询出来的标签对象是 Dom 对象 ③通过 getElementsByTagName()查询出来的标签对象是 Dom 对象 ④通过 createElement() 方法创建的对象,是 Dom 对象 ⑤DOM 对象 Alert 出来的效果是:[object HTML 标签名 Element]
- jQuery 对象: ①通过 JQuery 提供的 API 创建的对象,是 JQuery 对象 ②通过 JQuery 包装的 Dom 对象,也是 JQuery 对象 ③通过 JQuery 提供的 API 查询到的对象,是 JQuery 对象 ④jQuery 对象 Alert 出来的效果是:[object Object]
- 注意:
①
jQuery 对象的本质是 dom 对象的数组 + jQuery 提供的一系列功能函数。②jQuery 对象不能使用 DOM 对象的属性和方法 ③DOM 对象也不能使用 jQuery 对象的属性和方法
Dom 对象和 jQuery 对象互转:
- dom 对象转化为 jQuery 对象
①先有 DOM 对象
②
$( DOM 对象 ) 就可以转换成为 jQuery 对象 - jQuery 对象转为 dom 对象
①先有 jQuery 对象
②
jQuery 对象[下标]取出相应的 DOM 对象
window.onload与 $(document).ready()区别:
- window.onload
①
包括页面的图片加载完后才会回调(晚)②只能有一个监听回调 - (function(){})
②页面加载完就回调(早)`` ③可以有多个监听回调
$(document)是啥:
- 意思是说
获取整个网页文档对象(类似的于window.document)
Jquery总结:
- Jquery重点:一个核心对象,一个核心函数:
①
参数为选择器时得到对象-----$(X)②得到的对象可以进行筛选------$(X).X()③同时可以进行css样式操作------$(X).X()④也可以进行属性以及文本操作------$(X).X()⑤也可以直接当工具类------$.(X)⑥也可以基本的对象访问------$(X).X()⑦也可以做事件处理------$(X).X()⑧也可以做文档处理------$(X).X()⑨也可以做动画效果------$(X).X()⑩也可以做数据缓存或队列控制------$.(X)⑪也可以使用插件机制或多库共存------JQuery. (X)或$. (X)
jquery源码分析:
- jquery:window.jQuery = window.$ = jQuery; ①暴露出去以方便调用
jquery核心函数:jquery()- jquery原型:jQuery.fn =jQuery.prototype
jquery核心对象:jQuery.fn.init核心函数返回值为核心对象- jquery扩展:jQuery.extend = jQuery.fn.extend = function() {};
- jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
①相当于将jquery核心对象的原型对象的地址值变为jquery的原型对象。
因此jquery核心对象也可以调用jquery的原型对象上方法 因此总结来看jquery的方法就是jquery对象上的方法,jquery核心对象方法就是jquery对象的原型对象上的方法。- 一般来说对象方法当工具用,原型对象方法给dom元素(Jquery的dom元素对象)用。
交互的核心:
对哪些元素进行监听对哪些元素进行DOM操作