11.5 jQuery
引入方式:
方式一:本地引入 方式二:直接使用CDN
文档就绪事件:
DOM文档加载的步骤
1 . 解析HTML结构。 2 . 加载外部脚本和样式表文件。 3 . 解析并执行脚本代码。 4 . DOM树构建完成。 5 . 加载图片等外部文件。 6. 页面加载完毕
11.51 选择器
id选择器: $( "#i1" ) 标签选择器: $( "p" ) class选择器: $( ".c1" ) 所有元素选择器: $( "*" ) 交集选择器: $( "div.c1") // 找到类为c1的div标签 并集选择器: $( "#i1,.c1,p") // 找到所有id="i1"的标签和class="c1"的标签和p标签 层级选择器: $( "x y"); // x的所有后代y(子子孙孙) $("x>y"); // x的所有儿子y(儿子) $("x+y") // 找到所有紧挨在x后面的兄弟y $("x~y") // x之后所有的兄弟y 属性选择器: $( "input[type='checkbox']"); // 取到checkbox类型的input标签 $("input[type!='text']"); // 取到类型不是text的input标签
基本筛选器:
:first // 第一个 :last // 最后一个 :eq(index) // 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd // 匹配所有索引值为奇数的元素,从 0 开始计数 :gt(index) // 匹配所有大于给定索引值的元素 :lt(index) // 匹配所有小于给定索引值的元素 :not(选择器) // 过滤掉所有满足not条件的标签 :has(选择器) // 过滤出所有后代中满足has条件的父标签 // 例如 $("div:has(h1)") // 找到所有后代中有h1标签的div标签 $("div:has(.c1)") // 找到所有后代中有c1样式类的div标签 $("li:not(.c1)") // 找到所有不包含c1样式类的li标签 $("li:not(:has(a))") // 找到所有后代中不含a标签的li标签
11.52 表单常用筛选器
表单常用筛选:
:text :password :file :radio :checkbox :submit :reset :button 例: $( ":checkbox") // 找到所有的checkbox
表单对象状态属性筛选:
:enabled
:disabled
:checked
:selected
注意:$(":checked")选择时连select中的带有selected属性的option标签也会选上,所以要用$("input:checked")
11.53 筛选器
下一个兄弟元素: $( "#id" ).next() $( "#id" ).nextAll() $( "#id").nextUntil("#i2") // 从id="id"的标签开始往下选择兄弟标签直到id=i2的标签(不包含id=i2的标签) 上一个兄弟元素: $( "#id" ).prev() $( "#id" ).prevAll() $( "#id").prevUntil("#i2") // 从id="id"的标签开始往上选择兄弟标签直到id=i2的标签(不包含id=i2的标签) 父亲元素: $( "#id" ).parent() $( "#id").parents() // 查找当前元素的所有的父辈元素 $("#id").parentsUntil("某个父元素") // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。 儿子和兄弟元素: $( "#id").children(); // 所有子标签 $("#id").siblings(); // 兄弟标签、 查找 $( "div").find("p") <==> $("div p" ) // 搜索所有与指定表达式匹配的元素,这个函数是找出正在处理的元素的后代元素的好方法。 筛选 $( "div").filter(".c1") <==> $("div.c1") // 从结果集中过滤出有c1样式类的 // 筛选出与指定表达式匹配的元素集合,这个方法用于缩小匹配的范围,用逗号分隔多个表达式。 .first() // 获取匹配的第一个元素 .last() // 获取匹配的最后一个元素 .not() // 从匹配元素的集合中删除与指定表达式匹配的元素 .has() // 保留包含特定后代的父元素,去掉那些不含有指定后代的元素。 .eq() // 索引值等于指定值的元素
11.54 标签操作之样式操作
11.541 通过类属性操作样式
addClass(); // 添加指定的CSS类名。 removeClass(); // 移除指定的CSS类名。 hasClass(); // 判断样式存不存在 toggleClass(); // 切换CSS类名,如果有就移除,如果没有就添加。
11.542 直接操作CSS样式
css("color","red") // DOM操作:Elem.style.color="red" $("p").css("color", "red"); // 将所有p标签的字体设置为红色 $("#p1").css({"border":"1px solid black","color":"red"}); // 同时设置多个css样式
11.543 jQuery版模态框
< head > < style > .cover { position : fixed ; top : 0 ; right : 0 ; bottom : 0 ; left : 0 ; background-color : rgba(0,0,0,0.4) ; z-index : 999 ; } .modal { background-color : white ; height : 300px ; width : 500px ; position : absolute ; top : 50% ; left : 50% ; z-index : 1000 ; margin-top : -150px ; margin-left : -250px ; } .hide { display : none ; //不占空间,也不显示 } style > head > < body > < div > < h1 > 海燕 h1 > < p > 在苍茫的大海上,狂风卷积着乌云,在乌云和大海之间,海燕像黑色的闪电,在高傲的飞翔。 p > div > < button id ="b1" > 点我登录 button > < div class ="cover hide" > div > < div class ="modal hide" > < form action ="" > < p > < label > 用户名 < input type ="text" > label > p > < p > < label > 密码 < input type ="password" > label > p > < p > < input type ="submit" > < input type ="button" id ="cancel" value ="取消" > p > form > div > < script src ="jquery-3.3.1.min.js" > script > < script > // var b1Ele=document.getElementById("b1"); //原生DOM对象 // var b1Ele = $("#b1")[0]; //通过jQuery对象找到DOM对象,找到按钮,给它绑定事件, // b1Ele.onclick = function () { //使用的是js对象 // $(".cover,.modal").removeClass("hide"); // 事件触发后,找到那两个div,移除它们的hide样式类 // }; var b1Ele = $( " #b1 " ); b1Ele.click( function () { $( " .cover,.modal " ).removeClass( " hide " ); }); // var cancelButton = $("#cancel")[0]; //使用的是DOM对象 // cancelButton.onclick = ()=>{ // $(".cover,.modal").addClass("hide"); // 事件触发后,找到那两个div,给它们添加hide样式类 // }; var cancelButton = $( " #cancel " ); cancelButton.click( function () { $( " .cover,.modal " ).addClass( " hide " ); }); script > body >
11.544 位置
offset() // 获取匹配元素在当前窗口的相对偏移或设置元素位置,可设置 $(".c3").offset({top:284,left:400 }) position() // 获取匹配元素相对父元素的偏移,不可设置 $(window).scrollTop() // 获取匹配元素相对滚动条顶部的偏移,可设置 $(window).scrollTop(0) // 获取当前窗口相对滚动条顶部的偏移,并且可设置 $(window).scrollLeft() // 获取匹配元素相对滚动条左侧的偏移,可设置
.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。.position()的差别在于: .position()是相对于父级元素的位移。
11.545 尺寸
height() // 获取当前标签内容高度,并且可设置高度 width() // 获取当前标签内容宽度,并且可设置宽度 innerHeight() // 内容+padding innerWidth() // 内容+padding outerHeight() // 内容+padding+border outerWidth() // 内容+padding+border
11.55 标签操作之文本内容操作
text() // 只查看所有标签内的文本 text(val) // 先清空节点内容,再添加文本字符串:('我是h1
') 注意:值为标签的时候 不会被渲染为标签元素 只会被当做值渲染到浏览器中 html() // 查看所有子标签,包括文本和子标签 html(val) // 先清空节点内容,可识别文本内的html标签('我是h1
') $('ul').html(' 百度一下 ' ) $( 'ul').html( function (){ // 可以使用函数来设置所有匹配元素的内容 return '哈哈哈' }) val // 用途:val()用于操作input、select、textarea的value值 // 示范一: $( 'input[type=text]').val() // 查看输入框内的值或添加值 $( 'input[type=radio]').val(['male',]) // 查看所选选项或选择选项,选择选项时使用列表 // 示范二: $( 'input[type=checkbox]').val(['basketball','football']) // 查看所选选项或选择选项(选择选项时使用列表)
11.551 登录注册示例
< style > .error { color : red ; } style > < body > < form action ="" method ="" > < p > < label for ="username" > 用户名 label > < input type ="text" id ="username" name ="username" > < span class ="error" > span > p > < p > < label for ="pwd" > 密码 label > < input type ="password" id ="pwd" name ="pwd" > < span class ="error" > span > p > < p > < input type ="submit" id ="b1" value ="登录" > p > form > < script src ="jquery-3.3.1.min.js" > script > < script > $( " #b1 " ).click( function () { var flag = true ; $( " .error " ).text( "" ); var $username = $( " #username " ); var $pwd = $( " #pwd " ); if ($username.val().length === 0 ){ // 取input框的值(用户名)判断长度是否为0 $username.next().text( " 用户名不能为空! " ); // 找到class="error"的span标签添加提示信息 flag = false ; // 用户名或密码为空时不提交表单 } if ($pwd.val().length === 0 ){ // 取input框的值(密码)判断长度是否为0 $pwd.next().text( " 密码不能为空! " ); // 找到class="error"的span标签添加提示信息 flag = false ; } return flag; // 表单填写有误就会返回false,阻止submit按钮默认的提交表单事件 }) script > body >
11.56 标签操作之属性操作
用于id、class、name、value等或自定义属性:
attr(属性名) // 返回第一个匹配元素的属性值 $('.box2 img').attr('title','美女') // 为所有匹配元素设置一个属性值 $('.box2 img').attr({'title': '美女', 'alt':'图片被狗吃了'}) // 为所有匹配元素设置多个属性值 $('.box2 img').removeAttr('title') // 从每一个匹配的元素中删除一个属性
用于checkbox和radio:
$( ':radio[value=male]').prop('checked', true ); // 设置属性 $( "input :checkbox").prop('value') // 获取value属性的值 $("input :checkbox").prop('checked', true ); // 设置属性 $(':checkbox[value=football]').prop('checked', true ); $( "table :checkbox").removeProp('value') // 移除value属性
注意: 在1.x及2.x版本的jQuery中使用attr对checkbox进行赋值操作时会出bug,在3.x版本的jQuery中则没有这个问题。为了兼容性,我们在处理checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")
总结: 1. 对于标签上有的能看到的属性和自定义属性都用attr 2. 对于返回布尔值的比如 checkbox 、 radio 和 option 的是否被选中都用prop。
11.561 全选反选取消
< body > < button id ="b1" > 全选 button > < button id ="b2" > 取消 button > < button id ="b3" > 反选 button > < table border ="1" > < thead > < tr > < th > # th > < th > 姓名 th > < th > 爱好 th > tr > thead > < tbody > < tr > < td >< input type ="checkbox" > td > < td > Egon td > < td > 喊麦 td > tr > < tr > < td >< input type ="checkbox" > td > < td > Alex td > < td > 吹牛逼 td > tr > < tr > < td >< input type ="checkbox" > td > < td > Yuan td > < td > 不洗头 td > tr > tbody > table > < script src ="jquery-3.3.1.min.js" > script > < script > // 全选 $( " #b1 " ).click( function () { $( " table :checkbox " ).prop( " checked " , true ) // 让所有的checkbox选中 }); // 取消 $( " #b2 " ).click( function () { $( " table :checkbox " ).prop( " checked " , false ) // 让所有的checkbox取消选中 }); // 反选 $( " #b3 " ).click( function () { // $("table input:not(:checked)").prop("checked", true); // 找到没有选中的让它们选中 // $("table input:checked").prop("checked", false); // 找到所有选中的让它们取消选中 // 方法1:循环判断 var $checkboxs = $( " table input:checkbox " ); for (let i = 0 ;i < $checkboxs.length;i ++ ){ var $currentCheckbox = $($checkboxs[i]); if ($currentCheckbox.prop( " checked " )){ // 如果之前是选中的,则取消选择 $currentCheckbox.prop( " checked " , false ); } else { $currentCheckbox.prop( " checked " , true ); // 如果之前没有选中,则选择 } } // 方法2:直接取当前标签的checked属性的相反值 for (let i = 0 ;i < $checkboxs.length;i ++ ){ var $currentCheckbox = $($checkboxs[i]); var flag = $currentCheckbox.prop( " checked " ); $currentCheckbox.prop( " checked " , ! flag) } // 方法3: $( ' td input ' ).each( function () { $( this ).prop( ' checked ' , ! $( this ).prop( ' checked ' )); } }); script > body >
11.57 标签操作之文档处理
// 内部 $(A).appendTo(B) // 把A追加到B内部的最后面 $(A).prependTo(B) // 把A前置到B内部的最前面 // 内部 $(A).append(B) // 把B追加到A内部的最后 $(A).prepend(B) // 把B前置到A内部的最前面 // 外部 $(A).insertAfter(B) // 把A放到B外部的后面 $(A).insertBefore(B) // 把A放到B外部的前面 // 外部 $(A).after(B) // 把B放到A外部的后面 $(A).before(B) // 把B放到A外部的前面
移除和清空元素:
$('.p1').remove() // 从DOM中删除所有匹配的元素(标签和事件),被删掉的对象做返回值,包括删除自身 var $btn=$('button').detach() // 删除标签,保留事件,被删掉的对象做返回值 $('ul').append($btn) // 此时按钮能追加到ul中 $( '.p1').empty() // 清空匹配的元素集合中所有的子节点,不包括自身
替换:
$('.p1').replaceWith($('.p2')) // 后面的替换前面的所有.p1标签 $('.p1').replaceAll($('.p2')) // 前面的替换后面的所有.p2标签
克隆:
.clone( true ) // 不加参数true,克隆标签但不克隆标签带的事件,加参数true,克隆标签并且克隆标签带的事件
11.571 克隆示例
< head > < 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 > < button id ="b2" > 屠龙宝刀,点击就送 button > < script src ="jquery-3.3.1.min.js" > script > < script > $( " #b1 " ).on( " click " , function () { // clone方法不加参数true,克隆标签但不克隆标签带的事件 $( this ).clone().insertAfter( this ); }); $( " #b2 " ).on( " click " , function () { // clone方法加参数true,克隆标签并且克隆标签带的事件 $( this ).clone( true ).insertAfter( this ); }); script > body >