一、初识jQuery
(一)jQuery介绍
- jQuery是一个轻量级、兼容多浏览器的JavaScript库
- 可以极大的简化JavaScript编程,宗旨:“Write less,do more”
(二)版本介绍
- 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)
- 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)
- 3.x:不兼容IE678,只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。
(三)jQuery对象
jQuery对象是通过jQuery包装DOM对象后产生的对象
jQuery对象是jQuery独有的
声明一个jQuery对象变量的时候在变量名前面加上$
jQuery对象只能使用jQurey对象的方法,不能使用DOM对象的方法,DOM对象亦然
$("#i1") // jQuery对象 $("#i1")[0] // DOM对象 $(js对象) // Js对象转化为jQuery对象
(四)相关网站
文档API:http://jquery.cuishifeng.cn/index.html
BootCDN:https://www.bootcdn.cn/jquery/
(五)基础语法
$(selector).action()
二、查找标签
(一)基本选择器
(1)id选择器
$("#id")
(2)标签选择器
$("tagName")
(3)class选择器
$(".className")
(4)条件选择器
$("div.c1") // 找到含有c1 class类的div标签
(5)所有元素选择器
$("*")
(6)分组选择器
$("#id, .className, tagName")
(二)层级选择器
(1)后代选择器
x的所有后代y(子子孙孙),x和y可以为任意选择器
$("x y")
(2)儿子选择器
x的所有儿子y(子标签)
$("x > y")
(3)相邻选择器
紧挨在x后面的y
$("x + y")
(4)兄弟选择器
x之后的所有兄弟选择器(平行标签)
$("x ~ y")
(三)属性选择器[]
- [attribute]:选择含有属性的标签
- p[attribute]:选择含有属性的p标签,中间不能有空格
- [attribute=value]:选择属性=值的标签
- p[attribute=value]:选择属性=值的p标签,中间不能有空格
$('[name]') // 含有name属性的标签 $('p[name]') // 含有name属性的p标签 $('[name="tank"]') // name属性为tank的标签 $('p[name="wick"]') // name属性为wick的p标签
(四)基本筛选器:
- :first:第一个
- :last:最后一个
- :eq(index):索引等于index的元素
- :even:匹配所有索引值为偶数的元素,从0开始计数
- :odd:匹配所有索引值为奇数的元素,从0开始计数
- :gt(index):匹配所有大于给定索引值的元素
- :lt(index):匹配所有小于给定索引值的元素
- :not(元素选择器):移除所有满足not条件的标签
- :has(元素选择器):选取所有包含一个或多个标签在其内的标签(从后代元素找)
$("div:has(h1)") // 找到所有后代中有h1的div标签 $("li:not(.c1)")// 找到所有不包含c1样式类的li标签
(五)表单筛选器
(1)input标签type参数值筛选
input标签中的type参数的值前加上冒号
$(':checkbox') // 找到所有type参数为checkbox的input标签
(2)表单对象属性
- :enabled
- disabled
- checked
- selected
// input标签对象属性筛选 <form> <input name="email" disabled="disabled" /> <input name="id" /> </form> $("input:enabled") // 找到可用的input标签 // select标签对象属性筛选 <select id="s1"> <option value="beijing">北京市</option> <option value="shanghai">上海市</option> <option selected value="guangzhou">广州市</option> <option value="shenzhen">深圳市</option> </select> $(":selected") // 找到所有被选中的option
(3)BUG
- :checked会把input标签中的默认属性和select标签中的selected默认属性一起筛选出来
- 解决方法:$('input:checked'),通过标签限制
(六)、筛选器方法
(1)next
$('#id').next() // 下一个元素 $('#id').nextAll() $('#id').nextUntil('#i2')
(2)prev
$('#id').prve() // 上一个元素 $('#id').prveAll() $('#id').prveUntil('#i2')
(3)parent
$('id').parent() // 查找父元素 $('id').parents() // 查找所有的父元素 $("#id").parentsUntil() // 查找所有的父元素,知道某个元素为止
(4)儿子和兄弟元素
$('id').children() // 儿子们,所有的子元素 $("#id").siblings() // 兄弟们,所有的平行元素
(5)find
搜索所有与指定表达式匹配的元素
$('div').find("p") // 等价于$('div p')
(6)filter
筛选出与指定表达式匹配的元素集合
$("div").filter(".c1") // 从结果集中过滤出有c1样式类的 // 等价于$('div.c1')
(7)补充
.first() // 获取匹配的第一个元素 .last() // 获取匹配的最后一个元素 .not() // 从匹配与元素的集合中删除与指定表达式匹配的元素 .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素 .eq() // 索引值等于指定值的元素
三、操作标签
(一)样式操作
- addClass:添加指定的css类名
- removeClass:移除指定的css类名
- hasClass:判断样式存不存在
- toggleClass:切换class类名,如果有就移除,没有就添加
$('p').css('color','red') // DOM操作 // tag.style.color = 'red'
(二)位置操作
- offset:获取匹配元素在当前窗口的相对偏移或设置元素位置
- position:获取匹配元素相对父元素的偏移
- scrollTop:获取匹配元素相对滚动条顶部的偏移,可用于回到顶部功能
- scrollLeft:获取匹配元素相对滚动条左侧的偏移
(三)尺寸
- height():文本
- width()
- innerWidth():文本+内边距
- innerHeight()
- outWidth():文本+内边距+边框
- outHeight()
(四)文本操作
html():html内容
text():文本内容
val():值
获取被选中的checkbox或radio的值
$("input[name='gender']:checked").val()
html() // 获取第一个匹配元素的HTML内容 html(val) // 设置所有匹配元素的html内容 text()// 取得所有匹配元素的内容 text(val)// 设置所有匹配元素的内容 val()// 取得第一个匹配元素的当前值 val(val)// 设置所有匹配元素的值 val([val1, val2])// 设置多选的checkbox、多选select的值
(五)属性操作
- 对于标签上有的能看到的属性和自定义属性都用attr
- 对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop。
(1)attr
- attr(attrName):返回第一个匹配元素的属性值
- attr(attrName,attrValue):为所有匹配元素设置值
- attr({k1:v1,k2:v2}):为所有配元素设置多个值
- removeAttr():从每一个匹配的元素删除一个属性
(2)prop
- prop():获取属性
- prop(attrName,''):删除属性
注意:
1.x和2.x版本的jQuery中使用attr对checkbox和radio进行赋值操作时,会出bug,3.x版本则不会有这个问题。为了兼容性,在checkbox和radio的时候尽量使用特定的prop
<input type="checkbox" value="1"> <input type="radio" value="2"> <script> $(":checkbox[value='1']").prop("checked", true); $(":radio[value='2']").prop("checked", true); </script>
(六)标签操作
(1)append
添加到指定元素内部的后面
$(A).append(B) // 把B追加到A内部最后 $(A).appendTo(B) // 把A追加到B内部最后
(2)prepend
添加到指定元素内部的前面
$(A).prepend(B) // 把B前置到A第一个子标签 $(A).prependTo(B) // 把A前置到B第一个子标签
(3)after
添加到指定元素外部的后面
$(A).after(B)// 把B放到A的后面 $(A).insertAfter(B)// 把A放到B的后面
(4)before
添加到指定元素外部的前面
$(A).before(B)// 把B放到A的前面 $(A).insertBefore(B)// 把A放到B的前面
(5)remove和empty
移除和清空元素
remove()// 从DOM中删除所有匹配的元素。 empty()// 删除匹配的元素集合中所有的子节点。
(6)replace
- replaceWith()
- replaceAll()
(7)clone
- clone():只克隆标签,不克隆事件
- clone(true):克隆标签,包括事件
<script> // clone方法不加参数true,克隆标签但不克隆标签带的事件 $("#b1").on("click", function () { $(this).clone().insertAfter(this); }); // clone方法加参数true,克隆标签并且克隆标签带的事件 $("#b2").on("click", function () { $(this).clone(true).insertAfter(this); }); </script>
五、事件
(一)常用事件
click:点击
hover:鼠标悬浮
$('p').hover(函数1,函数2) // 1. 鼠标悬浮时触发函数1,移开时触发函数2 // 2. 如果只有一个函数,悬浮和离开时都会触发一次
blur:失去焦点
focus:聚焦
change:域内容发生改变
keyup:按键松开
input:可以实时监听input框内的实时变化
(二)事件绑定
(1)on
.on(events [,selector],function(){})
- events:事件
- selector:选择器(可选)
- function:事件处理函数
(2)off
.off(events [,selector],function(){})
off()
方法移除用 .on()
绑定的事件处理程序。
(三)阻止后续事件执行
- return false:常见阻止表单提交等
- e.preventDefalut()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>阻止默认事件</title> </head> <body> <form action=""> <button id="b1">点我</button> </form> <script src="jquery-3.3.1.min.js"></script> <script> $("#b1").click(function (e) { alert(123); //return false; e.preventDefault(); }); </script> </body> </html>
(四)事件冒泡
子标签触发事件后会逐层传递给父标签,称为事件冒泡
解决办法:e.stopPropagation();
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>阻止事件冒泡</title> </head> <body> <div> <p> <span>点我</span> </p> </div> <script src="jquery-3.3.1.min.js"></script> <script> $("span").click(function (e) { alert("span"); e.stopPropagation(); }); $("p").click(function () { alert("p"); }); $("div").click(function () { alert("div"); }) </script> </body> </html>
(五)事件委托
事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件。
$('body').on('click','button',function () { alert('123') }) // 通过这个可以在创建添加标签时,同时加上原标签的事件
(六)页面载入ready
当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。
$(document).ready(function(){ // 在这里写你的JS代码... }) // 简写 $(function(){ // 你在这里写你的代码 })