jQuery
jQuery
查找标签
基本选择器
id选择器:
例:
$("#id")
class选择器:
例:
$(".className")
标签选择器:
例:
$("tagName")
配合使用:
例:
$("div.c1") #找到c1 class 类中的div标签
所有元素选择器:
例:
$("*")
组合选择器:
例:
$("#id, .className, tagName")
层级选择器:
例:
$("x y"); #x的所有后代y (子子孙孙)
$("x > y"); # x的所有儿子y
$("x + y") #找到所有紧挨在x后面的y
$("x ~ y") # x之后所有的兄弟
基本筛选器:
:first # 第一个
例: $("div:first")
:last #最后一个
例: $("div:last")
:eq(index) #索引等于index的那个元素
例: $("div:eq(3)")
:even #匹配所有索引值为偶数的元素,从 0 开始计数
$("div:even")
:odd #匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index) #匹配所有大于给定索引值的元素
:lt(index) #匹配所有小于给定索引值的元素
not(元素选择器) #移除所有满足not条件的标签
has(元素选择器) #选取所有包含一个或多个标签在内的标签(指的是从后代元素中找)
例:
$("div:has(h1)")// 找到所有后代中有h1标签的div标签
$("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
$("li:not(.c1)")// 找到所有不包含c1样式类的li标签
$("li:not(:has(a))")// 找到所有后代中不含a标签的li标签
表单筛选器:
:text
:password
:file
:radio
:checkbox
:submit
:reset
:button
例:
$(":checkbox") # 找到所有的checkbox
操作标签:
样式操作
直接操作 css
.css("color") 获取值
.css("color","red") 设置值
位置操作
offset() #获取匹配元素在当前窗口的相对偏移或设置元素位置
position() #获取匹配元素相对父元素的偏移
scrollTop() #获取匹配元素相对滚动条顶部的偏移
scrollLeft() #获取匹配元素相对滚动条左侧的偏移
.offset() 方法允许我们检索一个元素相对于文档(document)的当前位置
和 .position() 的差别在于: .position()是相对于父级元素的位移
尺寸:
height()
width()
innerHeight()
innerWidth()
outerHeight()
outerWidth()
文件操作:
HTML代码:
html() # 获取第一个匹配元素的html内容
html(val) # 设置所有匹配元素的html内容
文本值:
text() # 去的所有匹配元素的内容
text(val) # 设置所有匹配元素的内容
值:
val() # 取得第一个匹配元素的当前值
val(val) # 设置所有匹配元素的值
val([val1, val2]) # 设置多选的checkbox、多选select的值
属性操作
用于id等或自定义属性:
attr(attrName) # 返回第一个匹配元素的属性值
attr(attrName, attrValue) # 为所有匹配元素设置一个属性值
attr({k1: v1, k2:v2}) # 为所有匹配元素设置多个属性值
removeAttr() # 从每一个匹配的元素中删除一个属性
用于checkbox和radio
prop() # 获取属性
removeProp() # 移除属性
prop 和 attr的区别:
虽然都是属性,但是他们所指的属性并不相同,attr所指的属性是HTML标签属性,而prop所指的是 DOM对象属性,可以认为attr是显示的,而prop是隐式的
文档处理
添加到指定元素内部的后面
$(A).append(B) # 把B追加到A
$(A).prependTo(B) # 把A追加到B
添加到指定元素内部的前面
$(A).prepend(B) #把B前置到A
$(A).prependTo(B) #把A前置到B
添加到指定元素外部的后面
$(A).after(B) # 把B放到A的后面
$(A).insertAfter(B) # 把A放到B的后面
添加到指定元素外部的前面
$(A).before(B) # 把B放到A的前面
$(A).insertBefore(B) #把A放到B前面
移除和清空元素
remove() #从DOM中删除所有匹配的元素
empty() #删除匹配的元素集合中的所有子节点
克隆
clone()
克隆示例:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>克隆</title> <style> #b1 { background-color: deeppink; padding: 5px; color: white; margin: 5px; } #b2 { background-color: dodgerblue; padding: 5px; color: white; margin: 5px; } </style> </head> <body> <button id="b1">屠龙宝刀,点击就送</button> <hr> <button id="b2">屠龙宝刀,点击就送</button> <script src="jquery-3.2.1.min.js"></script> <script> // clone方法不加参数true,克隆标签但不克隆标签带的事件 $("#b1").on("click", function () { $(this).clone().insertAfter(this); }); // clone方法加参数true,克隆标签并且克隆标签带的事件 $("#b2").on("click", function () { $(this).clone(true).insertAfter(this); }); </script> </body> </html>
事件
常用事件
click(function() {内容})
hover(function() {内容})
blur(function() {内容})
focus(function() {内容})
change(function() {内容})
keyup(function() {内容})
keydown和keyup事件组合示例:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>键盘事件示例</title> </head> <body> <table border="1"> <thead> <tr> <th>#</th> <th>姓名</th> <th>操作</th> </tr> </thead> <tbody> <tr> <td><input type="checkbox"></td> <td>Egon</td> <td> <select> <option value="1">上线</option> <option value="2">下线</option> <option value="3">停职</option> </select> </td> </tr> <tr> <td><input type="checkbox"></td> <td>Alex</td> <td> <select> <option value="1">上线</option> <option value="2">下线</option> <option value="3">停职</option> </select> </td> </tr> <tr> <td><input type="checkbox"></td> <td>Yuan</td> <td> <select> <option value="1">上线</option> <option value="2">下线</option> <option value="3">停职</option> </select> </td> </tr> <tr> <td><input type="checkbox"></td> <td>EvaJ</td> <td> <select> <option value="1">上线</option> <option value="2">下线</option> <option value="3">停职</option> </select> </td> </tr> <tr> <td><input type="checkbox"></td> <td>Gold</td> <td> <select> <option value="1">上线</option> <option value="2">下线</option> <option value="3">停职</option> </select> </td> </tr> </tbody> </table> <input type="button" id="b1" value="全选"> <input type="button" id="b2" value="取消"> <input type="button" id="b3" value="反选"> <script src="jquery-3.2.1.min.js"></script> <script> // 全选 $("#b1").on("click", function () { $(":checkbox").prop("checked", true); }); // 取消 $("#b2").on("click", function () { $(":checkbox").prop("checked", false); }); // 反选 $("#b3").on("click", function () { $(":checkbox").each(function () { var flag = $(this).prop("checked"); $(this).prop("checked", !flag); }) }); // 按住shift键,批量操作 // 定义全局变量 var flag = false; // 全局事件,监听键盘shift按键是否被按下 $(window).on("keydown", function (e) { // alert(e.keyCode); if (e.keyCode === 16){ flag = true; } }); // 全局事件,shift按键抬起时将全局变量置为false $(window).on("keyup", function (e) { if (e.keyCode === 16){ flag = false; } }); // select绑定change事件 $("table select").on("change", function () { // 是否为批量操作模式 if (flag) { var selectValue = $(this).val(); // 找到所有被选中的那一行的select,选中指定值 $("input:checked").parent().parent().find("select").val(selectValue); } }) </script> </body> </html> 按住shift键批量操作
hover示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>hover示例</title> <style> * { margin: 0; padding: 0; } .nav { height: 40px; width: 100%; background-color: #3d3d3d; position: fixed; top: 0; } .nav ul { list-style-type: none; line-height: 40px; } .nav li { float: left; padding: 0 10px; color: #999999; position: relative; } .nav li:hover { background-color: #0f0f0f; color: white; } .clearfix:after { content: ""; display: block; clear: both; } .son { position: absolute; top: 40px; right: 0; height: 50px; width: 100px; background-color: #00a9ff; display: none; } .hover .son { display: block; } </style> </head> <body> <div class="nav"> <ul class="clearfix"> <li>登录</li> <li>注册</li> <li>购物车 <p class="son hide"> 空空如也... </p> </li> </ul> </div> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script> $(".nav li").hover( function () { $(this).addClass("hover"); }, function () { $(this).removeClass("hover"); } ); </script> </body> </html> hover事件
事件绑定
.on(events[,selector],function(){})
events : 事件
selector : 选择器
function : 事件处理函数
阻止事件冒泡:
<!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>
事件委托
事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件
示例:
表格中每一行的编辑和删除按钮都能触发相应的事件。
$("table").on("click", ".delete", function () { // 删除按钮绑定的事件 })