jQuery基础知识梳理
一、jQuery简介
1.web前端的知识回顾
HTML 决定了⽹⻚的内容
CSS 决定了标签的样式
JavaScript 决定了⽹⻚的功能:对标签属性、样式的操作、DOM节点操作、ajax异步交互
◦ 在使⽤JS完成对应功能时,需要程序员⾃⾏完成代码的编写,开发相对还是⽐较繁琐的
2.jQuery是什么
jQuery就是⼀个JavaScript的框架,简化了JS的语法和操作,定义了HTML属性操作、样式操作、
DOM操作等相关函数,实现了对ajax异步请求封装。
jQuery就是⼀个提供了很多预定义函数的JS⽂件。
3.jQuery⼊⻔使⽤
1、下载jQuery函数库
官⽹:https://jquery.com/
下载:https://jquery.com/download/
2.在⽹⻚中引⼊jQuery⽂件
1、本地⽂件引⼊
• 先下载jquery.js⽂件
• 将jquery.js⽂件拷⻉粘贴到web项⽬中
• 在html⽂件或者jsp⽂件,通过script标签引⼊jQuery⽂件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <!-- 引⼊jQuery --> <script type="text/javascript" src="js/jquery-3.6.0.js"></script </head> <body> </body> </html>
复制
2.CDN引⼊
CDN 内容分发⽹络,将jQuery.js⽂件提前部署到⼀个服务器,我们可以通过jquery⽂件在服务器上
的访问路径来引⼊此jquery.js⽂件:
• jQuery官⽅提供的CDN地址:
◦ http://code.jquery.com/jquery-3.6.0.js
◦ http://code.jquery.com/jquery-3.6.0.min.js
• 在html、jsp⽂件中,通过script标签直接引⼊jquery的cdn地址即可
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <!-- 引⼊jQuery --> <script type="text/javascript" src="http://code.jquery.com/jquer </head> <body> </body> </html
复制
使⽤⽰例:点击按钮隐藏图⽚
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <!-- 引⼊jQuery --> <script type="text/javascript" src="http://code.jquery.com/jquer </head> <body> <img id="img1" src="imgs/img01.png" height="200"/><br/> <button id="btn">测试</button> <script type="text/javascript"> //点击按钮隐藏图⽚ $("#btn").click(function(){ $("#img1").hide(); }); </script> </body> </html>
复制
二、jQuery核⼼函数
https://www.94xh.com/index.html
1、核⼼函数
jQuery() 函数,选择器函数, ⽤于获取HTML⽂档中的元素 ,简写为 $()
jQuery([selector,[context]]) 根据特定的规则从HTML⽂档中获取元素(特定的规则:选择器语法)
$("#btn"); //获取当前⽂档中id=btn的元素 $(".inputStyle"); //获取当前⽂档中class=inputStyle的元素
复制
jQuery(html,[ownerDocument]) 创建⼀个新的HTML元素
$("<textarea></textarea>")
复制
jQuery(fn) 表⽰当⽹⻚⽂档加载完毕执⾏fn, 等价于 jQuery(document).ready(fn);
$(function(){
//给id=btn的按钮绑定点击事件
$("#btn").click(function(){
alert(111);
});
});
复制
$(selector).事件(fn): 当选择器选择的元素发⽣对应的事件就执⾏fn
//1.当前⽂档加载完毕执⾏fn $(document).ready(fn); //2.当id=btn的元素发⽣点击事件,就执⾏fn $("#btn").click(fn);
复制
2、选择器
在 jQuery() 函数的参数中传递不同的选择器表达式,就可以获取⽹⻚⽂档中不同的元素
1、基本选择器
ID选择器: $(“#id”)
// 获取⽹⻚⽂档中id=btn的元素,相当于 document.getElementById("id") $("#btn")
复制
标签选择器: $(“tagName”)
// 获取⽹⻚⽂档中所有的img标签元素,相当于 document.getElementsByTagName("tagName"); $("img")
复制
class选择器: $(“.class”)
//获取⽹⻚⽂档中所有class=inputStyle的元素,相当于 document.getElementsByClassName("i $(".inputStyle")
复制
2、复合选择器
复合选择器:将多个基本选择器通过特定的符号进⾏连接,以实现更为精确的选择
• $(“selector1 selector2”) 选择所有selector1 匹配的元素 ⾥⾯ 的匹配selector2的元素
• $(“selector1,selector2”) 选择所有匹配selector1 和 selector2的元素(并集)
• $(“selector1 > selector2”) 选择匹配selector1元素的 ⼦标签中 匹配selector2的元素
• $(“selector1 + selector2”) 匹配所有 紧接 在 selector1 元素后的 selector2元素
• $(“selector1 ~ selector2”) 匹配所有在 selector1 元素后的 selector2元素
3、选择器筛选
在选择器匹配的元素中根据特定的筛选条件(索引、属性)更灵活的选择要操作的元素
选择器筛选语法 | 说明 |
---|---|
$("selector: first ") | 匹配selector选择的元素集合中的第⼀个 |
$("selector: last ") | 匹配selector选择的元素集合中的最后⼀个 |
$("selector: odd ") | 匹配selector选择的元素集合中索引为奇数的元素(1,3,5,7,…) |
$("selector: even ") | 匹配selector选择的元素集合中索引为偶数的元素(0,2,4,6,…) |
$("selector: eq(index) ") | 匹配selector选择的元素集合中索引为index的元素 |
$("selector: lt(index) ") | 匹配selector选择的元素集合中索引⼩于index的元素 |
$("selector: gt(index) ") | 匹配selector选择的元素集合中索引⼤于index的元素 |
$("selector [attrName=attrValue] ") | 匹配selector选择的元素集合中attrName属性值为attrValue |
$("selector [attrName!=attrValue] ") | 匹配selector选择的元素不是集合中attrName属性值为attrValue |
3、筛选函数
jQuery中提供了⼀些函数,对选择器匹配的元素集合进⾏筛选
筛选函数 | 说明 |
---|---|
$(“selector”). first() | 从选择器匹配的元素集合中选择第⼀个元素 |
$(“selector”). last() | 从选择器匹配的元素集合中选择最后⼀个元素 |
$(“selector”). eq(index) | 匹配selector选择的元素集合中索引为index的元素 |
$(“selector1”). filter(“selector2”) | 从selector1匹配的元素集合中选择匹配selector2的元素 |
$(“selector”). is(tag) | 判断选择器选择的元素是否为指定的标签 |
$(“selector1”). find(selector2) | 从selector1匹配的元素集合中的元素⾥⾯,选择匹配 |
4、属性操作函数
jQuery提供了⼀组函数⽤于对HTML标签进⾏属性操作
attr() : 获取/设置元素属性
//1.获取元素属性值 var v1 = $("img").attr("src"); var v2 = $("img").attr("width"); //2.设置元素属性 $("img").attr("src","imgs/img02.png"); $("img").attr("width",200);
复制
val() :获取/设置元素的value属性值
//1.获取元素value属性值 var v3 = $("#userName").val(); //2.设置元素的value属性值 $("#userName").val("这是设置的值");
复制
removeAttr(‘属性名’) :移除元素属性
//removeAttr() 移除元素属性 $("img").removeAttr("width");
复制
prop({}) :同时设置元素的多个属性
$("#img2").prop({width:200,src:"imgs/img03.png",alt:"看不到吗?"});
复制
addClass(styleName)、removeClass(styleName)、toggleClass(styleName) 操
作标签class属性值
//addClass() 为元素class属性添加⼀个样式名 $("#div1").addClass("style1"); //removeClass() 删除元素class属性中指定的样式名 $("#div1").removeClass("style2"); //toggleClass 从元素的class属性中添加/移除指定的样式名 $("#div1").toggleClass("style1");
复制
text() 、 html() 相当于innerHTML操作
text(“”) : 将参数以⽂本的形式设置到选择器匹配元素的⾥⾯,即使设置的内容是HTML标签,也
不会当成标签解析
html(“”) : 将参数以HTML标签的形式设置到匹配的元素⾥⾯,参数内容会被浏览器解析为
HTML标签,显⽰对应的标签效果。
$("#div2").html("<img src='imgs/img02.png' height='80'/>"); //会在div中显⽰⼀张图 $("#div2").text("<img src='imgs/img02.png' height='80'/>"); //会将参数直接以⽂本形
复制
5、样式操作函数
css() 设置/获取元素的样式属性
//1.设置标签的样式 $("#div1").css("width","200px"); $("#div1").css("height","200px"); $("#div1").css("border","1px red solid"); //多个样式也可以⼀起设置 $("#div1").css({width:"100px",height:"100px",background:"#ff0000"}); //2.获取标签指定的样式 var v = $("#div1").css("height");
复制
position() 获取元素的位置信息
var position = $("#div1").position(); console.log(position.top); console.log(position.left);
复制
获取尺⼨的函数:
◦ width() / height();
◦ innerWitdh() / innerHeight();
◦ outerWidth()/ outerHeight();
三、jQuery进阶—ajax技术
1、⽂档处理函数
1、添加⼦节点
• append
• appendTo
// parent.append(child) : 在⽗节点中拼接⼦节点 (⼦节点会添加到⽗节点中的最后) // child可以是⼀个HTML标签字符串,表⽰新建⼀个HTML元素拼接到parent // child也可以是通过选择器选择的当前⽂档中的元素(被选择的元素发⽣移动) $("#div1").append("<img src='imgs/img03.png' height='100'/>"); // child.appendTo(parent) : 将⼦节点拼接到⽗节点⾥⾯ $("<img src='imgs/img03.png' height='100'/>").appendTo($("#div1"));
复制
2、插⼊节点
• before
• insertBefore
// node1.before(node2): 在node1的前⾯插⼊node2 $("#img2").before("<img src='imgs/img03.png' height='100'/>"); // node2.insertBefore(node1): 将node2插⼊到node1之前 $("<img src='imgs/img03.png' height='100'/>").insertBefore($("#img2"));
复制
• after
• insertAfter
// node1.after(node2) : 在node1的后⾯插⼊node2 //$("#img1").after("<img src='imgs/img03.png' height='100'/>"); node2.insertAfter(node1): 将node2插⼊到node1的后⾯ $("<img src='imgs/img03.png' height='100'/>").insertAfter($("#img1"));
复制
3、替换节点
• replaceWith
// node1.replaceWith(node2) : 使⽤node2替换node1 $("#img2").replaceWith("<img src='imgs/img03.png' height='100'/>");
复制
4、删除节点
• empty
//parent.empty():清楚当前标签中所有的⼦标签 $("#div1").empty(); $("body").empty();
复制
• remove
// node.remove() :删除当前节点 $("#img1").remove();
复制
5、节点包裹
• wrap
• unwrap
//node1.wrap(node2) : 使⽤node2将node1包裹起来 $("#img3").wrap("<div style='border:2px pink solid'></div>") //node.unwrap() : 删除当前标签的⽗标签 $("#img4").unwrap();
复制
2、事件函数
⽤于为⻚⾯中的元素绑定事件
元素事件绑定语法:
$("selector").事件函数(fn); //例如: 当id=btn的元素发⽣点击事件时,就执⾏对应的fn $("#btn").click(function(){ });
复制
1、⽂档加载事件
ready() ⽂档加载完毕时触发
$(document).ready(function(){ //alert(1); });
复制
2、焦点事件
• blur() 元素失去焦点时触发
$("#userName").blur(function(){ console.log("---输⼊框失去焦点"); });
复制
• focus() 元素获得焦点时触发
$("#userName").focus(function(){ console.log("---输⼊框获得焦点"); });
复制
3、⿏标事件
• mousedown() ⿏标左键按下
• mouseup() ⿏标左键松开
• mouseenter() ⿏标指针穿过• mouseleave() ⿏标离开 (与 mouseout 事件不同,只有在⿏标指针离开被选元素时,才会触发
mouseleave 事件。如果⿏标指针离开任何⼦元素,同样会触发 mouseout 事件)
• mouseout() ⿏标离开
• mouseover() ⿏标指针移到元素上
• mousemove() ⿏标指针在元素上移动
4、键盘事件
• keydown() 按键按下
• keyup() 按键松开
5、点击事件
• click() ⿏标单击事件
• dbclick() ⿏标双击事件
6、内容改变
• change() 输⼊框或下拉菜单等内容被改变
<select id="city"> <option value="北京">北京</option> <option value="上海">上海</option> <option value="武汉">武汉</option> </select> <script type="text/javascript"> //输⼊框 和 下拉菜单 等内容可被改变的元素 $("#city").change(function(){ console.log("内容被改变了"); }); </script>
复制
7、关闭/打开事件
• off(“事件名称”) 关闭元素的事件
• on(“事件名称”,fn) 重新打开/绑定元素的事件
<button id="btn2">关闭事件</button> <button id="btn3">打开事件</button> <select id="city"> <option value="北京">北京</option> <option value="上海">上海</option> <option value="武汉">武汉</option> </select> <script type="text/javascript"> //输⼊框 和 下拉菜单 等内容可被改变的元素 $("#city").change(function(){ console.log("内容被改变了"); }); //关闭事件 $("#btn2").click(function(){ $("#city").off("change"); }); //重新打开事件 $("#btn3").click(function(){ $("#city").on("change",function(){ console.log("重新被打开的change事件"); }); }); </script>
复制
8、获取事件对象
• 在事件函数的参数fn添加⼀个参数,可以获取当前事件的event对象
$("#city").change(function(event){ //event表⽰事件对象 console.log(event); //$(this)表⽰发⽣事件的元素 });
复制
3、效果函数
• 元素的隐藏与显⽰
• 动画
1、隐藏与显⽰
以下显⽰与隐藏的函数都可以设置⼀个时间参数,⽤于设置显⽰隐藏的速度
• 时间参数可以是 slow / normal / fast 单词
• 也可以是具体的数值,单位是ms
• show/hide/toggle
<img src="imgs/img01.png" height="200" /> <img src="imgs/img02.png" height="200" /> <img src="imgs/img03.png" height="200" /> <hr> <button id="btn1">测试hide()</button> <button id="btn2">测试show()</button> <button id="btn3">测试toggle()</button> <script type="text/javascript" src="js/jquery-3.6.0.js"></script> <script type="text/javascript"> // hide() 隐藏 $("#btn1").click(function(){ $("img").hide(); // show() 显⽰ $("#btn2").click(function(){ $("img").show(); }); // toggle() 如果原来显⽰就执⾏隐藏,如果原来隐藏就执⾏显⽰ $("#btn3").click(function(){ $("img").toggle(); }); </script>
复制
• slideDown/slideUp/slideToggle
放⼤缩⼩的显⽰与隐藏
<button id="btn4">测试slideUp()</button> <button id="btn5">测试slideDown()</button> <button id="btn6">测试slideToggle()</button> <script type="text/javascript" src="js/jquery-3.6.0.js"></script> <script type="text/javascript"> // slideUp() 缩起来 $("#btn4").click(function(){ $("img").slideUp(); }); // slideDown() 展开 $("#btn5").click(function(){ $("img").slideDown(); }); // slideToggle() 如果原来显⽰就执⾏隐藏,如果原来隐藏就执⾏显⽰ $("#btn6").click(function(){ $("img").slideToggle(); }); </script>
复制
• fadeOut/fadeIn/fadeToggle/fadeTo
淡⼊淡出的显⽰与隐藏
<button id="btn7">测试fadeOut()</button> <button id="btn8">测试fadeIn()</button> <button id="btn9">测试fadeToggle()</button> <button id="btn10">测试fadeTo()</button> <script type="text/javascript" src="js/jquery-3.6.0.js"></script> <script type="text/javascript"> //fadeOut 淡出 $("#btn7").click(function(){ $("img").fadeOut(); }); //fadeIn 淡⼊ $("#btn8").click(function(){ $("img").fadeIn(); }); //fadeToggle $("#btn9").click(function(){ $("img").fadeToggle(); }); //fadeTo 将元素的透明度改变到指定的值 // 参数1:速度 // 参数2:透明度 $("#btn10").click(function(){ $("img").fadeTo(3000,0.5); }); </script>
复制
2、动画播放与停⽌
• animate
• stop
<img src="imgs/img01.png" id="img4" style="width: 200px; height: 200px; border-radius: 50%" /> <button id="btn11">测试动画</button> <button id="btn12">停⽌动画</button> <script type="text/javascript"> //params:⼀组包含作为动画属性和终值的样式属性和及其值的集合 //speed:三种预定速度之⼀的字符串("slow","normal", or "fast")或表⽰动画时⻓的毫秒 数值(如:1000) //easing:要使⽤的擦除效果的名称(需要插件⽀持).默认jQuery提供"linear" 和 "swing". //fn:在动画完成时执⾏的函数,每个元素执⾏⼀次。 $("#btn11").click(function(){ $("#img4").animate({width:"300px",height:"300px"},5000); $("#img4").animate({width:"100px",height:"100px"},5000); }); $("#btn12").click(function(){ //在动画完成之前执⾏stop,,就让动画停⽌下来,保持当前状态 $("#img4").stop(); }); </script>
复制
4、AJAX (重要)
1、ajax()函数
$.ajax({ url:"请求url?param1=v1", //url ajax请求的⽬ 标服务器地址 type:"get|post", //type 指定请求 ⽅式(get|post) headers:{ //headers 设置请求头参数 key1:"value1", key2:"value2" }, data:{ //data 传递的参数 userName:"zhangsan", userPwd:"123456" }, contentType:"application/json", //contentType 请求信息的转码⽅式 processData:false, //processData 设置数据是 否压缩传输(⽂件上传设置为false) success:function(res){ //success ajax请求成功之后执⾏的回调函数,参数res 就是服务器返回的数据 }, error:function(e){ //error ajax请求出现错误执⾏的回调函数,参数 e表⽰异常信息对象 } })
复制
2、jQuery的异步交互实例
验证⽤⼾是否可⽤
regist.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> <script type="text/javascript" src="js/jquery-3.6.0.js"></script> </head> <body> <h3>⽤⼾注册</h3> <form action="" method="post"> <p> 帐号:<input type="text" id="userName"/><label id="tipsLabel"></label> <input type="button" value="检测" id="checkBtn"/> </p> <p>密码:<input type="password"/></p> <p>确认密码:<input type="password"/></p> <p>姓名:<input type="text"/></p> <p>电话:<input type="text"/></p> <p><input type="submit" value="提交注册"/></p> </form> <script type="text/javascript"> $("#checkBtn").click(function(){ //发送ajax请求,验证⽤⼾名是否可⽤ var name = $("#userName").val(); $.ajax({ url:"CheckUserNameServlet?userName="+name, //url传递⽤⼾名 type:"get", success:function(res){ if(res.code == 1000){ $("#tipsLabel").replaceWith("<label id='tipsLabel' style='color:green'>⽤⼾名可⽤!</label>"); }else{ $("#tipsLabel").replaceWith("<label id='tipsLabel' style='color:red'>⽤⼾名不可⽤!</label>"); } } }); }); </script> </body> </html>
复制
- CheckUserNameServlet
@WebServlet("/CheckUserNameServlet") public class CheckUserNameServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.接收⽤⼾名 String name = request.getParameter("userName"); //2.判断是否可⽤ boolean b = !name.startsWith("admin"); //3.响应ajax请求 response.setContentType("application/json;charset=utf-8"); response.setCharacterEncoding("UTF-8"); String jsonStr = b ? "{\"code\":1000,\"msg\":\"success\"}":" {\"code\":1001,\"msg\":\"fail\"}"; // {"code":1000,"msg":"success"} {"code":1001,"msg":"fail"} PrintWriter out = response.getWriter(); out.println(jsonStr); out.flush(); out.close(); } }
复制
3、get(url,params,fn,type)
发送get⽅式的异步请求
// 参数1:请求的url // 参数2:传递的参数 // 参数3:回调函数 // 参数4:服务器返回的数据的格式 (json,html,text,xml) $.get("CheckUserNameServlet",{userName:name},function(res){ if(res.code == 1000){ $("#tipsLabel").replaceWith("<label id='tipsLabel'>⽤⼾名可⽤! </label>"); }else{ $("#tipsLabel").replaceWith("<label id='tipsLabel'>⽤⼾名不可⽤! </label>"); } }, "json");
复制
4、post(url,params,fn,type)
发送post⽅式的异步请求
// 参数1:请求的url // 参数2:传递的参数 // 参数3:回调函数 // 参数4:服务器返回的数据的格式 (json,html,text,xml) $.post("CheckUserNameServlet",{userName:name},function(res){ if(res.code == 1000){ $("#tipsLabel").replaceWith("<label id='tipsLabel'>⽤⼾名可⽤! </label>"); }else{ $("#tipsLabel").replaceWith("<label id='tipsLabel' >⽤⼾名不可⽤! </label>"); } },"json");
复制