第八篇 (2)jQuery

jQuery是一个javascript库,核心理念是write less,do more(写得更少,做得更多),他内部帮我们把几乎所有功能都做了封装,相比上一节基于DOM、BOM操作会更加简单。例如:

  1. // DOM根据ID选择标签对象
  2. document.getElementById("xx")
  3. // jQuery根据ID选择标签对象
  4. $('#xx')

jQuery封装了非常多的功能,我们课程会结合案例将最常用的功能做详细讲解。

 jQuery

前戏

1. 快速应用

在使用jQuery时,需要提前下载并应用jQuery之后,才能在代码中使用。

 

  • 应用jQuery

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <metacharset='utf-8'/>
    5. <title>jQuery</title>
    6. </head>
    7. <body>
    8. <divclass="body">
    9. <ul>
    10. <liid="login">登录</li>
    11. <liid="register">注册</li>
    12. </ul>
    13. </div>
    14. <!--引入jQuery-->
    15. <scripttype="text/javascript"src="js/jquery-3.4.1.min.js"></script>
    16. <script>
    17. // 利用jQuery提供的功能获取标签文本
    18. var value = $('#login').text();
    19. console.log(value);
    20. </script>
    21. </body>
    22. </html>

2. DOM对象和jQuery对象

DOM对象和jQuery对象都为标签提供了各种各种功能,并且两者之间可以进行相互转换。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <metacharset='utf-8'/>
  5. <title>jQuery</title>
  6. </head>
  7. <body>
  8. <divid="content">人生如烟,烟如雾。</div>
  9. <!--引入jQuery-->
  10. <scriptsrc="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
  11. <script>
  12. // DOM操作
  13. // 获取文本
  14. var txt = document.getElementById('content').innerText;
  15. document.getElementById('content').innerText ='沙雕';
  16. // jQuery操作
  17. var text = $('#content').text();
  18. $('#content').text('二货');
  19. // Dom对象转换jQuery对象:$(dom对象)
  20. $(document.getElementById('content'))
  21. // jQuery对象转换成Dom对象:jQuery对象[0]
  22. $('#content')[0]
  23. </script>
  24. </body>
  25. </html>

5.1 选择器

jQuery提供了大量选择器,用于帮助开发者快速找到HTML中的指定标签。

5.1.1 id 选择器

HTML代码:

  1. <divid="notMe">
  2. <p>id="notMe"</p>
  3. </div>
  4. <divid="myDiv">白日依山尽</div>

jQuery代码:

  1. $("#myDiv");

结果:

  1. [<div id="myDiv">id="myDiv"</div>]

5.1.2 class 选择器

HTML代码:

  1. <divclass="notMe">窗前明月光</div>
  2. <divclass="myClass">疑是地上霜</div>
  3. <spanclass="myClass">举头望明月</span>

jQuery代码:

  1. $(".myClass");

结果:

  1. [<div class="myClass">窗前明月光</div>, <span class="myClass">举头望明月</span>]

5.1.3 标签选择器

HTML代码:

  1. <div>DIV1</div>
  2. <div>DIV2</div>
  3. <span>SPAN</span>

jQuery代码:

  1. $("div");

结果:

  1. [<div>DIV1</div>, <div>DIV2</div>]

5.1.4 多选择器

HTML代码:

  1. <div></div>
  2. <pclass="myClass">我顶你个肺</p>
  3. <span>你太美</span>
  4. <pclass="notMyClass">哈哈哈哈哈哈</p>

jQuery代码:

  1. $("div,span,p.myClass")

结果:

  1. [<div>鸡</div>, <p class="myClass">我顶你个肺</p>,<span>你太美</span>]

5.1.5 层级选择器

HTML代码:

  1. <form>
  2. <label>Name:</label>
  3. <inputname="name"/>
  4. <div>
  5. <label>Newsletter:</label>
  6. <inputname="newsletter"/>
  7. </div>
  8. </form>
  9. <inputname="none"/>

jQuery代码:

  1. $("form input")

结果:

  1. [<input name="name"/>,<input name="newsletter"/>]

5.1.6 属性选择器

HTML代码:

  1. <inputtype="checkbox"name="newsletter"value="Hot Fuzz"/>
  2. <inputtype="checkbox"name="newsletter"value="Cold Fusion"/>
  3. <inputtype="checkbox"name="accept"value="Evil Plans"/>

jQuery代码:

  1. $("input[name='newsletter']")

结果:

  1. [<input type="checkbox" name="newsletter" value="Hot Fuzz"/>,<input type="checkbox" name="newsletter" value="Cold Fusion"/>]

5.1.7 表单选择器

HTML代码:

  1. <form>
  2. <inputtype="button"value="Input Button"/>
  3. <inputtype="checkbox"/>
  4. <inputtype="file"/>
  5. <inputtype="hidden"/>
  6. <inputtype="image"/>
  7. <inputtype="password"/>
  8. <inputtype="radio"/>
  9. <inputtype="reset"/>
  10. <inputtype="submit"/>
  11. <inputtype="text"/>
  12. <select>
  13. <option>Option</option>
  14. </select>
  15. <textarea></textarea>
  16. <button>Button</button>
  17. </form>

jQuery代码:

  1. $(":text")// 找到所有input标签
  2. // $(":input") 找到所有input标签
  3. // $(":password") 找到所有input且type=password的标签
  4. // $(":radio") 找到所有input且type=radio的标签
  5. // $(":checkbox") 找到所有input且type=checkbox的标签

结果:

  1. [<input type="text"/>]

5.2 筛选器

筛选器一般用于对选择器选中的标签进行再次筛选。

5.2.1 parent 父标签

HTML代码:

  1. <div><p>Hello</p><p>Hello</p></div>

jQuery代码:

  1. $("p").parent()

结果:

  1. [<div><p>Hello</p><p>Hello</p></div>]

5.2.2 children 所有子标签

HTML代码:

  1. <p>Hello</p><div><span>Hello Again</span></div><p>And Again</p>

jQuery代码:

  1. $("div").children()

结果:

  1. [<span>HelloAgain</span>]

5.2.3 next 下一个兄弟标签

HTML代码:

  1. <p>Hello</p><p>Hello Again</p><div><span>And Again</span></div>

jQuery代码:

  1. $("p").next()

结果:

  1. [<p>HelloAgain</p>, <div><span>And Again</span></div>]

5.2.4 prev 上一个兄弟标签

HTML代码:

  1. <p>Hello</p><div><span>Hello Again</span></div><p>And Again</p>

jQuery代码:

  1. $("p").prev()

结果:

  1. [<div><span>HelloAgain</span></div>]

5.3.5 siblings 所有兄弟标签

HTML代码:

  1. <p>Hello</p><div><span>Hello Again</span></div><p>And Again</p>

jQuery代码:

  1. $("div").siblings()

结果:

  1. [<p>Hello</p>, <p>And Again</p>]

5.3.6 find 子孙中查找标签

HTML代码:

  1. <p><span>Hello</span>, how are you?</p>

jQuery代码:

  1. $("p").find("span")

结果:

  1. [<span>Hello</span>]

5.3.7 first 匹配的第一个标签

HTML代码:

  1. <ul>
  2. <li>list item 1</li>
  3. <li>list item 2</li>
  4. <li>list item 3</li>
  5. <li>list item 4</li>
  6. <li>list item 5</li>
  7. </ul>

jQuery代码:

  1. $('li').first()

结果:

  1. [<li>list item 1</li>]

5.3.8 last 匹配的最后一个标签

HTML代码:

  1. <ul>
  2. <li>list item 1</li>
  3. <li>list item 2</li>
  4. <li>list item 3</li>
  5. <li>list item 4</li>
  6. <li>list item 5</li>
  7. </ul>

jQuery代码:

  1. $('li').last()

结果:

  1. [<li>list item 5</li>]

5.3 属性

5.3.1 addClass 添加样式

HTML代码:

  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .c1{
  8. height:200px;
  9. width:200px;
  10. border-radius:50%;
  11. background-color: red;
  12. }
  13. .green{
  14. background-color: green;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <divclass="c1"></div>
  20. </body>
  21. </html>

jQuery代码:

  1. $('.c1').addClass('green')

结果:

  1. div标签背景颜色变成了绿色

5.3.2 removeClass 删除样式

HTML代码:

  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .c1{
  8. height:200px;
  9. width:200px;
  10. border-radius:50%;
  11. background-color: red;
  12. }
  13. .green{
  14. background-color: green;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <divclass="c1 green"></div>
  20. </body>
  21. </html>

jQuery代码:

  1. $('.c1').removeClass('green')

结果:

  1. div标签背景又变成了红色
案例:加载框/Tab菜单切换

5.3.3 html、text文本

HTML代码:

  1. <divclass="a1">
  2. <ahref="">百度</a>
  3. </div>
  4. <divclass="a2"></div>

jQuery代码:

  1. 取值:
  2. $('.a1').html()
  3. $('.a1').text()
  4. 设置值:
  5. $('.a2').html('<a href="">京东</a>')
  6. $('.a2').text('<a href="">京东</a>')

结果:

  1. 取值结果:
  2. html:<a href="">百度</a>
  3. text:百度
  4. 设置值结果:
  5. html中的内容会生成一个标签
  6. text中的内容还是一个文本内容显示,不能识别成标签

5.3.4 val 值

HTML代码:

  1. <inputtype="text"id="username">
  2. <inputtype="text"class="a1"name="sex">
  3. <inputtype="text"class="a1"name="sex">
  4. <inputtype="text"class="a2"name="hobby">抽烟
  5. <inputtype="text"class="a2"name="hobby">喝酒
  6. <inputtype="text"class="a2"name="hobby">烫头
  7. <selectname="city"id="s1">
  8. <optionvalue="1">北京</option>
  9. <optionvalue="2">上海</option>
  10. <optionvalue="3">深圳</option>
  11. </select>
  12. <selectname="lover"id="s2">
  13. <optionvalue="1">波多</option>
  14. <optionvalue="2">苍井</option>
  15. <optionvalue="3">小泽</option>
  16. </select>

jQuery代码:

  1. 获取值:
  2. 文本输入框:$('#username').val();
  3. 单选radio框:$('.a1:checked').val();
  4. 多选checkout框:$('.a2:checked').val()是不行的;需要循环取值,如下:
  5. var d = $(':checkbox:checked');
  6. for(var i=0;i<d.length;i++){
  7. console.log(d.eq(i).val());
  8. }
  9. 单选select框:$('#city').val();
  10. 多选select框:$('#lover').val();
  11. 设置值:
  12. 文本输入框:$('#username').val('you are my love');
  13. 单选radio框:$('.a1').val([2]);#注意里面必须是列表,写的是value属性对应的值
  14. 多选checkout框:$('.a2').val(['2','3'])
  15. 单选select框:$('#city').val('1');
  16. 多选select框:$('#lover').val(['2','3'])
案例:模态框添加和编辑功能
  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .cover {
  8. position:fixed;
  9. top:0;
  10. right:0;
  11. bottom:0;
  12. left:0;
  13. background-color: rgba(0,0,0,0.3);
  14. z-index:99;
  15. }
  16. .modal {
  17. width:300px;
  18. height:200px;
  19. background-color: white;
  20. position: absolute;
  21. top:50%;
  22. left:50%;
  23. margin-top:-100px;
  24. margin-left:-150px;
  25. z-index:1000;
  26. }
  27. .hide {
  28. display: none;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <buttonid="add">新增</button>
  34. <tableborder="1">
  35. <thead>
  36. <tr>
  37. <th>#</th>
  38. <th>姓名</th>
  39. <th>爱好</th>
  40. <th>操作</th>
  41. </tr>
  42. </thead>
  43. <tbody>
  44. <tr>
  45. <td><inputtype="checkbox"></td>
  46. <td>金老板</td>
  47. <td>开车</td>
  48. <td>
  49. <buttonclass="fire">开除</button>
  50. </td>
  51. </tr>
  52. <tr>
  53. <td><inputtype="checkbox"></td>
  54. <td>景女神</td>
  55. <td>茶道</td>
  56. <td>
  57. <buttonclass="fire">开除</button>
  58. </td>
  59. </tr>
  60. <tr>
  61. <td><inputtype="checkbox"></td>
  62. <td>苑昊(苑局)</td>
  63. <td>不洗头、不翻车、不要脸</td>
  64. <td>
  65. <buttonclass="fire">开除</button>
  66. </td>
  67. </tr>
  68. </tbody>
  69. </table>
  70. <divclass="cover hide"></div>
  71. <divclass="modal hide">
  72. <div>
  73. <label>姓名:
  74. <inputtype="text"id="name">
  75. </label>
  76. </div>
  77. <div>
  78. <label>爱好:
  79. <inputtype="text"id="hobby">
  80. </label>
  81. </div>
  82. <buttonid="cancel"type="button">取消</button>
  83. <buttonid="submit"type="button">提交</button>
  84. </div>
  85. <scriptsrc="jquery.js"></script>
  86. <script>
  87. // 定义一个清空输入框并且隐藏模态框的方法
  88. function hideModal(){
  89. // 1. 清空input的值
  90. $("#name,#hobby").val('');
  91. // 2. 隐藏起来
  92. $(".cover,.modal").addClass('hide');
  93. }
  94. // 开除按钮的功能
  95. $("table").on('click','.fire',function(){//我们先去学冒泡事件、事件委托然后再回来学这个例子,事件里面都是用的匿名函数,这里用on是因为我
  96. //们要将新添加进来的每行里面的button标签能够继承这个点击删除的事件
  97. // 点击开除按钮要做的事儿
  98. // 把当前行移除掉
  99. //this --> 触发当前点击事件的DOM对象
  100. $(this).parent().parent().remove();// 链式操作
  101. });
  102. // 新增按钮的功能
  103. $("#add").click(function(){
  104. // 点击新增按钮要做的事儿
  105. // 1. 移除cover和modal的hide样式
  106. $(".cover,.modal").removeClass('hide');
  107. });
  108. // 点击modal中的cancel按钮
  109. $("#cancel").click(function(){
  110. hideModal();
  111. });
  112. // 点击modal中的submit按钮
  113. $("#submit").click(function(){
  114. // 1. 获取用户输入的值
  115. var name = $("#name").val();
  116. var hobby = $("#hobby").val();
  117. // 2. 隐藏模态框,清空输入框
  118. hideModal();
  119. // 3. 创建一个tr标签,把数据塞进去
  120. var trEle = document.createElement("tr");
  121. $(trEle).append('<td><input type="checkbox"></td>');
  122. $(trEle).append('<td>'+ name +'</td>');
  123. var tdTmp = document.createElement('td');
  124. tdTmp.innerText = hobby;
  125. $(trEle).append(tdTmp);
  126. $(trEle).append('<td><button class="fire">开除</button></td>')
  127. // 4. 把上一步的tr追加到表格的tbody后面
  128. $('tbody').append(trEle);
  129. });
  130. </script>
  131. </body>
  132. </html>

5.3.4 prop 属性值

HTML代码:

  1. <inputtype="checkbox"id="i1"value="1">

jQuery代码:

  1. $("#i1").prop("checked")

结果:

  1. false
案例:表格全选、反选、取消
  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <buttonid="all">全选</button>
  9. <buttonid="reverse">反选</button>
  10. <buttonid="cancel">取消</button>
  11. <tableborder="1">
  12. <thead>
  13. <tr>
  14. <th>#</th>
  15. <th>姓名</th>
  16. <th>爱好</th>
  17. </tr>
  18. </thead>
  19. <tbody>
  20. <tr>
  21. <td><inputtype="checkbox"></td>
  22. <td>金老板</td>
  23. <td>开车</td>
  24. </tr>
  25. <tr>
  26. <td><inputtype="checkbox"></td>
  27. <td>景女神</td>
  28. <td>茶道</td>
  29. </tr>
  30. <tr>
  31. <td><inputtype="checkbox"></td>
  32. <td>苑昊(苑局)</td>
  33. <td>不洗头、不翻车、不要脸</td>
  34. </tr>
  35. </tbody>
  36. </table>
  37. <scriptsrc="jquery.js"></script>
  38. <script>
  39. // 点击全选按钮 选中所有的checkbox
  40. // DOM绑定事件方法
  41. // $("#all")[0].onclick = function(){}
  42. // jQuery绑定事件方法
  43. $("#all").click(function(){
  44. $(":checkbox").prop('checked',true);
  45. });
  46. // 取消
  47. $("#cancel").on("click",function(){
  48. $(":checkbox").prop('checked',false);
  49. });
  50. // 反选
  51. $("#reverse").click(function(){
  52. // 1. 找到所有选中的checkbox取消选中
  53. // $("input:checked").prop('checked', false);
  54. // 2. 找到没有选中的checkbox选中
  55. // $("input:not(:checked)").prop('checked', true);
  56. //你会发现上面这么写,不行,为什么呢?因为你做了第一步操作之后,再做第二步操作的时候,所有标签就已经全部取消选中了,所以第二步就把所有标签选中了
  57. // 方法:for循环所有的checkbox,挨个判断原来选中就取消选中,原来没选中就选中
  58. var $checkbox = $(":checkbox");
  59. for(var i=0;i<$checkbox.length;i++){
  60. // 获取原来的选中与否的状态
  61. var status = $($checkbox[i]).prop('checked');
  62. $($checkbox[i]).prop('checked',!status);
  63. }
  64. })
  65. </script>
  66. </body>
  67. </html>

5.4 文档处理

5.4.1 append 内部插入

HTML代码:

  1. <divclass="d1">
  2. <span>波多</span>
  3. </div>

jQuery代码:

  1. $('#d1').append('<a href="http://www.jd.com">京东</a>');

结果:

  1. <divclass="d1">
  2. <span>波多</span>
  3. <ahref="http://www.jd.com">京东</a>
  4. </div>

5.4.2 prepend 内部插入

HTML代码:

  1. <divclass="d1">
  2. <span>波多</span>
  3. </div>

jQuery代码:

  1. $('#d1').prepend('<a href="http://www.jd.com">京东</a>');

结果:

  1. <divclass="d1">
  2. <ahref="http://www.jd.com">京东</a>
  3. <span>波多</span>
  4. </div>

5.4.3 after 外部插入

HTML代码:

  1. <divclass="d1">
  2. <span>波多</span>
  3. </div>

jQuery代码:

  1. $('#d1').after('<a href="http://www.jd.com">京东</a>');

结果:

  1. <divclass="d1">
  2. <span>波多</span>
  3. </div>
  4. <ahref="http://www.jd.com">京东</a>

5.4.4 before 外部插入

HTML代码:

  1. <divclass="d1">
  2. <span>波多</span>
  3. </div>

jQuery代码:

  1. $('#d1').before('<a href="http://www.jd.com">京东</a>');

结果:

  1. <ahref="http://www.jd.com">京东</a>
  2. <divclass="d1">
  3. <span>波多</span>
  4. </div>

5.4.5 empty 删除标签内部的标签

HTML代码:

  1. <divclass="d1">
  2. <span>波多</span>
  3. </div>

jQuery代码:

  1. $('.c1').empty()

结果:

  1. <divclass="d1">
  2. </div>

5.4.6 remove 删除标签

HTML代码:

  1. <divclass="d1">
  2. <span>波多</span>
  3. </div>
  4. <div>你好</div>

jQuery代码:

  1. $('.c1').remove()

结果:

  1. <div>你好</div>
案例:表格数据删除
  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .cover {
  8. position:fixed;
  9. top:0;
  10. right:0;
  11. bottom:0;
  12. left:0;
  13. background-color: rgba(0,0,0,0.3);
  14. z-index:99;
  15. }
  16. .modal {
  17. width:300px;
  18. height:200px;
  19. background-color: white;
  20. position: absolute;
  21. top:50%;
  22. left:50%;
  23. margin-top:-100px;
  24. margin-left:-150px;
  25. z-index:1000;
  26. }
  27. .hide {
  28. display: none;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <buttonid="add">新增</button>
  34. <tableborder="1">
  35. <thead>
  36. <tr>
  37. <th>#</th>
  38. <th>姓名</th>
  39. <th>爱好</th>
  40. <th>操作</th>
  41. </tr>
  42. </thead>
  43. <tbody>
  44. <tr>
  45. <td><inputtype="checkbox"></td>
  46. <td>金老板</td>
  47. <td>开车</td>
  48. <td>
  49. <buttonclass="fire">开除</button>
  50. </td>
  51. </tr>
  52. <tr>
  53. <td><inputtype="checkbox"></td>
  54. <td>景女神</td>
  55. <td>茶道</td>
  56. <td>
  57. <buttonclass="fire">开除</button>
  58. </td>
  59. </tr>
  60. <tr>
  61. <td><inputtype="checkbox"></td>
  62. <td>苑昊(苑局)</td>
  63. <td>不洗头、不翻车、不要脸</td>
  64. <td>
  65. <buttonclass="fire">开除</button>
  66. </td>
  67. </tr>
  68. </tbody>
  69. </table>
  70. <divclass="cover hide"></div>
  71. <divclass="modal hide">
  72. <div>
  73. <label>姓名:
  74. <inputtype="text"id="name">
  75. </label>
  76. </div>
  77. <div>
  78. <label>爱好:
  79. <inputtype="text"id="hobby">
  80. </label>
  81. </div>
  82. <buttonid="cancel"type="button">取消</button>
  83. <buttonid="submit"type="button">提交</button>
  84. </div>
  85. <scriptsrc="jquery.js"></script>
  86. <script>
  87. // 开除按钮的功能
  88. $("table").on('click',function(){
  89. // 把当前行移除掉
  90. //this --> 触发当前点击事件的DOM对象
  91. $(this).parent().parent().remove();// 链式操作
  92. });
  93. </script>
  94. </body>
  95. </html>

5.5 事件

jQuery中也可以为标签进行绑定事件,并且相比于DOM会更加方便。

5.5.1 jQuery绑定事件

  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>jQuery学习</title>
  6. </head>
  7. <body>
  8. <ul>
  9. <li>王宝强</li>
  10. <li>陈羽凡</li>
  11. <li>谢霆锋</li>
  12. </ul>
  13. <scripttype="text/javascript">
  14. // 当页面框架加载完成之后(DOM结构),执行内部代码。
  15. $(function(){
  16. // 通过选择器找到指定标签
  17. $('li').onclick(function(){
  18. // 触发事件时,都会执行此匿名函数。 $(this)代表当前触发的标签。
  19. })
  20. })
  21. </script>
  22. </body>
  23. </html>
案例:左侧菜单实现
  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>JQuery学习</title>
  6. <style>
  7. body {
  8. margin:0;
  9. }
  10. .header {
  11. height:48px;
  12. background-color:#499ef3;
  13. }
  14. .body .menu {
  15. position:fixed;
  16. top:48px;
  17. left:0;
  18. bottom:0;
  19. width:220px;
  20. border-right:1px solid #dddddd;
  21. overflow: scroll;
  22. }
  23. .body .content {
  24. position:fixed;
  25. top:48px;
  26. right:0;
  27. bottom:0;
  28. left:225px;
  29. /* 超出范围的话,出现滚轮 */
  30. overflow: scroll;
  31. }
  32. .body .menu .title {
  33. padding:8px;
  34. border-bottom:1px solid #dddddd;
  35. background-color:#5f4687;
  36. color: white;
  37. }
  38. .body .menu .child {
  39. border-bottom:1px solid #dddddd;
  40. }
  41. .body .menu .child a {
  42. display: block;
  43. padding:5px10px;
  44. color: black;
  45. text-decoration: none;
  46. }
  47. .body .menu .child a:hover {
  48. background-color:#dddddd;
  49. }
  50. .hide {
  51. display: none;
  52. }
  53. </style>
  54. </head>
  55. <body>
  56. <divclass="header"></div>
  57. <divclass="body">
  58. <divclass="menu">
  59. <divclass="item">
  60. <divclass="title">国产</div>
  61. <divclass="child">
  62. <ahref="#">少年的你</a>
  63. <ahref="#">我不是药神</a>
  64. <ahref="#">我和我的祖国</a>
  65. </div>
  66. </div>
  67. <divclass="item">
  68. <divclass="title">欧美</div>
  69. <divclass="child hide ">
  70. <ahref="#">战争之王</a>
  71. <ahref="#">华尔街之狼</a>
  72. <ahref="#">聚焦</a>
  73. </div>
  74. </div>
  75. <divclass="item">
  76. <divclass="title">韩国</div>
  77. <divclass="child hide">
  78. <ahref="#">坏家伙们</a>
  79. <ahref="#">寄生虫</a>
  80. <ahref="#">燃烧</a>
  81. </div>
  82. </div>
  83. </div>
  84. <divclass="content"></div>
  85. </div>
  86. <scripttype="text/javascript">
  87. $(function(){
  88. // 给所有样式有 title 的标签绑定事件
  89. $('.title').click(function(){
  90. // 当前触发事件的标签
  91. $(this).next().removeClass('hide');
  92. $(this).parent().siblings().find('.title').addClass('hide');
  93. })
  94. })
  95. </script>
  96. </body>
  97. </html>

jQuery有很多事件,使用方法和click都是类似的,事件列表如下:

5.5.2 jQuery事件委托

jQuery的事件绑定是在页面加载完毕之后,找到相关标签并为其绑定事件,如果后期通过js代码有新增表现,那么新标签中模式是没有事件的,如:

  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>jQuery学习</title>
  6. </head>
  7. <body>
  8. <inputtype="button"id="btn"value="添加元素">
  9. <ulid="greenBoy">
  10. <li>王宝强</li>
  11. <li>陈羽凡</li>
  12. <li>谢霆锋</li>
  13. </ul>
  14. <scriptsrc="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
  15. <scripttype="text/javascript">
  16. $(function(){
  17. $('li').click(function(){
  18. alert($(this).text());
  19. });
  20. $('#btn').click(function(){
  21. var tag = $('<li>');
  22. tag.text('alex');
  23. $('#greenBoy').append(tag);
  24. })
  25. })
  26. </script>
  27. </body>
  28. </html>

为了避免类似这种情况的发生,jQuery中引入了事件委托的概念,只需要基于on进行绑定即可:

  1. <scripttype="text/javascript">
  2. $(function(){
  3. // on的第一个参数:事件名称
  4. // 第二个参数:选择器
  5. // 第三个参数:事件触发时执行的函数
  6. $('#greenBoy').on("click","li",function(){
  7. alert($(this).text());
  8. });
  9. $('#btn').click(function(){
  10. var tag = $('<li>');
  11. tag.text('alex');
  12. $('#greenBoy').append(tag);
  13. })
  14. })
  15. </script>

5.6 Ajax

ajax作用:通过JavaScript代码向网络上的地址发送异步请求。

为了本地测试方便,我们通过ajax向本地json文件发送请求并获取数据。

  • 本地创建 data.json文件

    ```
    [
    {“id”:1,”name”:”武沛齐”,”age”:18},
    {“id”:2,”name”:”Alex”,”age”:18},
    {“id”:3,”name”:”吴老板”,”age”:18}
    ]

  1. -编写页面 index.html
  2. ```html
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>jQuery学习</title>
  8. </head>
  9. <body>
  10. <input type="button" id="btn" value="获取数据">
  11. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
  12. <script type="text/javascript">
  13. $(function () {
  14. $('#btn').click(function () {
  15. $.ajax({
  16. type: 'GET',
  17. // 也可以向网络地址 http://www.xxxx.com 发送请求。
  18. url: 'data.json',
  19. success: function (arg) {
  20. console.log(arg);
  21. }
  22. })
  23. });
  24. })
  25. </script>
  26. </body>
  27. </html>
案例:基于Ajax实现数据管理
  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>jQuery学习</title>
  6. </head>
  7. <body>
  8. <tableborder="1">
  9. <thead>
  10. <tr>
  11. <th>id</th>
  12. <th>姓名</th>
  13. <th>年龄</th>
  14. </tr>
  15. </thead>
  16. <tbody>
  17. </tbody>
  18. </table>
  19. <inputtype="button"id="btn"value="获取数据">
  20. <scriptsrc="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
  21. <scripttype="text/javascript">
  22. $(function(){
  23. $('#btn').click(function(){
  24. $.ajax({
  25. type:'GET',
  26. // 也可以向网络地址 http://www.xxxx.com 发送请求。
  27. url:'data.json',
  28. success:function(arg){
  29. console.log(arg);
  30. // 1 先制作出所有的tr标签
  31. var s ='';
  32. for(var i in arg){
  33. var a ='<tr><td>'+ arg[i]['id']+'</td><td>'+ arg[i]['name']+'</td><td>'+ arg[i]['age']+'</td></tr>';
  34. s += a;
  35. }
  36. // 2 找到tbody标签,将标签添加进去
  37. $('tbody').append(s);
  38. }
  39. })
  40. });
  41. })
  42. </script>
  43. </body>
  44. </html>

4.4 今日作业

整合jQuery所有知识点实现一个后台管理程序,功能必须包含:

  • 后台管理布局:左侧菜单、右侧内容。
  • 左侧菜单点击切换
  • 右侧展示数据表格(数据通过Ajax获取,之后再基于jQuery展示数据)
  • 对表格数据可以进行:增删改操作(用模态对话框实现)。
posted @ 2021-05-10 16:44  风hua  阅读(56)  评论(0编辑  收藏  举报