JQ介绍
jQuery是一个轻量级的,兼容多浏览器的JavaScript库(模块).
jQuery使用户能够更方便地处理HTML Document,Events ,实现动画效果,方
便进行Ajax交互,能够极大地简化JavaScript编程.他的宗旨是:'Writeless,do
more.'
jQuery的优势
- 一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
- 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
- 链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
- 事件、样式、动画支持。jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
- Ajax操作支持。jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
- 跨浏览器兼容。jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
- 插件扩展开发。jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。
jQuery内容
选择器 ; 筛选器 ; 样式操作 ; 文本操作 ; 属性操作
文档处理 ; 事件 ; 动画效果 ; 差价 ; each,data,Ajax
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对象就是通过jQuery包装Dom对象后产生的对象.jQuery对象是
jQuery独有的.如果一个对象是jQuery对象,那么他就可以使用jQuery里的
方法:例如:$('#i1').html().
一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$:
- var $variable = jQuery对象
- var variable = Dom对象
- $variable[0] //利用索引取值,结果与原生方法找的标签形式一样. jQuery对象转成Dom对象
拿上面那个例子举例,jQuery对象和Dom对象的使用:
- $('#i1').html(); //jQuery对象可以使用jQuery的方法
- $('#i1')[0].innerHTML; //Dom对象使用Dom的方法
jQuery基础语法
$(selector).action() 或者 jQuery(selector).action() (一般用第一种)
selector指的是要查找的条件 ; action指的是方法
查找标签
用jQuery方法找到对象是jQuery对象,与原生的方法找到的对象不同(DOM对象).
选择器
id选择器 $('#id')
标签选择器: $('tagName')
class选择器: $('.className')
组合选择器: $('#id, .className , tagName ')
所有元素选择器: $('*')
层级选择器
x和y可以为任意选择器
$('x > y'); //x的所有后代y $('x y'); //x的所有儿子y
$('x + y') //找到所有紧挨在x后面的y $('x ~ y') //x之后所有的兄弟y
基本选择器
- :first // 第一个 $('x>y:first')在x的所有后代标签y中找到第一个
- :last // 最后一个
- :eq(index)// 索引等于index的那个元素的索引值
- :even // 匹配所有索引值为偶数的元素,从 0 开始计数
- :odd // 匹配所有索引值为奇数的元素,从 0 开始计数
- :gt(index)// 匹配所有大于给定索引值的元素
- :lt(index)// 匹配所有小于给定索引值的元素
- :not(元素选择器)// 移除所有满足not条件的标签 $('x:not(y)') 在满足x的标签中,找到符合y条件的标签并移除
- :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
$('x:has(y)') 指的是找满足y条件的x标签
例子:
- $("div:has(h1)")// 找到所有后代中有h1标签的div标签
- $("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
- $("li:not(.c1)")// 找到所有不包含c1样式类的li标签
- $("li:not(:has(a))")// 找到所有后代中不含a标签的li标签
练习
自定义模块框,使用jQuery实现弹出和隐藏功能.
- <!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>
- .cover {
- position: fixed;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- background-color: darkgrey;
- z-index: 999;
- }
- .modal {
- width: 600px;
- height: 400px;
- background-color: white;
- position: fixed;
- left: 50%;
- top: 50%;
- margin-left: -300px;
- margin-top: -200px;
- z-index: 1000;
- }
- .hide {
- display: none;
- }
- </style>
- </head>
- <body>
- <input type="button" value="弹" id="i0">
-
- <div class="cover hide"></div>
- <div class="modal hide">
- <label for="i1">姓名</label>
- <input id="i1" type="text">
- <label for="i2">爱好</label>
- <input id="i2" type="text">
- <input type="button" id="i3" value="关闭">
- </div>
- <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
- <script>
- var tButton = $("#i0")[0];
- tButton.onclick=function () {
- var coverEle = $(".cover")[0];
- var modalEle = $(".modal")[0];
- $(coverEle).removeClass("hide");
- $(modalEle).removeClass("hide");
- };
- var cButton = $("#i3")[0];
- cButton.onclick=function () {
- var coverEle = $(".cover")[0];
- var modalEle = $(".modal")[0];
- $(coverEle).addClass("hide");
- $(modalEle).addClass("hide");
- }
- </script>
- </body>
- </html>
属性选择器
- [attribute] //$('[s14]') 有s14属性的标签
- [attribute=value]// 属性等于
- [attribute!=value]// 属性不等于
例子
- // 示例
- <input type="text">
- <input type="password">
- <input type="checkbox">
- $("input[type='checkbox']");// 取到checkbox类型的input标签
- $("input[type!='text']");// 取到类型不是text的input标签
表单常用筛选
(写法简便)
- :text //$(':text') 筛选出属性为 :text 的input标签
- :password
- :file
- :radio
- :checkbox
- :submit
- :reset
- :button
例子:
$(':checkbox') //找到所有的checkbox
表单对象属性:
找被选中的标签
- :enabled //解除禁用
- :disabled //表示被禁用
- :checked //有时候拥有该属性的其他标签也会被筛选出俩 'input:checked'只找input标签中的被选中的
- :selected //找到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
筛选器
下一个元素
- $("#id").next() 下一个同级标签
- $("#id").nextAll() 下面所有同级标签
- $("#id").nextUntil("#i2") 找id标签开始到i2结束其中的标签不包括边界标签
上一个元素
- $("#id").prev()
- $("#id").prevAll()
- $("#id").prevUntil("#i2") //从id标签开始往前找到i2结束不包含边界标签
父亲元素:
- $("#id").parent() //查找直系父标签
- $("#id").parents() // 查找当前元素的所有的父辈元素
- $("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止
儿子和兄弟元素
- $("#id").children();// 儿子们
- $("#id").siblings();// 兄弟们
查找
搜索所有与指定表达式匹配的元素.这个函数是找出正在处理的元素的后代
的好方法.
$('div').find('p') ------在div中找p标签
等价于$('div p')
筛选
筛选出与指定表达式匹配的元素集合.这个方法用于缩小匹配的范围.用逗号
分割多个表达式.
$('div').filter('.c1') //从结果集中找出有c1样式类的标签
等价于$('div.c1')
补充:
- .first() // 获取匹配的第一个元素
- .last() // 获取匹配的最后一个元素
- .not() // 从匹配元素的集合中删除与指定表达式匹配的元素
- .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
- .eq() // 索引值等于指定值的元素
示例;左侧菜单
- <!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>左侧菜单示例</title>
- <style>
- .left {
- position: fixed;
- left: 0;
- top: 0;
- width: 20%;
- height: 100%;
- background-color: rgb(47, 53, 61);
- }
- .right {
- width: 80%;
- height: 100%;
- }
- .menu {
- color: white;
- }
- .title {
- text-align: center;
- padding: 10px 15px;
- border-bottom: 1px solid #23282e;
- }
- .items {
- background-color: #181c20;
- }
- .item {
- padding: 5px 10px;
- border-bottom: 1px solid #23282e;
- }
- .hide {
- display: none;
- }
- </style>
- </head>
- <body>
-
- <div class="left">
- <div class="menu">
- <div class="title">菜单一</div>
- <div class="items">
- <div class="item">111</div>
- <div class="item">222</div>
- <div class="item">333</div>
- </div>
- <div class="title">菜单二</div>
- <div class="items hide">
- <div class="item">111</div>
- <div class="item">222</div>
- <div class="item">333</div>
- </div>
- <div class="title">菜单三</div>
- <div class="items hide">
- <div class="item">111</div>
- <div class="item">222</div>
- <div class="item">333</div>
- </div>
- </div>
- </div>
- <div class="right"></div>
- <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
-
- <script>
- $(".title").click(function (){ // jQuery绑定事件
- // 隐藏所有class里有.items的标签
- $(".items").addClass("hide"); //批量操作
- $(this).next().removeClass("hide");
- });
- </script>
- 左侧菜单示例
操作标签
样式类
- addClass();// 添加指定的CSS类名。
- removeClass();// 移除指定的CSS类名。
- hasClass();// 判断样式存不存在
- toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。
示例 : 开关灯和模态框
直接操作css样式
css('color','red') //DOM操作: tag.style.color='red'
示例 : $('p').css('color','red'); //将所有p标签的字体设置为红色
$('p').css({'color':'green','font-size':'24px'}) //一次改俩种属性
位置
- offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置(即相对于body边界的位置)的值
- position()// 获取匹配元素相对父元素的偏移
- scrollTop()// 获取匹配元素相对滚动条顶部的偏移
- scrollLeft()// 获取匹配元素相对滚动条左侧的偏移
.offset()方法允许我们检索一个元素相对于文档(document)的当前位置.和
.position()的差别在于: .position()是相对于父级元素的位移.
示例:
尺寸:
- height() //指标签内容的高度
- width()
- innerHeight() //内边距+内容的高度
- innerWidth()
- outerHeight() //内边距+内容高度+外边距高度
- outerWidth()
文本操作
HTML代码:
.html() //取得第一个匹配标签内的所有匹配元素的html文本内容(包括空格换行)
.html(val) //设置所有匹配元素的内容即更改,能够识别括号内的val标签
文本值
text() // 获取所有匹配元素的内容
text(val) //设置所有匹配元素的内容,即更改匹配元素
值:
val() //取得第一个匹配元素的当前值 // $('#d1').val()
val(val) //设置所有匹配元素的值 // $('#d1').val('呵呵') 将匹配的元素
改成呵呵
val([val1 , val2]) //设置checkbox , select的值
示例: 获取被选中的checkbox或radio的值:
- <label for="c1">女</label>
- <input name="gender" id="c1" type="radio" value="0">
- <label for="c2">男</label>
- <input name="gender" id="c2" type="radio" value="1">
可以使用:
$('input[name='gender']:checked').val()
- <!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>
- .error {
- color: red;
- }
- </style>
- </head>
- <body>
-
- <form action="">
- <div>
- <label for="input-name">用户名</label>
- <input type="text" id="input-name" name="name">
- <span class="error"></span>
- </div>
- <div>
- <label for="input-password">密码</label>
- <input type="password" id="input-password" name="password">
- <span class="error"></span>
- </div>
- <div>
- <input type="button" id="btn" value="提交">
- </div>
- </form>
- <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
- <script>
- $("#btn").click(function () {
- var username = $("#input-name").val();
- var password = $("#input-password").val();
- if (username.length === 0) {
- $("#input-name").siblings(".error").text("用户名不能为空");
- }
- if (password.length === 0) {
- $("#input-password").siblings(".error").text("密码不能为空");
- }
- })
- </script>
- </body>
- </html>
- 自定义登录校验示例
属性操作
用于ID等或自定义属性:
获取文本类型用attr
- attr(attrName)// 返回第一个匹配元素的属性值 $('#d1').attr('id') d1样式类中取id属性
- attr(attrName, attrValue)// 为所有匹配元素设置一个属性值 $(#'d1').attr('id','d2')
- attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性值
- removeAttr()// 从每一个匹配的元素中删除一个属性
获取布尔值类型用prop
用于checkbox和radio
prop() //获取属性 removeProp() // 移除属性
注意:
在1.x及2.x版本的jQuery中使用attr对checkbox进行赋值操作时会出bug,
在3.x版本的jQuery中则没有这个问题。为了兼容性,我们在处理
checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")。
- <input type="checkbox" value="1">
- <input type="radio" value="2">
- <script>
- $(":checkbox[value='1']").prop("checked", true);
- $(":radio[value='2']").prop("checked", true);
- </script>
示例: 全选,反选,取消
文档处理
添加到指定元素内部的后面
- $(A).append(B)// 把B追加到A标签内部的后面 即B标签作为A的子标签放在A标签的末尾
- $(A).appendTo(B)// 把A追加到B标签内部的后面
添加到指定元素外部的后面
$(A).prepend(B) //把B前置到A $(A).prependTo(B) //把B前置到A
添加到指定元素内部的前面
$(A).prependTo(B) //把A前置到B $(A).prependTo //把A前置到B
添加到指定元素外部的前面
$(A).before(B) // 把B放到A的前面
$(A).insertBefore(B) //把A放到B的前面
移除和清空元素
remove() //从Dom中删除所有匹配的元素.
empty() //删除匹配的元素集合中所有的子节点
例子:
点击按钮在表格添加一行数据.
点击每一行的删除按钮删除当前数据.
替换
replaceWith() replaceAll()


克隆 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(){...})
绑定事件

事件冒泡 (事件一级一级往上传)

事件委托
原理 :事件冒泡(可以利用事件冒泡的原理,进行事件委托,把匹配的样式类
的事件委托给祖先标签body来处理.)
如何阻止事件冒泡(阻止向上传递) ---e.stopPropagation()
目的:解决未来的标签如何绑定事件
语法: $('祖先标签').on('click', '选择器'(触发事件) ,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>
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>
实时监听input输入值变化示例:
- <!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>实时监听input输入值变化</title>
- </head>
- <body>
- <input type="text" id="i1">
-
- <script src="jquery-3.2.1.min.js"></script>
- <script>
- /*
- * oninput是HTML5的标准事件
- * 能够检测textarea,input:text,input:password和input:search这几个元素的内容变化,
- * 在内容修改后立即被触发,不像onchange事件需要失去焦点才触发
- * oninput事件在IE9以下版本不支持,需要使用IE特有的onpropertychange事件替代
- * 使用jQuery库的话直接使用on同时绑定这两个事件即可。
- * */
- $("#i1").on("input propertychange", function () {
- alert($(this).val());
- })
- </script>
- </body>
- </html>
事件绑定
.on(events [, selector],function(){})
events:事件 selector:选择器(可选的) function:事件处理函数
移除事件
.off(events [, selector ][,function(){}])
off() 方法移除用 .on() 绑定的事件处理程序.
events 事件 selector: 选择器(可选的) function : 事件处理函数
阻止后续事件执行
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');
- });
页面载入
当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块
中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。
方法一:
- $(document).ready(function(){
- // 在这里写你的JS代码...
- })
方法二(简写)
- $(function(){
- // 你在这里写你的代码
- })
文档加载完绑定事件,并且阻止默认事件发生
- <!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>
- .error {
- color: red;
- }
- </style>
- </head>
- <body>
-
- <form id="myForm">
- <label for="name">姓名</label>
- <input type="text" id="name">
- <span class="error"></span>
- <label for="passwd">密码</label>
- <input type="password" id="passwd">
- <span class="error"></span>
- <input type="submit" id="modal-submit" value="登录">
- </form>
-
- <script src="jquery-3.2.1.min.js"></script>
- <script src="s7validate.js"></script>
- <script>
- function myValidation() {
- // 多次用到的jQuery对象存储到一个变量,避免重复查询文档树
- var $myForm = $("#myForm");
- $myForm.find(":submit").on("click", function () {
- // 定义一个标志位,记录表单填写是否正常
- var flag = true;
- $myForm.find(":text, :password").each(function () {
- var val = $(this).val();
- if (val.length <= 0 ){
- var labelName = $(this).prev("label").text();
- $(this).next("span").text(labelName + "不能为空");
- flag = false;
- }
- });
- // 表单填写有误就会返回false,阻止submit按钮默认的提交表单事件
- return flag;
- });
- // input输入框获取焦点后移除之前的错误提示信息
- $myForm.find("input[type!='submit']").on("focus", function () {
- $(this).next(".error").text("");
- })
- }
- // 文档树就绪后执行
- $(document).ready(function () {
- myValidation();
- });
- </script>
- </body>
- </html>
- 登录校验示例
委托事件
事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件.
示例:
表格中每一行的编辑和删除按钮都能触发相应的事件.
- $("table").on("click", ".delete", function () {
- // 删除按钮绑定的事件
- })
动画效果
- // 基本
- show([s,[e],[fn]])
- hide([s,[e],[fn]])
- toggle([s],[e],[fn])
- // 滑动
- slideDown([s],[e],[fn])
- slideUp([s,[e],[fn]])
- slideToggle([s],[e],[fn])
- // 淡入淡出
- fadeIn([s],[e],[fn])
- fadeOut([s],[e],[fn]) //$('#d1').fadeOut(5000)五秒由清晰变消失
- fadeTo([[s],o,[e],[fn]]) //$('#d1').fadeTo(5000,0.3)五秒由清晰变0.3的模糊度
- fadeToggle([s,[e],[fn]])
- // 自定义(了解即可)
- animate(p,[s],[e],[fn])
自定义动画示例
- <!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>
- div {
- position: relative;
- display: inline-block;
- }
- div>i {
- display: inline-block;
- color: red;
- position: absolute;
- right: -16px;
- top: -5px;
- opacity: 1;
- }
- </style>
- </head>
- <body>
-
- <div id="d1">点赞</div>
- <script src="jquery-3.2.1.min.js"></script>
- <script>
- $("#d1").on("click", function () {
- var newI = document.createElement("i");
- newI.innerText = "+1";
- $(this).append(newI);
- $(this).children("i").animate({
- opacity: 0
- }, 1000)
- })
- </script>
- </body>
- </html>
补充
each
jQuery.each(collection, callback(indexInArray, valueOfElement)):
描述:一个通用的迭代函数,它可以用来无缝迭代对象和数组。数组和类似数
组的对象通过一个长度属性(如一个函数的参数对象)来迭代数字索引,从
0到length - 1。其他对象通过其属性名进行迭代。
- li =[10,20,30,40]
- $.each(li,function(i, v){
- console.log(i, v);//index是索引,ele是每次循环的具体元素。
- })
输出: 101 120 230 340
.each(function(index, Element)):
描述:遍历一个jQuery对象,为每个匹配元素执行一个函数。
.each() 方法用来迭代jQuery对象中的每一个DOM元素。每次回调函数执行时,会传递当前循
环次数作为参数(从0开始计数)。由于回调函数是在当前DOM元素为上下文的语境中触发的,所
以关键字 this 总是指向这个元素。
- // 为每一个li标签添加foo
- $("li").each(function(){
- $(this).addClass("c1");
- });
注意: jQuery的方法返回一个jQuery对象,遍历jQuery集合中的元素 - 被称为隐式迭代的过程。
当这种情况发生时,它通常不需要显式地循环的 .each()方法:
也就是说,上面的例子没有必要使用each()方法,直接像下面这样写就可以了:
$('li').addClass('c1'); //对所有标签作统一操作
注意:
在遍历过程中可以使用return false 提前结束each循环.
终止each循环 return false;

.data()
在匹配的元素集合中的所有元素上存储任意相关数据或返回匹配的元素集合
中的第一个元素的给定名称的数据存储的值。
.data(key,value):
描述: 在匹配的元素上存储任意相关数据.
$('div').data('k',100); //给所有div标签都保存一个名为k,值为100
.data(key):
描述:返回匹配的元素集合中的第一个元素的给定名称的数据存储的值--通过
.data(name,value)或HTML5 data-* 属性设置.
$('div').data('k'); //返回第一个div标签中保存的'k'的值
.removeData(key):
描述:移除存放在元素上的数据,不加key参数表示移除所有保存的数据.
$('div').removeData('k'); //移除元素存放k对应的数据
示例:
模态框编辑的数据回填表格
插件(了解即可)
jQuery.extend(object)
jQuery的命名空间下添加新的功能.多用于插件开发者向jQuery中添加新函
数时的使用.
示例:
- <script>
- jQuery.extend({
- min:function(a, b){return a < b ? a : b;},
- max:function(a, b){return a > b ? a : b;}
- });
- jQuery.min(2,3);// => 2
- jQuery.max(4,5);// => 5
- </script>
jQuery.fn.extend(object)
一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法.
- <script>
- jQuery.fn.extend({
- check:function(){
- return this.each(function(){this.checked =true;});
- },
- uncheck:function(){
- return this.each(function(){this.checked =false;});
- }
- });
- // jQuery对象可以使用新添加的check()方法了。
- $("input[type='checkbox']").check();
- </script>
单独写在文件中的扩展:
- (function(jq){
- jq.extend({
- funcName:function(){
- ...
- },
- });
- })(jQuery);
自定义的jQuery登录验证插件
HTML文件
- <!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>登录校验示例</title>
- <style>
- .login-form {
- margin: 100px auto 0;
- max-width: 330px;
- }
- .login-form > div {
- margin: 15px 0;
- }
- .error {
- color: red;
- }
- </style>
- </head>
- <body>
-
-
- <div>
- <form action="" class="login-form" novalidate>
-
- <div>
- <label for="username">姓名</label>
- <input id="username" type="text" name="name" required autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <label for="passwd">密码</label>
- <input id="passwd" type="password" name="password" required autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <label for="mobile">手机</label>
- <input id="mobile" type="text" name="mobile" required autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <label for="where">来自</label>
- <input id="where" type="text" name="where" autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <input type="submit" value="登录">
- </div>
-
- </form>
- </div>
-
- <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
- <script src="validate.js"></script>
- <script>
- $.validate();
- </script>
- </body>
- </html>
JS文件
- "use strict";
- (function ($) {
- function check() {
- // 定义一个标志位,表示验证通过还是验证不通过
- var flag = true;
- var errMsg;
- // 校验规则
- $("form input[type!=':submit']").each(function () {
- var labelName = $(this).prev().text();
- var inputName = $(this).attr("name");
- var inputValue = $(this).val();
- if ($(this).attr("required")) {
- // 如果是必填项
- if (inputValue.length === 0) {
- // 值为空
- errMsg = labelName + "不能为空";
- $(this).next().text(errMsg);
- flag = false;
- return false;
- }
- // 如果是密码类型,我们就要判断密码的长度是否大于6位
- if (inputName === "password") {
- // 除了上面判断为不为空还要判断密码长度是否大于6位
- if (inputValue.length < 6) {
- errMsg = labelName + "必须大于6位";
- $(this).next().text(errMsg);
- flag = false;
- return false;
- }
- }
- // 如果是手机类型,我们需要判断手机的格式是否正确
- if (inputName === "mobile") {
- // 使用正则表达式校验inputValue是否为正确的手机号码
- if (!/^1[345678]\d{9}$/.test(inputValue)) {
- // 不是有效的手机号码格式
- errMsg = labelName + "格式不正确";
- $(this).next().text(errMsg);
- flag = false;
- return false;
- }
- }
- }
- });
- return flag;
- }
- function clearError(arg) {
- // 清空之前的错误提示
- $(arg).next().text("");
- }
- // 上面都是我定义的工具函数
- $.extend({
- validate: function () {
- $("form :submit").on("click", function () {
- return check();
- });
- $("form :input[type!='submit']").on("focus", function () {
- clearError(this);
- });
- }
- });
- })(jQuery);
传参版插件
HTML文件
- <!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>登录校验示例</title>
- <style>
- .login-form {
- margin: 100px auto 0;
- max-width: 330px;
- }
- .login-form > div {
- margin: 15px 0;
- }
- .error {
- color: red;
- }
- </style>
- </head>
- <body>
-
-
- <div>
- <form action="" class="login-form" novalidate>
-
- <div>
- <label for="username">姓名</label>
- <input id="username" type="text" name="name" required autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <label for="passwd">密码</label>
- <input id="passwd" type="password" name="password" required autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <label for="mobile">手机</label>
- <input id="mobile" type="text" name="mobile" required autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <label for="where">来自</label>
- <input id="where" type="text" name="where" autocomplete="off">
- <span class="error"></span>
- </div>
- <div>
- <input type="submit" value="登录">
- </div>
-
- </form>
- </div>
-
- <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
- <script src="validate3.js"></script>
- <script>
- $.validate({"name":{"required": true}, "password": {"required": true, "minLength": 8}, "mobile": {"required": true}});
- </script>
- </body>
- </html>
JS文件
- "use strict";
- (function ($) {
- function check(arg) {
- // 定义一个标志位,表示验证通过还是验证不通过
- var flag = true;
- var errMsg;
- // 校验规则
- $("form input[type!=':submit']").each(function () {
- var labelName = $(this).prev().text();
- var inputName = $(this).attr("name");
- var inputValue = $(this).val();
- if (arg[inputName].required) {
- // 如果是必填项
- if (inputValue.length === 0) {
- // 值为空
- errMsg = labelName + "不能为空";
- $(this).next().text(errMsg);
- flag = false;
- return false;
- }
- // 如果是密码类型,我们就要判断密码的长度是否大于6位
- if (inputName === "password") {
- // 除了上面判断为不为空还要判断密码长度是否大于6位
- if (inputValue.length < arg[inputName].minLength) {
- errMsg = labelName + "必须大于"+arg[inputName].minLength+"位";
- $(this).next().text(errMsg);
- flag = false;
- return false;
- }
- }
- // 如果是手机类型,我们需要判断手机的格式是否正确
- if (inputName === "mobile") {
- // 使用正则表达式校验inputValue是否为正确的手机号码
- if (!/^1[345678]\d{9}$/.test(inputValue)) {
- // 不是有效的手机号码格式
- errMsg = labelName + "格式不正确";
- $(this).next().text(errMsg);
- flag = false;
- return false;
- }
- }
- }
- });
- return flag;
- }
- function clearError(arg) {
- // 清空之前的错误提示
- $(arg).next().text("");
- }
- // 上面都是我定义的工具函数
- $.extend({
- validate: function (arg) {
- $("form :submit").on("click", function () {
- return check(arg);
- });
- $("form :input[type!='submit']").on("focus", function () {
- clearError(this);
- });
- }
- });
- })(jQuery);
- JS文件