Day44
jQuery
简介
集JavaScript、CSS、DOM、Ajax于一体的框架体系,目的是以更少的代码实现更多功能。
基本功能
1.访问和操作DOM元素
2.控制页面样式
3.对页面事件的处理
4.与Ajax技术的完美结合
5.大量插件在页面中的运用
页面加载事件
$(document).ready(function(){})
对比:JS的页面加载事件:window.οnlοad=funciton(){}
jQuery的页面加载事件:不会覆盖,HTML元素加载完毕时调用,而JS会覆盖,且会等全部资源加载完毕才会调用。
简化版:$(function()={})
jQuery选择器
css选择器选择页面上的某些元素,然后给这些元素设计样式,jQuery提供了更多的选择器,也是选择页面上的元素,但是除了设置样式外,可以对这个元素的所有内容进行设置。
面试题:
css的选择器与jQuery选择器的区别?
答:css选择器是选择页面上的HTML元素并设置样式,而jQuery选择器选择页面上的HTML元素,并设置样式、内容、属性,还可以设置各种事件。
通配符选择器:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("*").css("color","red"); }) </script> </head> <body> <h1>一级标签</h1> <h2>二级标签</h2> <h3>三级标签</h3> <h4>四级标签</h4> <h5>五级标签</h5> <h6>六级标签</h6> <p>aaa</p> <p>bbb</p> <span>ccc</span> <span>ddd</span> </body> </html>
基本选择器:
$(function(){ //标签选择器 $("p").css("color","red"); }) $(function(){ //类选择器 $(".myClass").css("color","red"); }) $(function(){ //id选择器 $("#myID").css("color","red"); })
群组选择器:
$(function(){ //群组选择器 $("h2,h4,h5,p,span").css("color","red"); })
上下文关系选择器:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ //后代选择器 $("ul a").css("color","red"); }) </script> </head> <body> <ul> <li> <a href="#">超链接1</a> </li> <li> <a href="#">超链接2</a> </li> <li> <a href="#">超链接3</a> </li> </ul> <ul> <li> <a href="#">超链接4</a> </li> <li> <a href="#">超链接5</a> </li> <li> <a href="#">超链接6</a> </li> </ul> <a href="#">超链接7</a> <a href="#">超链接8</a> <a href="#">超链接9</a> </body> </html> $(function(){ //子代选择器 $("li>a").css("color","red"); }) $(function(){ //相邻兄弟选择器 $("a+a").css("color","red"); }) $(function(){ //后续选择器 $("ul~a").css("color","red"); })
过滤选择器:
简单过滤选择器:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ /* * 选择第一个元素 * $("li:first").css("color","red"); * * 选择最后一个元素 * $("li:last").css("color","red"); * * 选择不是第几个元素 * $("li:not(:first)").css("color","red"); * * 选择下标为偶数的元素 * $("li:even").css("color","red"); * * 选择下标为奇数的元素 * $("li:odd").css("color","red"); * * 选择指定下标的元素 * $("li:eq(1)").css("color","red"); * * 选择大于下标的元素 * $("li:gt(1)").css("color","red"); * * 选择小于下标的元素 * $("li:lt(1)").css("color","red"); */ }) </script> </head> <body> <ul> <li>list item 1</li> <li>list item 2</li> <li>list item 3</li> <li>list item 4</li> <li>list item 5</li> </ul> </body> </html>
内容过滤选择器:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ /* * 选择内容包含'John'的元素 * $("div:contains('John')").css("color","red"); * * 选择空内容的元素 * $("div:empty").text("aaa"); * * 选择包含指定内容的元素 * $("div:has(p)").text("bbb"); * * 选择有内容的元素 * $("p:parent").text("ccc"); */ }) </script> </head> <body> <div>John Resig</div> <div>George Martin</div> <div>Malcom John Sinclair</div> <div>J. Ohn</div> <div><p>玛卡巴卡</p></div> <div><p></p></div> <div></div> </body> </html>
可见性过滤选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ //选择隐藏的元素 $("tr:hidden").css("display","block"); // 选择显示的元素 $("tr:visible").text("Value3"); $("tr:visible").css("display","none") }) </script> </head> <body> <table> <tr style="display:none"> <td>Value 1</td> </tr> <tr> <td>Value 2</td> </tr> </table> </body> </html>
属性过滤选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ //选择有指定属性的元素 $("input[name]").attr("checked",true); //选择有指定属性+值的元素 $("input[name='newsletter']").attr("checked", true); //选择除了属性+值的元素 $("input[name!='newsletter']").attr("checked", true); //选择属性值以某个开头的元素 $("input[name^='news']").attr("checked", true); //选择属性值以某个结尾的元素 $("input[name$='ter']").attr("checked", true); //选择属性值包含某个字符串的元素 $("input[name*='e']").attr("checked", true); //选择指定多个属性的元素 $("input[id][name='newsletter']").attr("checked", true); }) </script> </head> <body> <input type="checkbox" name="newsletter" value="Hot Fuzz" id="box01"/> <input type="checkbox" name="newsletter" value="Cold Fusion" /> <input type="checkbox" name="accept" value="Evil Plans" /> </body> </html>
子元素
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ // 选择第几个元素(从1开始) $("ul li:nth-child(2)").css("color","red"); // 选择第一个子元素的元素 $("ul li:first-child").css("color","red"); // 选择最后一个子元素的元素 $("ul li:last-child").css("color","red"); // 选择仅有一个子元素的元素 $("ul li:only-child").css("color","red"); }) </script> </head> <body> <ul> <li>John</li> <li>Karl</li> <li>Brandon</li> </ul> <ul> <li>Glen</li> <li>Tane</li> <li>Ralph</li> </ul> <ul> <li>玛卡巴卡</li> </ul> </body> </html>
表单选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ /* * :input获取表单里所有的表单组件(输入框、密码框、单选框、多选框、文本域、下拉列表、文件组件、提交按钮、重置按钮、普通按钮...) * $(":input").css("display","none"); */ $(":text").css("display","none"); $(":password").css("display","none"); $(":checkbox").css("display","none"); $(":button").css("display","none"); $(":image").css("display","none"); $(":radio").css("display","none"); $(":file").css("display","none"); $(":submit").css("display","none"); $(":reset").css("display","none"); }) </script> </head> <body> <form> <input type="button" value="Input Button"/> <input type="checkbox" /> <input type="file" /> <input type="hidden" /> <input type="image" /> <input type="password" /> <input type="radio" /> <input type="reset" /> <input type="submit" /> <input type="text" /> <select><option>Option</option></select> <textarea>文本域</textarea> <button>Button</button> </form> </body> </html>
表单对象属性过滤选择器
$(function(){ //获取不可用的元素 $("input:disabled").attr("value","aaaaa"); //获取可用的元素 $("input:enabled").attr("value","bbbbb"); $("input[type='button']").click(function(){ //获取选中状态的单选框 var v = $(":radio:checked").attr("value"); alert(v); }) //获取选中状态的下拉列表 var v = $("select option:selected").attr("value"); alert(v); }) })
扩展:
监听器:$(“#head”).click(function() {})
设置CSS样式:$(“#content”).css(“display”, “none”);
获取到CSS 内key 的value: $(“#content”).css(“display”)
设置属性:$(“#head span img”).attr(“src”, “…/img/open.gif”);
获取到属性值:$(“#head span img”).attr(“src”);
设置内容:$(this).html(“更多”); $(this).text(“更多”);
获取内容:$(this).html(); $(this).text();
选择器综合案例:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>选择</title> <style type="text/css"> body{font-size:13px} #all{border:solid 1px #666;width:320px;overflow:hidden} #all #head{background-color:#eee;padding:8px;height:18px;cursor:hand} #all #head h3{padding:0px;margin:0px;float:left} #all #head span{float:right;margin-top:3px} #all #content{padding:8px} #all #content ul {list-style-type:none;margin:0px;padding:0px} #all #content ul li{ float:left;width:95px;height:23px;line-height:23px} #all #btn{float:right;padding-top:5px;padding-bottom:5px} </style> <script type="text/javascript" src="../js/jquery-1.8.2.js"> </script> <script type="text/javascript"> $(function(){ $("img").click(function(){ if($(this).attr("src") == "../img/up.bmp"){ $(this).attr("src","../img/down.bmp"); $("#content").css("display","none"); }else if($(this).attr("src") == "../img/down.bmp"){ $(this).attr("src","../img/up.bmp"); $("#content").css("display","block"); } }) $("#btn>a").click(function(){ if($(this).text() == "简化"){ $(this).text("更多"); $("ul>li:gt(5):not(:last)").css("display","none"); }else if($(this).text() == "更多"){ $(this).text("简化"); $("ul>li:gt(5):not(:last)").css("display","block"); } }) }) </script> </head> <body> <div id="all"> <div id="head"> <h3>学科分类</h3> <span><img src="../img/up.bmp"/></span> </div> <div id="content"> <ul> <li> <a href="#">JavaEE</a><i> (1110) </i></li> <li> <a href="#">PHP</a><i> (230) </i></li> <li> <a href="#">BIG</a><i> (1430) </i></li> <li> <a href="#">Android</a><i> (1560) </i></li> <li> <a href="#">IOS</a><i> (870) </i></li> <li> <a href="#">H5</a><i> (1460) </i></li> <li> <a href="#">VR</a><i> (1450) </i></li> <li> <a href="#">小程序</a><i> (1780) </i></li> <li> <a href="#">演讲</a><i> (930) </i></li> <li> <a href="#">PPT</a><i> (3450) </i></li> <li> <a href="#">Word</a><i> (980) </i></li> <li> <a href="#">其他</a><i> (3230) </i></li> </ul> <div id="btn"> <a href="#">简化</a> </div> </div> </div> </body> </html>
jQuery对象与JS对象互换
JS->jQuery
设置监听器,点击后切换内容。
//JS对象 var jsObj = document.getElementsByTagName("p")[0]; //jQuery对象 $(jsObj).click(function(){ $(this).text("xxx"); })
jQuery->JS
获取到对象数组。
//jQuery对象 转 JS数组(jQuery获取到的都是数组) var jsArr = $("#p1"); var jsObj = jsArr[0]; jsObj.onclick = function(){ this.innerText = "xxx"; }
jQuery操作DOM
操作内容
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ //操作内容 $("#btn01").click(function(){ console.log($("p").text()); }); $("#btn03").click(function(){ $("p").text("<h1>合口合口合口</h1>"); }); $("#btn02").click(function(){ console.log($("p").html()); }); $("#btn04").click(function(){ $("p").html("<h1>合口合口合口</h1>"); }); }) </script> </head> <body> <button id="btn01">获取内容-text</button> <button id="btn02">获取内容-html</button> <button id="btn03">设置内容-text</button> <button id="btn04">设置内容-html</button> <p>口合口合口合</p> </body> </html>
操作属性
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("#username").blur(function(){ if($(this).attr("value").trim()==""){ $("#username+span").text("账号不能为空"); $("#username+span").css("color","red"); }else{ $("#username+span").text(""); } }); $("#password").blur(function(){ if($(this).val().trim()==""){ $("#password+span").text("密码不能为空"); $("#password+span").css("color","red"); }else{ $("#password+span").text(""); } }); $("#repassword").blur(function(){ if($(this).val().trim()==""){ $("#repassword+span").text("密码不能为空"); $("#repassword+span").css("color","red"); }else if($(this).val().trim()!=$("#password").val().trim()){ $("#repassword+span").text("和密码不一致"); }else{ $("#repassword+span").text(""); } }); }) </script> </script> </head> <body> <form> 账号:<input type="text" id="username" name="username" /><span></span><br /> 密码:<input type="password" id="password" name="password" /><span></span><br /> 确认密码:<input type="password" id="repassword" name="repassword" /><span></span><br /> 提交:<input type="submit" value="提交" /><br /> </form> </body> </html>
操作样式
需求:点击图片,使图片自动变大,再次点击变小
方法一:
通过css设置类样式,利用jQuery判断是否有class属性,没有添加,有去除。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .big{ width: 100px; height: 100px; } </style> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("img").click(function(){ if($("img[class='big']").length==0){ $(this).addClass("big"); }else{ $(this).removeClass("big"); } }) }) </script> </head> <body> <img src="../img/森林.jpg" width="50px" height="50px" /> </body> </html>
方法二:
同理,但是使用hasClass()方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .big{ width: 100px; height: 100px; } </style> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("img").click(function(){ if(!$("img").hasClass("big")){ $(this).addClass("big"); }else{ $(this).removeClass("big"); } }) }) </script> </head> <body> <img src="../img/森林.jpg" width="50px" height="50px" /> </body> </html>
方法三:
使用toggleClass()方法,判断是否有class属性,没有就添加,有则移除。<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .big{ width: 100px; height: 100px; } </style> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("img").click(function(){ //判断元素是否有big的class属性,如果没有就添加,如果有就删除 $(this).toggleClass("big"); }) }) </script> </head> <body> <img src="../img/森林.jpg" width="50px" height="50px" /> </body> </html>
操作节点
添加元素
append(), appendTo(), prepend(), prependTo(), after(), insertAfter(), before(), insertBefore()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("#btn01").click(function(){ var newImg = $("<img src='../img/湖泊黄昏.jpg' width='50px' height='50px' />"); // //添加到头部 // $("#manager").prepend($(newImg)); $(newImg).prependTo($("#manager")); // //添加到尾部 // $("#manager").append($(newImg)); $(newImg).appendTo($("#manager")); // //添加到div的前面(并列关系) // $("#manager").before($(newImg)); $(newImg).insertBefore($("#manager")); //添加到div的后面(并列关系) // $("#manager").after($(newImg)); $(newImg).insertAfter($("#manager")); }) }) </script> </head> <body> <button type="button" id="btn01">添加节点</button> <button type="button" id="btn02">删除节点</button> <div id="manager"> <img src="../img/森林.jpg"/> </div> </body> </html>
遍历元素
each()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("img").each(function(index){ console.log(index); $(this).click(function(){ $(this).attr("src","../img/蛋糕.jpg") }) }) }) </script> </head> <body> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> <img src="../img/森林.jpg"/> </body> </html>
节点案例
全选影响单个选项:全选点击事件->遍历选中/取消单个选项
单选影响全选:遍历单个选项,设置点击事件->判断选中数组长度是否和选项数组长度相同,相同选中全选,没选中取消选项。
删除:删除按钮设置点击事件->遍历选中的选项,删除整行;并将全选取消选中。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ //全选影响其他单选 $("#chkAll").click(function(){ if($(this).attr("checked")){ $("td>input[type='checkbox']").attr("checked","checked"); }else{ $("td>input[type='checkbox']").removeAttr("checked"); } }) //单选影响全选 $("td>input[type='checkbox']").each(function(){ $(this).click(function(){ if($("td>input[type='checkbox']").length==$("td>input[type='checkbox']:checked").length){ $("#chkAll").attr("checked","checked"); }else{ $("#chkAll").removeAttr("checked"); } }) }) //删除 $("#btnDel").click(function(){ $("td>input[type=checkbox]:checked").each(function(){ var value = $(this).val(); $("tr[id='"+value+"']").remove(); }) //删除之后取消全选 $("#chkAll").removeAttr("checked"); }) }) </script> </head> <body> <table border="1"> <tr> <th>选项</th> <th>编号</th> <th>姓名</th> <th>性别</th> </tr> <tr id="1"> <td><input type="checkbox" value="1"/></td> <td>1001</td> <td>小明</td> <td>男</td> </tr> <tr id="2"> <td><input type="checkbox" value="2"/></td> <td>1002</td> <td>明明</td> <td>女</td> </tr> <tr id="3"> <td><input type="checkbox" value="3"/></td> <td>1003</td> <td>小红</td> <td>女</td> </tr> <tr> <td colspan="4"> <span><input id="chkAll" type="checkbox" />全选</span> <span><input id="btnDel" type="button" value="删除"/></span> </td> </tr> </table> </body> </html>
jQuery事件
JS中有的事件jQuery中都有,但jQuery还有其他的事件
冒泡事件
将事件对象向上(父级元素)传递
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ /* * 冒泡事件:将事件对象向上(父级元素)传递 */ $("#manager").click(function(){ alert("div被点击了"); }) $("#btn").click(function(event){ alert("按钮被点击了"); //阻止冒泡现象 -- 方式一 //event.stopPropagation(); //阻止冒泡现象 -- 方式二 return false; }) }) </script> </head> <body> <div id="manager"> <button id="btn">普通按钮</button> </div> </body> </html>
绑定及解绑事件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ // $("img").click(function(){ // console.log("图片被点击了"); // }) // $("img").mouseout(function(){ // console.log("鼠标移出了图片"); // }) //绑定事件:多个事件功能不一致 // $("img").bind({ // "click":function(){ // console.log("图片被点击了"); // }, // "mouseout":function(){ // console.log("鼠标移出了图片"); // } // }) //绑定事件:多个事件功能一致 $("img").bind("click mouseout",function(){ console.log("用良心做教育"); }) $("#btn").click(function(){ //解绑所有事件 //$("img").unbind(); //解绑指定事件 $("img").unbind("mouseout"); }) }) </script> </head> <body> <button id="btn">解绑事件</button> <img src="../img/..jpg" width="100px" height="100px" /> </body> </html>
切换事件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("img").hover( //设置鼠标移入移出的切换事件 function(){ console.log("aaa"); },function(){ console.log("bbb"); } ) }) </script> </head> <body> <img src="../img/石像.jpg"width="100px" height="100px" /> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-1.8.2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> $(function(){ $("img").toggle( //设置鼠标移入移出的切换事件 function(){ console.log("aaa"); },function(){ console.log("bbb"); } ) }) </script> </head> <body> <img src="../img/石像.jpg"width="100px" height="100px" /> </body> </html>
事件案例-表单提交
//提交事件 $("#registerForm").submit(function(){ bool = true; //触发指定事件 $("#username").trigger("blur"); $("#password").trigger("blur"); $("#repassword").trigger("blur"); return bool; })
事件案例-选项卡
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> ul{ margin: 0; padding: 0; list-style: none; } #tab li { text-align: center; float: left; padding: 5px; margin-right: 2px; width: 50px; cursor: pointer } #tab li.tabFocus { width: 50px; font-weight: bold; background-color: powderblue; border: solid 1px #666; border-bottom: 0; z-index: 100; position: relative } #content { width: 260px; height: 80px; padding: 10px; background-color: powderblue; clear: left; border: solid 1px #666; position: relative; top: -1px } #content li { display: none } #content li.contentFocus { display: block } </style> <script type="text/javascript" src="../js/jquery-1.8.2.js"> </script> <script type="text/javascript"> $(function() { $("#tab>li").each(function(index){ $(this).click(function(){ $("#tab>li[class='tabFocus']").removeClass("tabFocus"); $(this).addClass("tabFocus"); $("#content>li[class='contentFocus']").removeClass("contentFocus"); $("#content>li:eq("+index+")").addClass("contentFocus"); }) }) }) </script> </head> <body> <ul id="tab"> <li class="tabFocus">javaee</li> <li>php</li> <li>.NET</li> </ul> <ul id="content"> <li class="contentFocus">企业级应用占据领导地位</li> <li>中小型网站首选</li> <li>微软出品</li> </ul> </body> </html>