jQuery快速入门
一、jQuery
1、jQuery是什么?
-
是一个工具,简单方便的实现一些DOM操作
-
jQuery使用户能够更方便地处理HTML、Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。
- jQuery是一个轻量级、兼容多游览器的JavaScript库。
- jQuery能做的事儿:
- 查找标签
- 修改样式
- 事件
- Ajax
- 插件机制
2、jQuer的优势
-
一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
-
丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
-
链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
-
事件、样式、动画支持。jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
-
Ajax操作支持。jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
-
跨浏览器兼容。jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
-
插件扩展开发。jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。
3、jQuery版本
-
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版。目前该版本是官方主要更新维护的版本。
维护IE678是一件让人头疼的事情,一般我们都会额外加载一个CSS和JS单独处理。值得庆幸的是使用这些浏览器的人也逐步减少,PC端用户已经逐步被移动端用户所取代,如果没有特殊要求的话,一般都会选择放弃对678的支持。
二、jQuery对象
jQuery对象就是通过jQuery包装DOM对象后产生的对象,jQuery对象是jQuery独有的。如果一个对象是jQuery对象,那么它就可以使用jQuery里的方法:例如$("#id").html()。
一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$。
注意:虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法调用DOM的方法,DOM也无法调用jQuery的方法。
var $variable = jQuery对像 var variable = DOM对象
但是可以将jQuery互相转换对象:
//使用jQuery查找到的是一个列表第一个就是DOM对象 var dom = $("#id")[0]; //接着就可以使用DOM方法了 dom.innerHTML
//将DOM转为jQuery对象使用jQuery方法 $(dom).html()
三、jQuery基础语法
$(selector).action()
jQuery下载链接:jQuery官网
中文文档:jQuery AP中文文档
导入jQuery
<script src="jquery-3.3.1.min.js"></script>
四、查找标签
1、基本选择器
- id选择器
$("#i1") //根据id进行选择
- 标签选择器:
$("a") //标签名例如div、a..........
- class选择器:
$(".test") //.类名
- 配合使用(类似取交集并集)
$("a.test") //标签.类名 找到有test类并且是a标签
- 所有元素选择器:
$("*")
- 组合选择器:
$("#i1,a,div") //找到所有包含i1、a、div的元素
2、层级选择器:
- x和y可以为任意选择器
$("x y"); // x的所有后代y $("x > y"); // x的所有儿子y $("x + y"); // 找到所有紧挨着x后面的y $("x ~ y"); // x之后所有的兄弟y
3、基本筛选器:
- first -->取第一个值
$("#ul > li:first ") //取ul下的所有li的第一个li
- last -->取最后一个
$("#ul > li:first ") //取ul下的所有li的最后一个li
- eq(index) -->取索引为index的那个元素
$("ul > li:eq(3)") //取ul下的所有li的第四个li
- even -->匹配所有索引值为偶数的元素,从 0 开始计数
$("div > a:even"); //取div下的所有a,取索引值为偶数的元素
- odd -->匹配所有索引值为奇数的元素,从0开始计数
$("div > a:odd"); //取div下的所有a,取索引值为奇数的元素
- gt(index) -->匹配所有大于给定索引值得元素
$("div > a:gt(2)"); //取所有索引值大于2的值
- lt(index) -->匹配所有小于给定索引值得元素
$("div > a:lt(2)"); //取所有索引值小于2的值
- not(元素选择器) -->移除所有满足not条件的标签
$("div > a:not(#i1)"); //移除div下面所有a标签中id为i1的标签。
- has(元素选择器) -->选取所有包含一个或多个标签在内的标签 (指的是从后代元素找)
$("div:has(p)"); //找div标签子子孙孙里面有p标签的div标签。
4、属性选择器
- [attribute] -->含有attribute属性的
$("input[id]") //含有id属性的input标签
- [attribute=value] -->属性等于什么
$("input[type=submit]"); //type属性等于submit的input
- [attribute!=value] -->属性不等于
$("input[type!='submit']"); //type不等于submit的所有input
5、表单常用筛选
:text
:password
:file
:radio
:checkbox
:submit
:reset
:button
- 示例:
$(":checkbox") // 找到所有的checkbox
6、表单属性选择器
:enabled
:disabled
:checked
:selected
- 找到可用的input标签
<form>
<input name="email" disabled="disabled" />
<input name="id" />
</form>
$("input:enabled") // 找到可用的input标签
- 找到被选中的option:
<select id="s1"> <option value="beijing">北京市</option> <option value="shanghai">上海市</option> <option selected value="guangzhou">广州市</option> <option value="shenzhen">深圳市</option> </select> $(":selected") // 找到所有被选中的option
7、筛选器
- 下一个元素
$("#d1").next(); //取同级的下一个 $("#d2").nextAll(); //同一级下的所有 $("#d2").nextUntil("#p1") //从d2开始一直找到p1之前中间的所有
- 上一个元素
$("#p1").prev(); //上一个 $("#p1").prevAll(); //同一级上的所有 $("#p1").prevUntil("#i2") //从p1开始一直往上找,到i2为止,不包括i2
-
父亲元素
$("#d2").parent(); //父辈元素 $("#id").parents() // 查找当前元素的所有的父辈元素 $("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。
-
儿子和兄弟元素
$("#id").children();// 儿子们
$("#id").siblings();// 兄弟们
8、筛选器方法
.first() // 获取匹配的第一个元素 .last() // 获取匹配的最后一个元素 .not() // 从匹配元素的集合中删除与指定表达式匹配的元素 .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。 .eq() // 索引值等于指定值的元素
五、操作标签
1、样式操作
- 样式类
addClass();// 添加指定的CSS类名。 removeClass();// 移除指定的CSS类名。 hasClass();// 判断样式存不存在 toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。
示例:
$(".c1").addClass("c2"); $(".c1").removeClass("c2"); $(".c1").hasClass("c1"); $(".c1").toggleClass("c2");
- 直接操作CSS属性
var pEle = document.getElementById("p1") //原生DOM修改CSS属性 $("#p1").css("color","red") //jQuery修改CSS属性的值 //注意如果只输属性代表查看属性的值 ("color")
$("#p1").css({"border": "1px solid black", "color": "blue"}) //同时设置多个属性的值
- 位置
offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置 position()// 获取匹配元素相对父元素的偏移 scrollTop()// 获取匹配元素相对滚动条顶部的偏移 scrollLeft()// 获取匹配元素相对滚动条左侧的偏移
- 尺寸
$(".c1").height() //获取元素的高 $(".c1").width() //获取元素的宽 $(".c1").innerHeight(); //内容+padding $(".c1").innerWidth() $(".c1").outerHeight(); //内容+padding+边框 $(".c1").outerWidth() //注意: $(".c1").xxxxxxx(200) //里面加值,会修改属性的值。
2、文本操作
- 文本值
$("#d1").text() //获取匹配元素内容 $("#d1").text("注释是代码之母") //修改所有匹配元素的内容
- HTML代码
$("div").html(); // 取得第一个匹配元素的html内容 $("div").html("<h1>你好啊</h1>"); // 设置所有匹配元素的html内容
- 值
$("input[name='username']").val() // 取得第一个匹配元素的当前值 $("input[name='username']").(val) // 设置所有匹配元素的值 $("input[name='username']").val(['dream','male']); //多个值
3、属性操作
- 用于ID等或自定义属性:
$("#d1").attr("s1") //返回第一个匹配元素的属性值 $("#d1").attr("s1","great") //修改所有匹配元素的属性值 $("#d1").attr({"num":"50","tedian":"gay"}) //为所有匹配元素设置多个属性值 $("#d1").removeAttr("tedian") //从每一个匹配的元素中删除一个属性
- 注意:
在1.x及2.x版本的jQuery中使用attr对checkbox进行赋值操作时会出bug,在3.x版本的jQuery中则没有这个问题。为了兼容性,我们在处理checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")。
- 用于checkbox和radio
prop() // 获取属性 removeProp() // 移除属性
- 示例:全选、反选、取消
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>全选反选取消练习</title> </head> <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 () { // 让所有的checkbox选中 $("table :checkbox").prop("checked", true) }); // 取消 $("#b2").click(function () { // 让所有的checkbox取消选中 $("table :checkbox").prop("checked", false) }); // 反选 $("#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); // } // } for (let i=0;i<$checkboxs.length;i++){ var $currentCheckbox = $($checkboxs[i]); var flag = $currentCheckbox.prop("checked"); $currentCheckbox.prop("checked", !flag) } }); </script> </body> </html>
4、文档处理
六、事件
1、常用事件
click(function(){...}) hover(function(){...}) //鼠标放上去触发函数 blur(function(){...}) focus(function(){...}) change(function(){...}) keyup(function(){...})
-
hover示例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>hover</title> <style> a { text-decoration: none; } body { margin: 0; } ul { list-style-type: none; padding: 0; margin: 0; } .stick { height: 40px; width: 100%; background-color: #23282e; } .stick a { color: #cccccc; } .stick li { float: left; line-height: 40px; margin-right: 15px; padding: 0 10px; } .stick a:hover { color: #ff6700; } .stick li:hover { background-color: black; } .father { position: relative; } .son { height: 50px; width: 100px; background-color: blue; position: absolute; display: none; color: white; top: 40px; margin: 0; } .sow { display: block; } </style> </head> <body> <div class="stick"> <ul> <li><a href="">登录</a></li> <li><a href="">注册</a></li> <li class="father"><a href="" >购物车</a> <a href="" class="son">空空如也</a> </li> </ul> </div> <script src="jquery-3.3.1.min.js"></script> <script> $(".father").hover( function () { $(".son").addClass("sow"); }, function () { $(".son").removeClass("sow"); }, ) </script> </body> </html>
-
keydown和keyup
// 如何获取用户按下那个按键 $(window).on("keydown", function (e) { console.log(e.keyCode); if (e.keyCode === 16){ flag = true; } }); // 绑定一个按键抬起的事件 $(window).on("keyup", function (e) { console.log(e.keyCode); if (e.keyCode === 16){ flag = false; } });
-
change
当元素的值发生改变时,会发生 change 事件。
该事件仅适用于文本域(text field),以及 textarea 和 select 元素。
change() 函数触发 change 事件,或规定当发生 change 事件时运行的函数。
注释:当用于 select 元素时,change 事件会在选择某个选项时发生。当用于 text field 或 text area 时,该事件会在元素失去焦点时发生。
$("select").on("change", function () ...})
综合示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <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.3.1.min.js"></script> <script> let flag = false; //获取用户按下的按键,如果是shift则flag=true $(window).on("keydown",function (e) { console.log(e.keyCode); //打印shift的数字 if (e.keyCode === 16){ flag = true; } }); //如果用户松开按键,则flag=false $(window).on("keyup",function (e) { if (e.keyCode === 16) { flag = false } }); //通过change事件检查元素变化 $("select").on("change",function () { let v = $(this).val(); //获取select的值 // 判断一下当前行是否被选中 let isCheck = $(this).parent().parent().find("input:checkbox").prop("checked"); //parent()查找每个段落的带有 "select" 类的父元素 //find("input:checkbox")查找input里面的checkbox //prop("checkbox")获取checkbox属性值,不存在就是假 // && 表示 且 if (flag && isCheck){ //找到所有被选中的行 //each循环 $("input:checked").each(function () { console.log($(this).parent().parent().find("select").val()); $(this).parent().parent().find("select").val(v); }) } }); </script> </body> </html>
-
focus和blur事件
当元素获得焦点时,发生 focus 事件。
当元素失去焦点时,发生blur事件
// 当input框获取焦点时触发 $("#i1").on("focus", function () { console.log(123); }); // 当input框失去焦点时触发 $("#i1").on("blur", function () { console.log($(this).val()); });
-
input事件
// 当input框的值发生变化时触发 $("#i1").on("input", function () { console.log($(this).val()); })
2、事件绑定
.on( events [, selector ],function(){}) events: 事件 selector: 选择器(可选的) function: 事件处理函数
3、移除事件
.off( events [, selector ][,function(){}]) off() 方法移除用 .on()绑定的事件处理程序。 events: 事件 selector: 选择器(可选的) function: 事件处理函数
4、阻止后续事件执行
return false; // 常见阻止表单提交等
- 注意:
像click、keydown等DOM中定义的事件,我们都可以使用`.on()`方法来绑定事件,但是`hover`这种jQuery中定义的事件就不能用`.on()`方法来绑定了。
想使用事件委托的方式绑定hover事件处理函数,可以参照如下代码分两步绑定事件:
$('ul').on('mouseenter', 'li', function() {//绑定鼠标进入事件 $(this).addClass('hover'); }); $('ul').on('mouseleave', 'li', function() {//绑定鼠标划出事件 $(this).removeClass('hover'); });
- 2、3、4示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录注册示例</title> <style> .error { color: red; } </style> </head> <body> <form action=""> <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"); // 取input框的值判断长度是否为0 if ($username.val().length === 0){ // 用户名没有输入, 提示 $username.next().text("用户名不能为空!"); flag = false; } if ($pwd.val().length === 0){ // 用户名没有输入, 提示 $pwd.next().text("密码不能为空!"); flag = false; } return flag; // 阻止后续事件的执行 }) </script> </body> </html>
5、页面载入
页面载入时就运行,当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。
- 第一种写法:
$(document).ready(funtion(){ //这里写js代码 })
- 第二种写法:
$(function(){ // 你在这里写你的代码 })
- 示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>页面加载完执行</title> </head> <body> <div id="d1">div</div> <!--<script>--> <!--var d1Ele = document.getElementById("d1");--> <!--console.log(d1Ele);--> <!--console.log(d1Ele.innerText);--> <!--</script>--> <script src="jquery-3.3.1.min.js"></script> <script> $(document).ready(function () { var d1Ele = document.getElementById("d1"); console.log(d1Ele); console.log(d1Ele.innerText); }); // $(function () { // var d1Ele = document.getElementById("d1"); // console.log(d1Ele); // console.log(d1Ele.innerText); // }) </script> </body> </html>
6、事件委托
- 语法: .on("事件名称", "选择器", function(){...})
- 特点:
- 利用事件冒泡的特点
- 基于一个已经存在的标签给未来的标签添加事件处理函数
- 示例:
表格中每一行的编辑和删除按钮都能触发相应的事件。
$("table").on("click", ".delete", function () { // 删除按钮绑定的事件 })
即将秃头的程序员