jQuery

jQuery介绍

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

    jQuery的优势

  3. 一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。

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

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对象变量的时候在变量名前面加上$:

  1. var $variable = jQuery对像
  2. var variable = DOM对象
  3. $variable[0]//jQuery对象转成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

基本筛选器:

  1. :first // 第一个
  2. :last // 最后一个
  3. :eq(index)// 索引等于index的那个元素
  4. :even // 匹配所有索引值为偶数的元素,从 0 开始计数
  5. :odd // 匹配所有索引值为奇数的元素,从 0 开始计数
  6. :gt(index)// 匹配所有大于给定索引值的元素
  7. :lt(index)// 匹配所有小于给定索引值的元素
  8. :not(元素选择器)// 移除所有满足not条件的标签
  9. :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)

属性选择器:

  1. [attribute]
  2. [attribute=value]// 属性等于
  3. [attribute!=value]// 属性不等于

使用jQuery实现弹出和隐藏功能。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="x-ua-compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>自定义模态框</title>
  8. <style>
  9. .cover {
  10. position: fixed;
  11. left: 0;
  12. right: 0;
  13. top: 0;
  14. bottom: 0;
  15. background-color: darkgrey;
  16. z-index: 999;
  17. }
  18. .modal {
  19. width: 600px;
  20. height: 400px;
  21. background-color: white;
  22. position: fixed;
  23. left: 50%;
  24. top: 50%;
  25. margin-left: -300px;
  26. margin-top: -200px;
  27. z-index: 1000;
  28. }
  29. .hide {
  30. display: none;
  31. }
  32. </style>
  33. </head>
  34. <body>
  35. <input type="button" value="弹" id="i0">
  36. <div class="cover hide"></div>
  37. <div class="modal hide">
  38. <label for="i1">姓名</label>
  39. <input id="i1" type="text">
  40. <label for="i2">爱好</label>
  41. <input id="i2" type="text">
  42. <input type="button" id="i3" value="关闭">
  43. </div>
  44. <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  45. <script>
  46. var tButton = $("#i0")[0];
  47. tButton.onclick=function () {
  48. var coverEle = $(".cover")[0];
  49. var modalEle = $(".modal")[0];
  50. $(coverEle).removeClass("hide");
  51. $(modalEle).removeClass("hide");
  52. };
  53. var cButton = $("#i3")[0];
  54. cButton.onclick=function () {
  55. var coverEle = $(".cover")[0];
  56. var modalEle = $(".modal")[0];
  57. $(coverEle).addClass("hide");
  58. $(modalEle).addClass("hide");
  59. }
  60. </script>
  61. </body>
  62. </html>

表单筛选器

  1. :text
  2. :password
  3. :file
  4. :radio
  5. :checkbox
  6. :submit
  7. :reset
  8. :button

表单对象属性:

  1. :enabled
  2. :disabled
  3. :checked
  4. :selected

找到可用的input标签

  1. <form>
  2. <input name="email" disabled="disabled" />
  3. <input name="id" />
  4. </form>
  5. $("input:enabled") // 找到可用的input标签

找到被选中的option:

  1. <select id="s1">
  2. <option value="beijing">北京市</option>
  3. <option value="shanghai">上海市</option>
  4. <option selected value="guangzhou">广州市</option>
  5. <option value="shenzhen">深圳市</option>
  6. </select>
  7. $(":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”)

  1. .first() // 获取匹配的第一个元素
  2. .last() // 获取匹配的最后一个元素
  3. .not() // 从匹配元素的集合中删除与指定表达式匹配的元素
  4. .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
  5. .eq() // 索引值等于指定值的元素

左侧菜单栏代码示例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="x-ua-compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>左侧菜单示例</title>
  8. <style>
  9. .left {
  10. position: fixed;
  11. left: 0;
  12. top: 0;
  13. width: 20%;
  14. height: 100%;
  15. background-color: rgb(47, 53, 61);
  16. }
  17. .right {
  18. width: 80%;
  19. height: 100%;
  20. }
  21. .menu {
  22. color: white;
  23. }
  24. .title {
  25. text-align: center;
  26. padding: 10px 15px;
  27. border-bottom: 1px solid #23282e;
  28. }
  29. .items {
  30. background-color: #181c20;
  31. }
  32. .item {
  33. padding: 5px 10px;
  34. border-bottom: 1px solid #23282e;
  35. }
  36. .hide {
  37. display: none;
  38. }
  39. </style>
  40. </head>
  41. <body>
  42. <div class="left">
  43. <div class="menu">
  44. <div class="item">
  45. <div class="title">菜单一</div>
  46. <div class="items">
  47. <div class="item">111</div>
  48. <div class="item">222</div>
  49. <div class="item">333</div>
  50. </div>
  51. </div>
  52. <div class="item">
  53. <div class="title">菜单二</div>
  54. <div class="items hide">
  55. <div class="item">111</div>
  56. <div class="item">222</div>
  57. <div class="item">333</div>
  58. </div>
  59. </div>
  60. <div class="item">
  61. <div class="title">菜单三</div>
  62. <div class="items hide">
  63. <div class="item">111</div>
  64. <div class="item">222</div>
  65. <div class="item">333</div>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="right"></div>
  71. <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  72. <script>
  73. $(".title").click(function (){ // jQuery绑定事件
  74. // 隐藏所有class里有.items的标签
  75. // $(".items").addClass("hide"); //批量操作
  76. // $(this).next().removeClass("hide");
  77. // jQuery链式操作
  78. $(this).next().removeClass('hide').parent().siblings().find('.items').addClass('hide')
  79. });
  80. </script>

操作标签

样式操作

样式类
addClass();// 添加指定的CSS类名。
removeClass();// 移除指定的CSS类名。
hasClass();// 判断样式存不存在
toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。
示例:开关灯和模态框
CSS
css(“color”,”red”)//DOM操作:tag.style.color=”red”
示例:
$(“p”).css(“color”, “red”); //将所有p标签的字体设置为红色

位置操作

offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置
position()// 获取匹配元素相对父元素的偏移
scrollTop()// 获取匹配元素相对滚动条顶部的偏移
scrollLeft()// 获取匹配元素相对滚动条左侧的偏移

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

  1. <!DOCTYPE html>
  2. <html lang="en"
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="x-ua-compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>位置相关示例之返回顶部</title>
  8. <style>
  9. .c1 {
  10. width: 100px;
  11. height: 200px;
  12. background-color: red;
  13. }
  14. .c2 {
  15. height: 50px;
  16. width: 50px;
  17. position: fixed;
  18. bottom: 15px;
  19. right: 15px;
  20. background-color: #2b669a;
  21. }
  22. .hide {
  23. display: none;
  24. }
  25. .c3 {
  26. height: 100px;
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <button id="b1" class="btn btn-default">点我</button>
  32. <div class="c1"></div>
  33. <div class="c3">1</div>
  34. <div class="c3">2</div>
  35. <div class="c3">3</div>
  36. <div class="c3">4</div>
  37. <div class="c3">5</div>
  38. <div class="c3">6</div>
  39. <div class="c3">7</div>
  40. <div class="c3">8</div>
  41. <div class="c3">9</div>
  42. <div class="c3">10</div>
  43. <div class="c3">11</div>
  44. <div class="c3">12</div>
  45. <div class="c3">13</div>
  46. <div class="c3">14</div>
  47. <div class="c3">15</div>
  48. <div class="c3">16</div>
  49. <div class="c3">17</div>
  50. <div class="c3">18</div>
  51. <div class="c3">19</div>
  52. <div class="c3">20</div>
  53. <div class="c3">21</div>
  54. <div class="c3">22</div>
  55. <div class="c3">23</div>
  56. <div class="c3">24</div>
  57. <div class="c3">25</div>
  58. <div class="c3">26</div>
  59. <div class="c3">27</div>
  60. <div class="c3">28</div>
  61. <div class="c3">29</div>
  62. <div class="c3">30</div>
  63. <div class="c3">31</div>
  64. <div class="c3">32</div>
  65. <div class="c3">33</div>
  66. <div class="c3">34</div>
  67. <div class="c3">35</div>
  68. <div class="c3">36</div>
  69. <div class="c3">37</div>
  70. <div class="c3">38</div>
  71. <div class="c3">39</div>
  72. <div class="c3">40</div>
  73. <div class="c3">41</div>
  74. <div class="c3">42</div>
  75. <div class="c3">43</div>
  76. <div class="c3">44</div>
  77. <div class="c3">45</div>
  78. <div class="c3">46</div>
  79. <div class="c3">47</div>
  80. <div class="c3">48</div>
  81. <div class="c3">49</div>
  82. <div class="c3">50</div>
  83. <div class="c3">51</div>
  84. <div class="c3">52</div>
  85. <div class="c3">53</div>
  86. <div class="c3">54</div>
  87. <div class="c3">55</div>
  88. <div class="c3">56</div>
  89. <div class="c3">57</div>
  90. <div class="c3">58</div>
  91. <div class="c3">59</div>
  92. <div class="c3">60</div>
  93. <div class="c3">61</div>
  94. <div class="c3">62</div>
  95. <div class="c3">63</div>
  96. <div class="c3">64</div>
  97. <div class="c3">65</div>
  98. <div class="c3">66</div>
  99. <div class="c3">67</div>
  100. <div class="c3">68</div>
  101. <div class="c3">69</div>
  102. <div class="c3">70</div>
  103. <div class="c3">71</div>
  104. <div class="c3">72</div>
  105. <div class="c3">73</div>
  106. <div class="c3">74</div>
  107. <div class="c3">75</div>
  108. <div class="c3">76</div>
  109. <div class="c3">77</div>
  110. <div class="c3">78</div>
  111. <div class="c3">79</div>
  112. <div class="c3">80</div>
  113. <div class="c3">81</div>
  114. <div class="c3">82</div>
  115. <div class="c3">83</div>
  116. <div class="c3">84</div>
  117. <div class="c3">85</div>
  118. <div class="c3">86</div>
  119. <div class="c3">87</div>
  120. <div class="c3">88</div>
  121. <div class="c3">89</div>
  122. <div class="c3">90</div>
  123. <div class="c3">91</div>
  124. <div class="c3">92</div>
  125. <div class="c3">93</div>
  126. <div class="c3">94</div>
  127. <div class="c3">95</div>
  128. <div class="c3">96</div>
  129. <div class="c3">97</div>
  130. <div class="c3">98</div>
  131. <div class="c3">99</div>
  132. <div class="c3">100</div>
  133. <button id="b2" class="btn btn-default c2 hide">返回顶部</button>
  134. <script src="jquery-3.2.1.min.js"></script>
  135. <script>
  136. $("#b1").on("click", function () {
  137. $(".c1").offset({left: 200, top:200});
  138. });
  139. $(window).scroll(function () {
  140. if ($(window).scrollTop() > 100) {
  141. $("#b2").removeClass("hide");
  142. }else {
  143. $("#b2").addClass("hide");
  144. }
  145. });
  146. $("#b2").on("click", function () {
  147. $(window).scrollTop(0);
  148. })
  149. </script>
  150. </body>
  151. </html>

尺寸:

  1. height()
  2. width()
  3. innerHeight()
  4. innerWidth()
  5. outerHeight()
  6. outerWidth()

文本操作

HTML代码:
html()// 取得第一个匹配元素的html内容
html(val)// 设置所有匹配元素的html内容
文本值:
text()// 取得所有匹配元素的内容
text(val)// 设置所有匹配元素的内容
值:
val()// 取得第一个匹配元素的当前值
val(val)// 设置所有匹配元素的值
val([val1, val2])// 设置多选的checkbox、多选select的值

示例:

  1. <input type="checkbox" value="basketball" name="hobby">篮球
  2. <input type="checkbox" value="football" name="hobby">足球
  3. <select multiple id="s1">
  4. <option value="1">1</option>
  5. <option value="2">2</option>
  6. <option value="3">3</option>
  7. </select>

设置值:
$(“[name=’hobby’]”).val([‘basketball’, ‘football’]);
$(“#s1”).val([“1”, “2”])
示例:
获取被选中的checkbox或radio的值:

  1. <label for="c1"></label>
  2. <input name="gender" id="c1" type="radio" value="0">
  3. <label for="c2"></label>
  4. <input name="gender" id="c2" type="radio" value="1">

可以使用:
$(“input[name=’gender’]:checked”).val()

登陆校验示例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="x-ua-compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>文本操作之登录验证</title>
  8. <style>
  9. .error {
  10. color: red;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <form action="">
  16. <div>
  17. <label for="input-name">用户名</label>
  18. <input type="text" id="input-name" name="name">
  19. <span class="error"></span>
  20. </div>
  21. <div>
  22. <label for="input-password">密码</label>
  23. <input type="password" id="input-password" name="password">
  24. <span class="error"></span>
  25. </div>
  26. <div>
  27. <input type="button" id="btn" value="提交">
  28. </div>
  29. </form>
  30. <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  31. <script>
  32. $("#btn").click(function () {
  33. var username = $("#input-name").val();
  34. var password = $("#input-password").val();
  35. if (username.length === 0) {
  36. $("#input-name").siblings(".error").text("用户名不能为空");
  37. }
  38. if (password.length === 0) {
  39. $("#input-password").siblings(".error").text("密码不能为空");
  40. }
  41. })
  42. </script>
  43. </body>
  44. </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”)。

  1. <input type="checkbox" value="1">
  2. <input type="radio" value="2">
  3. <script>
  4. $(":checkbox[value='1']").prop("checked", true);
  5. $(":radio[value='2']").prop("checked", true);
  6. </script>

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

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

再执行:
$(“#i1”).attr(“checked”) // checked
$(“#i1”).prop(“checked”) // true
这已经可以证明attr的局限性,它的作用范围只限于HTML标签内的属性,而prop获取的是这个DOM对象的属性,选中返回true,没选中返回false。
接下来再看一下针对自定义属性,attr和prop又有什么区别:

执行以下代码:
$(“#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()// 参数

点击复代码示例制:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="x-ua-compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>克隆</title>
  8. <style>
  9. #b1 {
  10. background-color: deeppink;
  11. padding: 5px;
  12. color: white;
  13. margin: 5px;
  14. }
  15. #b2 {
  16. background-color: dodgerblue;
  17. padding: 5px;
  18. color: white;
  19. margin: 5px;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <button id="b1">屠龙宝刀,点击就送</button>
  25. <hr>
  26. <button id="b2">屠龙宝刀,点击就送</button>
  27. <script src="jquery-3.2.1.min.js"></script>
  28. <script>
  29. // clone方法不加参数true,克隆标签但不克隆标签带的事件
  30. $("#b1").on("click", function () {
  31. $(this).clone().insertAfter(this);
  32. });
  33. // clone方法加参数true,克隆标签并且克隆标签带的事件
  34. $("#b2").on("click", function () {
  35. $(this).clone(true).insertAfter(this);
  36. });
  37. </script>
  38. </body>
  39. </html>

事件

常用事件

  1. click(function(){...})
  2. hover(function(){...})
  3. blur(function(){...})
  4. focus(function(){...})
  5. change(function(){...})
  6. keyup(function(){...})

keydown和keyup事件组合示例:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta http-equiv="content-Type" charset="UTF-8">
  5. <meta http-equiv="x-ua-compatible" content="IE=edge">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. <table border="1">
  10. <thead>
  11. <tr>
  12. <th>#</th>
  13. <th>姓名</th>
  14. <th>操作</th>
  15. </tr>
  16. </thead>
  17. <tbody>
  18. <tr>
  19. <td><input type="checkbox"></td>
  20. <td>Egon</td>
  21. <td>
  22. <select>
  23. <option value="1">上线</option>
  24. <option value="2">下线</option>
  25. <option value="3">停职</option>
  26. </select>
  27. </td>
  28. </tr>
  29. <tr>
  30. <td><input type="checkbox"></td>
  31. <td>Alex</td>
  32. <td>
  33. <select>
  34. <option value="1">上线</option>
  35. <option value="2">下线</option>
  36. <option value="3">停职</option>
  37. </select>
  38. </td>
  39. </tr>
  40. <tr>
  41. <td><input type="checkbox"></td>
  42. <td>Yuan</td>
  43. <td>
  44. <select>
  45. <option value="1">上线</option>
  46. <option value="2">下线</option>
  47. <option value="3">停职</option>
  48. </select>
  49. </td>
  50. </tr>
  51. <tr>
  52. <td><input type="checkbox"></td>
  53. <td>EvaJ</td>
  54. <td>
  55. <select>
  56. <option value="1">上线</option>
  57. <option value="2">下线</option>
  58. <option value="3">停职</option>
  59. </select>
  60. </td>
  61. </tr>
  62. <tr>
  63. <td><input type="checkbox"></td>
  64. <td>Gold</td>
  65. <td>
  66. <select>
  67. <option value="1">上线</option>
  68. <option value="2">下线</option>
  69. <option value="3">停职</option>
  70. </select>
  71. </td>
  72. </tr>
  73. </tbody>
  74. </table>
  75. <input type="button" id="b1" value="全选">
  76. <input type="button" id="b2" value="取消">
  77. <input type="button" id="b3" value="反选">
  78. <script src="jquery-3.3.1.js"></script>
  79. <script>
  80. var flag = false;
  81. // shift按键被按下的时候
  82. $(window).keydown(function (event) {
  83. console.log(event.keyCode);
  84. if (event.keyCode === 16){
  85. flag = true;
  86. }
  87. });
  88. // shift按键被抬起的时候
  89. $(window).keyup(function (event) {
  90. console.log(event.keyCode);
  91. if (event.keyCode === 16){
  92. flag = false;
  93. }
  94. });
  95. // select标签的值发生变化的时候
  96. $("select").change(function (event) {
  97. // 如果shift按键被按下,就进入批量编辑模式
  98. // shift按键对应的code是16
  99. // 判断当前select这一行是否被选中
  100. console.log($(this).parent().siblings().first().find(":checkbox"));
  101. var isChecked = $(this).parent().siblings().first().find(":checkbox").prop("checked");
  102. console.log(isChecked);
  103. if (flag && isChecked) {
  104. // 进入批量编辑模式
  105. // 1. 取到当前select选中的值
  106. var value = $(this).val();
  107. // 2. 给其他被选中行的select设置成和我一样的值
  108. // 2.1 找到那些被选中行的select
  109. var $select = $("input:checked").parent().parent().find("select")
  110. // 2.2 给选中的select赋值
  111. $select.val(value);
  112. }
  113. });
  114. </script>
  115. </body>
  116. </html>

hover事件示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <p>苍茫的天涯是我的哎,绵绵的青山脚下一片海!</p>
  9. <script src="jQuery-3.3.1.js">
  10. </script>
  11. <script>
  12. $('p').hover(
  13. function () {
  14. alert('来啦,老弟')
  15. },
  16. function () {
  17. alert('慢走哦~')
  18. }
  19. )
  20. </script>
  21. </body>
  22. </html>

实时监听input输入值变化示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="x-ua-compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>实时监听input输入值变化</title>
  8. </head>
  9. <body>
  10. <input type="text" id="i1">
  11. <script src="jquery-3.2.1.min.js"></script>
  12. <script>
  13. /*
  14. * oninput是HTML5的标准事件
  15. * 能够检测textarea,input:text,input:password和input:search这几个元素的内容变化,
  16. * 在内容修改后立即被触发,不像onchange事件需要失去焦点才触发
  17. * oninput事件在IE9以下版本不支持,需要使用IE特有的onpropertychange事件替代
  18. * 使用jQuery库的话直接使用on同时绑定这两个事件即可。
  19. * */
  20. $("#i1").on("input propertychange", function () {
  21. alert($(this).val());
  22. })
  23. </script>
  24. </body>
  25. </html>

事件绑定

  1. .on( events [, selector ],function(){})
  • events: 事件
  • selector: 选择器(可选的)
  • function: 事件处理函数

    移除事件

  1. .off( events [, selector ][,function(){}])

off() 方法移除用 .on()绑定的事件处理程序。

  • events: 事件
  • selector: 选择器(可选的)
  • function: 事件处理函数

    阻止后续事件执行

  1. return false; // 常见阻止表单提交等
  2. e.preventDefault(); ``` <!DOCTYPE html>

  1. 注意:<br />像clickkeydownDOM中定义的事件,我们都可以使用`.on()`方法来绑定事件,但是`hover`这种jQuery中定义的事件就不能用`.on()`方法来绑定了。<br />想使用事件委托的方式绑定hover事件处理函数,可以参照如下代码分两步绑定事件:

$(‘ul’).on(‘mouseenter’, ‘li’, function() {//绑定鼠标进入事件 $(this).addClass(‘hover’); }); $(‘ul’).on(‘mouseleave’, ‘li’, function() {//绑定鼠标划出事件 $(this).removeClass(‘hover’); });

  1. <a name="autoid-1-10-4"></a>
  2. ### 阻止事件冒泡

<!DOCTYPE html>

点我

<a name="autoid-1-10-5"></a> ### 页面载入 当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。<br />两种写法:<br />$(document).ready(function(){<br />// 在这里写你的JS代码...<br />})<br />简写:<br />$(function(){<br />// 你在这里写你的代码<br />})<br />文档加载完绑定事件,并且阻止默认事件发生:<br />登陆注册示例: <!DOCTYPE html>
<a name="autoid-1-10-6"></a> ### 与window.onload的区别 - window.onload()函数有覆盖现象,必须等待着图片资源加载完成之后才能调用 - jQuery的这个入口函数没有函数覆盖现象,文档加载完成之后就可以调用(建议使用此函数) <a name="autoid-1-10-7"></a> ### 事件委托 事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件。<br />示例:<br />表格中每一行的编辑和删除按钮都能触发相应的事件。<br />$("table").on("click", ".delete", function () {<br /> // 删除按钮绑定的事件<br />}) <a name="autoid-1-10-8"></a> ## 动画效果 // 基本 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>
点赞
<a name="autoid-1-11-0"></a> ## 补充部分知识点 <a name="autoid-1-12-0"></a> ### each **jQuery.each(collection, callback(indexInArray, valueOfElement)):**<br />描述:一个通用的迭代函数,它可以用来无缝迭代对象和数组。数组和类似数组的对象通过一个长度属性(如一个函数的参数对象)来迭代数字索引,从0到length - 1。其他对象通过其属性名进行迭代。<br />li =[10,20,30,40]<br />$.each(li,function(i, v){<br /> console.log(i, v);//index是索引,ele是每次循环的具体元素。<br />})<br />输出:<br />010<br />120<br />230<br />340 **.each(function(index, Element)):**<br />描述:遍历一个jQuery对象,为每个匹配元素执行一个函数。<br />`.each()` 方法用来迭代jQuery对象中的每一个DOM元素。每次回调函数执行时,会传递当前循环次数作为参数(从0开始计数)。由于回调函数是在当前DOM元素为上下文的语境中触发的,所以关键字 `this` 总是指向这个元素。<br />// 为每一个li标签添加foo<br />$("li").each(function(){<br /> $(this).addClass("c1");<br />});<br />注意: jQuery的方法返回一个jQuery对象,遍历jQuery集合中的元素 - 被称为隐式_迭代_的过程。当这种情况发生时,它通常不需要显式地循环的 `.each()`方法:<br />也就是说,上面的例子没有必要使用each()方法,直接像下面这样写就可以了:<br />$("li").addClass("c1"); // 对所有标签做统一操作<br />**注意:**<br />在遍历过程中可以使用 `return false`提前结束each循环。<br />**终止each循环**<br />return false; <a name="autoid-1-12-1"></a> ### .data() 在匹配的元素集合中的所有元素上存储任意相关数据或返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。<br />**.data(key, value):**<br />描述:在匹配的元素上存储任意相关数据。<br />$("div").data("k",100);//给所有div标签都保存一个名为k,值为100<br />**.data(key):**<br />描述: 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值—通过 `.data(name, value)`或 `HTML5 data-*`属性设置。<br />$("div").data("k");//返回第一个div标签中保存的"k"的值<br />.removeData(key):<br />描述:移除存放在元素上的数据,不加key参数表示移除所有保存的数据。<br />$("div").removeData("k"); //移除元素上存放k对应的数据<br />示例:<br />模态框编辑的数据回填表格 <a name="autoid-1-12-2"></a> ### 插件(了解即可) jQuery.extend(object)<br />jQuery的命名空间下添加新的功能。多用于插件开发者向 jQuery 中添加新函数时使用。<br />示例: jQuery.fn.extend(object)<br />一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法。 单独写在文件中的扩展: (function(jq){ jq.extend({ funcName:function(){ … }, }); })(jQuery); 自定义的jQuery登录验证插件<br />html文件 <!DOCTYPE html>

  1. 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); ```