jQuery介绍

  1. jQuery是一个轻量级的、兼容多浏览器的JavaScript库。
  2. jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“

jQuery的优势

  1. 一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
  2. 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
  3. 链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
  4. 事件、样式、动画支持。jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
  5. Ajax操作支持。jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
  6. 跨浏览器兼容。jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
  7. 插件扩展开发。jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。

jQuery内容:

  1. 选择器
  2. 筛选器
  3. 样式操作
  4. 文本操作
  5. 属性操作
  6. 文档处理
  7. 事件
  8. 动画效果
  9. 插件
  10. each、data、Ajax

下载链接:jQuery官网

中文文档:jQuery API中文文档

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里的方法:例如$(“#i1”).html()。

$("#i1").html()的意思是:获取id值为 i1的元素的html代码。其中 html()是jQuery里的方法。相当于: document.getElementById("i1").innerHTML;

虽然 jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法。

一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$:

var $variable = jQuery对像
var variable = DOM对象
$variable[0]           //jQuery对象转成DOM对象$("#i1").html();       //jQuery对象可以使用jQuery的方法
$("#i1")[0].innerHTML; // DOM对象使用DOM的方法

jQuery基础语法

$(selector).action()

查找标签

基本选择器

  • id选择器:$("#id")
  • 标签选择器:$("tagName")
  • class选择器:$(".className")
  • 配合使用:$("div.c1") // 找到有c1 class类的div标签
  • 所有元素选择器:$("*")
  • 组合选择器:$("#id, .className, tagName")

层级选择器:

x 和 y 可以为任意选择器

  • $("x y")      // x的所有后代y(子子孙孙)
  • $("x > y")   // x的所有儿子y(儿子)
  • $("x + y")   // 找到所有紧挨在x后面的y
  • $("x ~ y")   // x之后所有的兄弟y

基本筛选器:

  • :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实现弹出和隐藏功能。

<!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]             // 获取属性值
  • [attribute=value]  // 属性等于
  • [attribute!=value] // 属性不等于

例子:

<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");   // 取到类型不是text的input标签

表单筛选器(简写)

  • :text
  • :password
  • :file
  • :radio
  • :checkbox
  • :submit
  • :reset
  • :button

例子:

$(":checkbox") // 找到所有的checkbox

表单对象属性:

  • :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

筛选器方法

下一个元素

  • $("#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()    // 索引值等于指定值的元素

示例:左侧菜单

<!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":"red", "font_size":"24px"})$("#div").css("display","none");  //修改display属性为none
$("#div").css("display","block"); //修改display属性为block

位置操作

  • offset()     // 获取匹配元素在当前窗口的相对偏移或设置元素位置,括号内写之值为设置值
  • position()  // 获取匹配元素相对父元素的偏移,括号内写之值为设置值
  • scrollTop() // 获取匹配元素相对滚动条顶部的偏移,括号内写之值为设置值
  • scrollLeft()// 获取匹配元素相对滚动条左侧的偏移,括号内写之值为设置值

.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。和 .position()的差别在于: .position()是相对于相对于父级元素的位移。

示例:返回顶部示例

<!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>.c1 {width: 100px;height: 200px;background-color: red;}.c2 {height: 50px;width: 50px;position: fixed;bottom: 15px;right: 15px;background-color: #2b669a;}.hide {display: none;}.c3 {height: 100px;}</style>
</head>
<body>
<button id="b1" class="btn btn-default">点我</button>
<div class="c1"></div>
<div class="c3">1</div>
<div class="c3">2</div>
<div class="c3">3</div>
<div class="c3">4</div>
<div class="c3">5</div>
<div class="c3">6</div>
<div class="c3">7</div>
<div class="c3">8</div>
<div class="c3">9</div>
<div class="c3">10</div>
<button id="b2" class="btn btn-default c2 hide">返回顶部</button>
<script src="jquery-3.2.1.min.js"></script>
<script>$("#b1").on("click", function () {$(".c1").offset({left: 200, top:200});});$(window).scroll(function () {if ($(window).scrollTop() > 100) {$("#b2").removeClass("hide");}else {$("#b2").addClass("hide");}});$("#b2").on("click", function () {$(window).scrollTop(0);})
</script>
</body>
</html>

尺寸操作

  • height()
  • width()
  • innerHeight()
  • innerWidth()
  • outerHeight()
  • outerWidth()

文本操作

HTML代码

  • html()      // 取得第一个匹配元素的html内容
  • html(val) // 设置所有匹配元素的html内容

文本值

  • text()     // 取得所有匹配元素的内容
  • text(val) // 设置所有匹配元素的内容

  • val()      // 取得第一个匹配元素的当前值
  • val(val) // 设置所有匹配元素的值
  • val([val1, val2])// 设置多选的checkbox、多选select的值

例如:

<input type="checkbox" value="basketball" name="hobby">篮球
<input type="checkbox" value="football" name="hobby">足球<select multiple id="s1"><option value="1">1</option><option value="2">2</option><option value="3">3</option>
</select><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()// 设置值
$("[name='hobby']").val(['basketball', 'football']);
$("#s1").val(["1", "2"])

自定义登录校验示例

<!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(attrName) // 返回第一个匹配元素的属性值
  • attr(attrName, attrValue) // 为所有匹配元素设置一个属性值
  • attr({k1: v1, k2:v2}) // 为所有匹配元素设置多个属性值
  • removeAttr() // 从每一个匹配的元素中删除一个属性

用于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>

prop和attr的区别:

attr全称attribute(属性)

prop全称property(属性)

虽然都是属性,但他们所指的属性并不相同,attr所指的属性是HTML标签属性,而prop所指的是DOM对象属性,可以认为attr是显式的,而prop是隐式的。举个例子:

<input type="checkbox" id="i1" value="1">$("#i1").attr("checked")  // undefined
$("#i1").prop("checked")  // false

可以看到attr获取一个标签内没有的东西会得到undefined,而prop获取的是这个DOM对象的属性,因此checked为false。如果换成下面的代码:

<input type="checkbox" checked id="i1" value="1">$("#i1").attr("checked")   // checked
$("#i1").prop("checked")   // true

这已经可以证明attr的局限性,它的作用范围只限于HTML标签内的属性,而prop获取的是这个DOM对象的属性,选中返回true,没选中返回false。

接下来再看一下针对自定义属性,attr 和 prop又有什么区别:

<input type="checkbox" checked id="i1" value="1" me="自定义属性">$("#i1").attr("me")   // "自定义属性"
$("#i1").prop("me")   // undefined

可以看到prop不支持获取标签的自定义属性。

总结一下:

  1. 对于标签上有的能看到的属性和自定义属性都用attr
  2. 对于返回布尔值的比如 checkbox、radio和option的是否被选中都用prop。

文档处理

添加到指定元素内部的后面

  • $(A).append(B) // 把B追加到A
  • $(A).appendTo(B) // 把A追加到B

添加到指定元素内部的前面

  • $(A).prepend(B) // 把B前 置到A
  • $(A).prependTo(B) // 把A前 置到B

添加到指定元素外部的后面

  • $(A).after(B) // 把B放到A的后面
  • $(A).insertAfter(B) // 把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(){...})

keydown和keyup事件组合示例:按住shift实现批量操作

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta http-equiv="content-Type" charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><title>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.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 找到那些被选中行的selectvar $select = $("input:checked").parent().parent().find("select")// 2.2 给选中的select赋值$select.val(value);}});
</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: 事件处理函数

阻止后续事件执行

  1. return false; // 常见阻止表单提交等
  2. e.preventDefault();
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>阻止默认事件</title>
</head>
<body><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');
});

阻止事件冒泡

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>阻止事件冒泡</title>
</head>
<body>
<div><p><span>点我</span></p>
</div>
<script src="jquery-3.3.1.min.js"></script>
<script>$("span").click(function (e) {alert("span");e.stopPropagation();});$("p").click(function () {alert("p");});$("div").click(function () {alert("div");})
</script>
</body>
</html>

页面载入

当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>

与window.onload的区别

  • window.onload()函数有覆盖现象,必须等待着图片资源加载完成之后才能调用
  • jQuery的这个入口函数没有函数覆盖现象,文档加载完成之后就可以调用(建议使用此函数)

事件委托

事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件。

示例:表格中每一行的编辑和删除按钮都能触发相应的事件。

$("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])
fadeTo([[s],o,[e],[fn]])
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是每次循环的具体元素。
})输出:
010
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 入门相关推荐

  1. 前端学习——jQuery入门篇

    一. jQuery入门 1.1 初步感受jQuery 使用jquery简单写个tab切换小案例 <!DOCTYPE html> <html lang="en"&g ...

  2. 前端笔记----jquery入门知识点总结 (转)

    http://www.cnblogs.com/cwp-bg/p/7633623.html 一.jquery的加载方法 $(document).ready(function(){js代码}); $(fu ...

  3. Web前端JQuery入门实战案例

    前端jquery入门到实战 为什么要学习Jquery?因为生活. 案例: <!DOCTYPE html> <html lang="zh-CN"> <h ...

  4. BCSP-玄子前端开发之JavaScript+jQuery入门CH13_表单校验

    BCSP-玄子前端开发之JavaScript+jQuery入门CH13_表单校验 4.13 表单验证 4.13.1 为什么要表单验证 保证输入的数据符合要求 减轻服务器的压力 [外链图片转存失败,源站 ...

  5. 前端的第二十四天(jQuery入门、常用API)

    前端的第二十四天(jQuery入门.常用API) 一.jQuery入门 1.jQuery 概述 2.jQuery 的基本使用 官网地址:点我跳转 各个版本的下载:点我跳转 二.jQuery常用API ...

  6. BCSP-玄子前端开发之JavaScript+jQuery入门CH02_JavaScript函数

    BCSP-玄子前端开发之JavaScript+jQuery入门CH02_JavaScript函数 4.2 函数 4.2.1 什么是函数 类似于Java中的方法,是完成特定任务的代码语句块 特点 使用更 ...

  7. 前端开发从入门到进阶完全指南,不用再迷茫前端要怎么学啦!

    我经常会看到很多同学在学习前端的时候比较迷茫,不知道到底应该以怎样的学习路线来入门和进阶前端领域.每次遇到这种问题我也会分享一下自己的学习经验,但是发现这是一个问得非常多的一个共性问题. 作为程序员, ...

  8. flowlayout布局怎么换行_web前端学习怎么入门

    web前端怎么样才能入门,首先我们要从什么是初级web前端工程师说起: 按照我的想法,我把前端工程师分为了入门.初级.中级.高级这四个级别, 入门级别指的是了解什么是前端(前端到底是什么其实很多人还是 ...

  9. 4步带你从Web前端小白到入门!

    Web前端开发怎么入门,主要都有哪些要素组成?Web前端开发是由网页制作演变而来的,主要由HTML.CSS.JavaScript三大要素组成.专业的Web前端开发入门知识也一定会包含这些内容,下面就给 ...

最新文章

  1. centos7下搭建git和gitlab版本库
  2. I00031 Look-and-say sequence
  3. 将json转换成struts参数
  4. ping连接linux无法访问目标主机,无法访问目标主机是什么情况【解决方法】
  5. Apache状态监测集重启
  6. java string字节数组_java(基本类型或者String字符串)与(字节数组)相互转换
  7. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...
  8. 7.1Python异常处理
  9. 对java注解的深入理解
  10. matlab立体坐标定位_【半导光电】基于光电探测器的激光章动定位算法(二)
  11. python copy与deepcopy (拷贝与深拷贝)
  12. 关于 android 的 view.getLeft(), getRight(), getTop(), getBottom() 的一些疑惑(坑)解答
  13. [国嵌攻略][125][总线设备驱动模型]
  14. 21天Jenkins打卡Day7-打包git代码
  15. 投入产出比增长2倍以上!银泰抛弃传统数据库转投阿里云PolarDB
  16. CAS单点登录原理及实现
  17. 永洪BI强制显示移动端布局
  18. mac os安装Windows系统失败后不能合并为一个分区
  19. Mac10.8.5黑苹果HD3000VGA输出
  20. C# winform excel根据当前选中内容,自动插入/编辑批注

热门文章

  1. 架构设计--仅是软件开发之第二大影响力?!
  2. JSch:Java Secure Channel -- java 代码实现 ssh 远程操作
  3. MVC表示层框架——Velocity技术
  4. django中使用原生sql
  5. 常用的方法论-NPS
  6. 重温数据结构:树 及 Java 实现(转)
  7. LeetCode--Sum Root to Leaf Numbers
  8. famous javascript library.
  9. 快速切換手機版網頁語法
  10. Qt之QProcess(一)运行cmd命令