目录
- 1. jQuery简介
- 2. jQuery优势
- 3. jQuery内容
- 4. jQuery版本
- 5. jQuery对象
- 5.1 定义
- 5.2 jQuery对象转成DOM对象
- 5.3 jQuery对象和DOM对象的使用
- 6. jQuery基础语法
- 6.1 语法
- 6.2 查找标签
- 6.2.1 基本选择器
- 6.2.2 基本筛选器
- 6.2.3 筛选器方法
- 6.3 操作标签
- 6.3.1 样式操作
- 6.3.2 位置操作
- 6.3.3 尺寸
- 6.3.4 文本操作
- 6.3.5 属性操作
- 6.3.6 文档处理
- 6.4 事件
- 6.4.1 常用事件
- 6.4.2 事件绑定
- 6.4.3 移除事件
- 6.4.4 阻止后续事件执行
- 6.4.5 阻止事件冒泡
- 6.4.6 页面载入
- 6.4.7 事件委托
- 6.5 动画效果
- 6.5.1 介绍
- 6.5.2 点赞特效简单示例:
- 6.6 拓展
- 6.6.1 .each
- 6.6.2 .data()
- 6.6.3 插件(了解)
前端之jQuery
1. jQuery简介
- jQuery是一个轻量级的、兼容多浏览器的JavaScript库。
- jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“
2. jQuery优势
- 一款轻量级的JS框架。
- jQuery核心js文件才几十kb,不会影响页面加载速度。
- 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
- 链式表达式。
- jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
- 事件、样式、动画支持。
- jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
- Ajax操作支持。
- jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
- 跨浏览器兼容。
- jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
- 插件扩展开发。
- jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。
3. jQuery内容
- 选择器
- 筛选器
- 样式操作
- 文本操作
- 属性操作
- 文档处理
- 事件
- 动画效果
- 插件
- each、data、Ajax
下载链接:jQuery官网
中文文档:jQuery AP中文文档
4. jQuery版本
- x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)
- x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)
- x:不兼容IE678,只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。
维护IE678是一件让人头疼的事情,一般我们都会额外加载一个CSS和JS单独处理。值得庆幸的是使用这些浏览器的人也逐步减少,PC端用户已经逐步被移动端用户所取代,如果没有特殊要求的话,一般都会选择放弃对678的支持。
5. jQuery对象
5.1 定义
jQuery对象就是通过jQuery包装DOM对象后产生的对象。
jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象,那么它就可以使用jQuery里的方法。
例如:$(“#i1”).html()
$("#i1").html()
的意思是:获取id值为 i1
的元素的html代码。其中 html()
是jQuery里的方法。
相当于: document.getElementById("i1").innerHTML;
虽然 jQuery对象
是包装 DOM对象
后产生的,但是 jQuery对象
无法使用 DOM对象
的任何方法;同理 DOM对象
也没不能使用 jQuery
里的方法。
注意:一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$。
5.2 jQuery对象转成DOM对象
var $variable = jQuery对象
var variable = DOM对象
$variable[0]//jQuery对象转成DOM对象
5.3 jQuery对象和DOM对象的使用
$("#i1").html(); //jQuery对象可以使用jQuery的方法
$("#i1")[0].innerHTML; // DOM对象使用DOM的方法
6. jQuery基础语法
6.1 语法
$(selector/选择器).action()
6.2 查找标签
6.2.1 基本选择器
6.2.1.1 id选择器
$("#id")
6.2.1.2 标签选择器
$("tagName")
6.2.1.3 class选择器
$(".className")
6.2.1.4 配合使用
$("div.c1") // 找到有c1 class类的div标签
6.2.1.5 所有元素选择器
$("*")
6.2.1.6 组合选择器
$("#id, .className, tagName")
6.2.1.7 层级选择器
x和y可以为任意选择器
$("x y");// x的所有后代y(子子孙孙)
$("x > y");// x的所有儿子y(儿子)
$("x + y")// 找到所有紧挨在x后面的y
$("x ~ y")// x之后所有的兄弟y
6.2.2 基本筛选器
6.2.2.1 方法
:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
例子:
$("div:has(h1)")// 找到所有后代中有h1标签的div标签
$("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
$("li:not(.c1)")// 找到所有不包含c1样式类的li标签
$("li:not(:has(a))")// 找到所有后代中不含a标签的li标签
练习:
自定义模态框,使用jQuery实现弹出和隐藏功能。
自定义模态框
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
6.2.2.2 属性筛选器
[attribute]
[attribute=value]// 属性等于
[attribute!=value]// 属性不等于
例子:
// 示例
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签
6.2.2.3 表单筛选器
:text
:password:file
:radio
:checkbox
:submit
:reset
:button
例子:
$(":checkbox") // 找到所有的checkbox
表单对象属性:
:enabled
:disabled
:checked
:selected
例子:
找到可用的input标签
$("input:enabled") // 找到可用的input标签
找到被选中的option:
$(":selected") // 找到所有被选中的option
6.2.3 筛选器方法
下一个元素:
$("#id").next() $("#id").nextAll() $("#id").nextUntil("#i2")
上一个元素:
$("#id").prev() $("#id").prevAll() $("#id").prevUntil("#i2")
父亲元素:
$("#id").parent() $("#id").parents() // 查找当前元素的所有的父辈元素$("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。
儿子和兄弟元素:
$("#id").children();// 儿子们 $("#id").siblings();// 兄弟们
查找
搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。
$("div").find("p") //等价于`$("div p")`
筛选
筛选出与指定表达式匹配的元素集合。这个方法用于缩小匹配的范围。用逗号分隔多个表达式。
$("div").filter(".c1") // 从结果集中过滤出有c1样式类的,等价于$("div.c1")
补充:
.first() // 获取匹配的第一个元素 .last() // 获取匹配的最后一个元素 .not() // 从匹配元素的集合中删除与指定表达式匹配的元素 .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。 .eq() // 索引值等于指定值的元素
案例
左侧菜单示例 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 /html6.4 事件
6.4.1 常用事件
click(function(){...}) hover(function(){...}) blur(function(){...}) focus(function(){...}) change(function(){...}) keyup(function(){...})
6.4.1.1 keydown和keyup事件组合示例
Title table border="1" thead tr th#/th th姓名/th th操作/th /tr /thead tbody tr tdinput type="checkbox"/td tdEgon/td td select option value="1"上线/option option value="2"下线/option option value="3"停职/option /select /td /tr tr tdinput type="checkbox"/td tdAlex/td td select option value="1"上线/option option value="2"下线/option option value="3"停职/option /select /td /tr tr tdinput type="checkbox"/td tdYuan/td td select option value="1"上线/option option value="2"下线/option option value="3"停职/option /select /td /tr tr tdinput type="checkbox"/td tdEvaJ/td td select option value="1"上线/option option value="2"下线/option option value="3"停职/option /select /td /tr tr tdinput type="checkbox"/td tdGold/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.js"/script script var flag = false; // shift按键被按下的时候 (window).keydown(function (event) { console.log(event.keyCode); if (event.keyCode === 16){ flag = true; } }); // shift按键被抬起的时候 (window).keyup(function (event) { console.log(event.keyCode); if (event.keyCode === 16){ flag = false; } }); // select标签的值发生变化的时候 $("select").change(function (event) { // 如果shift按键被按下,就进入批量编辑模式 // shift按键对应的code是16 // 判断当前select这一行是否被选中 console.log($(this).parent().siblings().first().find(":checkbox")); var isChecked = $(this).parent().siblings().first().find(":checkbox").prop("checked"); console.log(isChecked); if (flag && isChecked) { // 进入批量编辑模式 // 1. 取到当前select选中的值 var value = $(this).val(); // 2. 给其他被选中行的select设置成和我一样的值 // 2.1 找到那些被选中行的select var $select = $("input:checked").parent().parent().find("select") // 2.2 给选中的select赋值 $select.val(value); } }); /script /body /html6.4.1.2 hover事件示例
Title 苍茫的天涯是我的哎,绵绵的青山脚下一片海!
script src="jQuery-3.3.1.js" /script script $('p').hover( function () { alert('来啦,老弟') }, function () { alert('慢走哦~') } ) /script /body /html6.4.1.3 实时监听input输入值变化示例
实时监听input输入值变化 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 /html6.4.2 事件绑定
`.on( events [, selector ],function(){})`
- events: 事件
- selector: 选择器(可选的)
- function: 事件处理函数
6.4.3 移除事件
`.off( events [, selector ][,function(){}])` //`off()` 方法移除用 `.on()`绑定的事件处理程序。
- events: 事件
- selector: 选择器(可选的)
- function: 事件处理函数
6.4.4 阻止后续事件执行
return false; // 常见阻止表单提交等 e.preventDefault();
例子:
阻止默认事件 form action="" button id="b1"点我/button /form script src="jquery-3.3.1.min.js"/script script $("#b1").click(function (e) { alert(123); //return false; e.preventDefault(); }); /script /body /html注意:像click、keydown等DOM中定义的事件,我们都可以使用.on()方法来绑定事件,但是hover这种jQuery中定义的事件就不能用.on()方法来绑定了。
想使用事件委托的方式绑定hover事件处理函数,可以参照如下代码分两步绑定事件:
$('ul').on('mouseenter', 'li', function() {//绑定鼠标进入事件 $(this).addClass('hover'); }); $('ul').on('mouseleave', 'li', function() {//绑定鼠标划出事件 $(this).removeClass('hover'); });
6.4.5 阻止事件冒泡
阻止事件冒泡 点我
- jQuery.fn.extend(object)
一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法。
单独写在文件中的扩展:
(function(jq){ jq.extend({ funcName:function(){ ... }, }); })(jQuery);
例子:
自定义的jQuery登录验证插件
- HTML文件
登录校验示例 div form action="" class="login-form" novalidate- 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);