WEB入门之十六 操作DOM节点

举报
tea_year 发表于 2021/12/29 23:16:48 2021/12/29
【摘要】 视频课:https://edu.csdn.net/course/play/7621 学习内容  jQuery插入DOM节点  jQuery删除DOM节点  jQuery替换DOM节点  jQuery筛选DOM节点 能力目标  能熟练使用jQuery进行节点操作  能熟练使用j...

视频课:https://edu.csdn.net/course/play/7621

学习内容

 jQuery插入DOM节点

 jQuery删除DOM节点

 jQuery替换DOM节点

 jQuery筛选DOM节点

能力目标

 能熟练使用jQuery进行节点操作

 能熟练使用jQuery进行节点筛选

 


本章简介

DOMDocument Object Model的缩写,即文档对象模型,它是W3C的标准规范,提供了使用JavaScript操纵页面元素的接口。节点是DOM中最基本的组成单位,每个标签、每个文本都可以看成是一个节点。本章将学习使用jQueryDOM节点进行操作。

核心技能部分

7.1 节点操作

节点是DOM中最基本的组成单位,每个标签、每个文本都可以看成是一个节点。节点操作包括获得节点、插入节点、删除节点、复制节点和替换节点等等。

7.1.1 获得节点

节点一般分为三种:元素节点、文本节点和属性节点。元素节点通常使用前面讲的各种选择器即可获得;文本节点使用text( )函数即可获得;属性节点使用attr( )函数即可获得。这些内容在前面都已经讲过,此处不再多述。

7.1.2 插入节点

在实际开发中,有些节点需要动态的插入到页面中,这时可以通过jQuery提供好的一些函数来实现,详见表7-1-1所示。

7-1-1  节点插入函数

函数

说明

append( )

A.append ( B ),把B添加到A元素内的尾部

prepend( )

A.prepend( B ),把B添加到A元素内的头部

before( )

A.before( B ),把B添加到A的前面

after( )

A.after( B ),把B添加到A的后面

jQuery提供的节点插入函数比较全面,下面通过一些示例来演示这些函数的用法,注意它们之间的区别。

示例7.1


  
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <title>示例7.1</title>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. <style type="text/css">
  7. #wai {
  8. border: thin solid #000000;
  9. height: 80px;
  10. width: 150px;
  11. padding-top:20px;
  12. }
  13. #nei {
  14. border: thin dashed #000000;
  15. height: 50px;
  16. width: 50px;
  17. display:inline;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div id="wai"><a href="#">jQuery</a></div>
  23. </body>
  24. </html>
  25. <script>
  26. $("#wai").append("<div id='nei'>新插入的div</div>");
  27. </script>

网页原本只有一个包含超链接的div,我们通过append方法向该div内的尾部插入了一个新的div

网页上原本存在的是边框为实线的div,而边框是虚线的是新插入的div。如果把代码中的append函数换成prepend函数,其他不变

通过对比可以得出appendprepend这两个函数的异同点:这两个函数都是向元素内部插入新节点的,append函数是把节点插入到元素内的尾部,而prepend函数是把节点插入到元素内的头部了。

如果把代码中的prepend换成before函数,其他不变

如果把代码中的before换成after函数,其他不变

通过对比可以得出beforeafter这两个函数的异同点:这两个函数都是向元素外部插入新节点的,before函数是把节点插入到元素的前面,after函数是把节点插入到元素的后面。

7.1.3 删除节点

删除节点指的是把现有的元素从网页中删除,这时可以通过jQuery提供好的一些函数来实现,详见表7-1-2所示。

7-1-2  节点删除函数

函数

说明

remove( )

A.remove( ),把A从页面中删除掉

empty( )

A.empty( ),把A中的所有子元素删除掉

这两个函数都比较简单,下面通过一些示例来演示这些函数的用法,特别是它们之间的区别。

示例7.2


  
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <title>示例7.2</title>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. </head>
  7. <body>
  8. <select id="yuyan">
  9. <option>Java</option>
  10. <option>C#</option>
  11. <option>PHP</option>
  12. <option>SQL</option>
  13. </select>
  14. </body>
  15. </html>
  16. <script>
  17. $("#yuyan").empty();
  18. </script>


网页上原本有个下拉列表框

我们看到下拉列表框中的所有子元素(option)都被删掉了。如果把代码中的empty换成remove函数,其他不变,运行后会发现整个下拉列表框都被删除掉了。

7.1.4 替换节点

替换节点是指把现有的元素用别的元素替换,这主要通过jQuery中的replaceWith函数实现,下面是具体的示例。

示例7.3


  
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <title>示例7.3</title>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. </head>
  7. <body>
  8. 请选择你喜欢的编程语言:<br/>
  9. <input type="checkbox"/><span>Java</span>
  10. <input type="checkbox"/><span>C#</span>
  11. <input type="checkbox"/><span>C++</span>
  12. </body>
  13. </html>
  14. <script>
  15. $("span").mouseover(
  16. function(){
  17. $(this).replaceWith("<span style='color:red'>"+
  18. $(this).text()+"</span>");
  19. }
  20. )
  21. </script>


在上述代码中,当鼠标悬浮到某个语言上时,通过replaceWith函数把原节点(黑色字体)使用红色字体的节点进行了替换

7.1.5 包裹节点

包裹节点是指使用其他节点包裹住某节点,使节点成为其他节点的子节点,这可以通过表7-1-3中的函数实现。

7-1-3  节点包裹函数

函数

说明

wrap( )

A.wrap( B ),用B包裹每一个A

wrapAll( )

A.wrapAll( B ),把所有的A作为整体用B包裹

wrapInner( )

A.wrapInner( B ),用BA中的子元素整个包裹

我们先通过一个示例演示wrapwrapAll函数的区别,参考代码如下所示。

示例7.4


  
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <title>示例7.4</title>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. <style type="text/css">
  7. #wai {
  8. border: thin solid #000000;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <h3>jQuery简介</h3>
  14. <span>jQuery是创建于2006年1月的开源项目,主要包括核心库、UI和插件三部分。</span><br/>
  15. <span>jQuery凭借简洁、优雅的语法和跨平台的兼容性,极大的简化了JavaScript的开发难度。</span><br/>
  16. <span>jQuery强调的理念是:写得少、做得多(write less, do more)。</span><br/>
  17. <span>jQuery独特的选择器、链式的DOM操作、可靠成熟的事件处理机制都是其他JavaScript库无法比拟的。</span>
  18. </body>
  19. </html>
  20. <script>
  21. $("span").wrap("<div id='wai'></div>");
  22. </script>


上述代码使用wrap函数给所有的span标签包裹了一个带有黑色边框的div

如果把上述代码中的wrap换成wrapAll函数,其他不变

wrapInner函数用来包裹元素内的子元素,下面是该函数的一个示例。

示例7.5


  
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <title>示例7.5</title>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. <style type="text/css">
  7. #wai {
  8. border: thin solid #000000;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <ul>
  14. <li>Java</li>
  15. <li>C#</li>
  16. <li>PHP</li>
  17. <li>C++</li>
  18. </ul>
  19. </body>
  20. </html>
  21. <script>
  22. $("ul").wrapInner("<div id='wai'></div>");
  23. </script>


上述代码使用wrapInner函数包裹ul中的所有li子元素

7.1.6 复制节点

clone函数用来复制节点,下面是该函数的一个示例。

示例7.6


  
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <title>示例7.6</title>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. </head>
  7. <body>
  8. <select id="s1" size="4">
  9. <option value="java" selected="selected">Java</option>
  10. <option value="c#">C#</option>
  11. <option value="php">PHP</option>
  12. <option value="c++">C++</option>
  13. </select>
  14. <input type="button" id="btn" value=">>"/>
  15. <select id="s2" size="4">
  16. </select>
  17. </body>
  18. </html>
  19. <script>
  20. $("#btn").click(
  21. function(){
  22. $("#s2").append($("select option:selected").clone());
  23. }
  24. )
  25. </script>


上述代码包含两个下拉列表框,当单击按钮时通过clone函数把第一个下拉列表框的选中项,复制到了另一个下拉列表框中。

7.2 节点筛选

前面我们学习了过滤选择器,它是在获取到元素后通过索引进一步进行了过滤或筛选。除此之外,jQuery还提供了很多函数来对获取到的元素进一步进行过滤或筛选,这些函数整体可分为两大类:节点过滤函数和节点查找函数。

7.2.1 过滤节点

节点过滤函数主要是通过索引来获取节点,详见表7-1-4所示。

7-1-4  节点过滤函数

节点过滤函数

说明

eq( )

按索引获取匹配元素中的第n个元素,索引从0开始

first( )

获取匹配元素中的第1个元素

last( )

获取匹配元素中的最后1个元素

slice( )

按起始索引获取匹配元素中的子集

下面通过一个示例来演示eqfirstlastslice函数的用法,这几个函数有个共同点:都是通过索引进行过滤的。

示例7.7


  
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>示例7.7</title>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. </head>
  7. <body>
  8. <table width="571" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#99CCFF">
  9. <form name="userfrm">
  10. <tr class="register_table_line">
  11. <td width="150" align="right" bgcolor="#E7FBFF">名字:</td>
  12. <td width="415" align="left" bordercolor="#E7E3E7"><input name="fname" type="text" class="register_textBroader"
  13. id="fname" size="24"></td>
  14. </tr>
  15. <tr class="register_table_line">
  16. <td width="150" align="right" bgcolor="#E7FBFF">姓氏:</td>
  17. <td align="left" bordercolor="#E7E3E7"><input name="lname" type="text" class="register_textBroader" id="lname"
  18. size="24"></td>
  19. </tr>
  20. <tr class="register_table_line">
  21. <td width="150" align="right" bgcolor="#E7FBFF">登录名:</td>
  22. <td align="left" bordercolor="#E7E3E7"> <input name="sname" type="text" class="register_textBroader" id="sname"
  23. size="24"></td>
  24. </tr>
  25. <tr class="register_table_line">
  26. <td width="150" align="right" bgcolor="#E7FBFF">密码:</td>
  27. <td align="left" bordercolor="#E7E3E7"> <input name="pass" type="password" class="register_textBroader"
  28. id="pass" size="26"></td>
  29. </tr>
  30. <tr class="register_table_line">
  31. <td width="150" height="0" align="right" bgcolor="#E7FBFF">再次输入密码:</td>
  32. <td height="0" align="left" bordercolor="#E7E3E7"><input name="rpass" type="password"
  33. class="register_textBroader" id="rpass" size="26"></td>
  34. </tr>
  35. <tr class="register_table_line">
  36. <td width="150" height="0" align="right" bgcolor="#E7FBFF">电子邮箱:</td>
  37. <td height="0" align="left" bordercolor="#E7E3E7"><input name="email" type="text" class="register_textBroader"
  38. id="email" size="24"></td>
  39. </tr>
  40. <tr class="register_table_line">
  41. <td width="150" align="right" bgcolor="#E7FBFF">性别:</td>
  42. <td align="left" bordercolor="#E7E3E7">
  43. <input name="gen" type="radio" value="男" checked>
  44. <input name="gen" type="radio" value="女" class="input">
  45. </td>
  46. </tr>
  47. <tr class="register_table_line">
  48. <td width="150" align="right" bgcolor="#E7FBFF">爱好:</td>
  49. <td align="left" bordercolor="#E7E3E7">
  50. <label>
  51. <input type="checkbox" name="checkbox" value="运动">
  52. </label>
  53. 运动
  54. <label>
  55. <input type="checkbox" name="checkbox2" value="聊天">
  56. </label>
  57. 聊天
  58. <label>
  59. <input type="checkbox" name="checkbox22" value="玩游戏">
  60. </label>
  61. 玩游戏
  62. </td>
  63. </tr>
  64. <tr class="register_table_line">
  65. <td width="150" align="right" bgcolor="#E7FBFF">出生日期:</td>
  66. <td align="left" bordercolor="#E7E3E7">
  67. <input name="byear" class="register_textBroader" id="byear" οnfοcus="this.value=''" value="yyyy"
  68. size=4 maxlength=4 > 年
  69. <select name="bmon" >
  70. <option value="" selected>[选择月份]
  71. <option value=0>一月
  72. <option value=1>二月
  73. <option value=2>三月
  74. <option value=3>四月
  75. <option value=4>五月
  76. <option value=5>六月
  77. <option value=6>七月
  78. <option value=7>八月
  79. <option value=8>九月
  80. <option value=9>十月
  81. <option value=10>十一月
  82. <option value=11>十二月
  83. </select>
  84. <input name="bday" class="register_textBroader" id="bday" οnfοcus="this.value=''" value="dd" size=2 maxlength=2 >
  85. </td>
  86. </tr>
  87. <tr class="register_table_line">
  88. <td width="150" height="35" align="right" bgcolor="#E7FBFF">
  89. <input type="reset" id="reset" value="重填"></td>
  90. <td height="35" align="center" bordercolor="#E7E3E7">
  91. <input type="button" id="btn" value="注册">
  92. </td>
  93. </tr>
  94. </form>
  95. </table>
  96. <script>
  97. $("#btn").click(
  98. function(){
  99. var t1="第一个文本框的值是:"+$(":text").first().val()+"\n";
  100. var t2="索引是1的文本框的值是:"+$(":text").eq(1).val()+"\n";
  101. var t3="最后一个文本框的值是:"+$(":text").last().val()+"\n";
  102. var t4="前两个复选框的值是:";
  103. $(":checkbox").slice(0,2).each(
  104. function(){
  105. t4=t4+$(this).val();
  106. }
  107. )
  108. alert(t1+t2+t3+t4);
  109. }
  110. )
  111. </script>
  112. </body>
  113. </html>


上述代码分别使用eq、first、last和slice函数结合选择器获取了相关表单数据

7.2.2 查找节点

节点查找函数用来通过父子、平级、后代等关系查找节点,详见表7-1-5所示。

7-1-5 节点查找函数

节点查找函数

说明

children( )

根据条件获取元素的子元素

parent( )

获取元素的父元素

prev( )

获取紧挨着的前一个平级元素

next( )

获取紧挨着的后一个平级元素

find( )

根据条件找出元素的后代元素

siblings( )

找出与元素平级的所有其他元素

下面我们通过一个示例来演示这几个函数的具体用法,参考代码如下所示。

示例7.8


  
  1. <HTML>
  2. <HEAD>
  3. <META http-equiv="Content-Type" content="text/html; charset=gb2312">
  4. <TITLE>示例7.8</TITLE>
  5. <script src="jquery-1.7.2.min.js"></script>
  6. </HEAD>
  7. <BODY>
  8. <DIV>
  9. <A href="#"><IMG src="sx.gif" width="15" height="15" border="0" align="absmiddle" >分类讨论区</A>
  10. <DIV id="1" style="padding-left:15px;">BBS系统<BR>
  11. 共建水木<BR>
  12. 站务公告栏<BR>
  13. 妆点水木<BR>
  14. </DIV>
  15. </DIV>
  16. <DIV>
  17. <A href="#"><IMG src="sx.gif" width="15" height="15" border="0" align="absmiddle">社会信息</A>
  18. <DIV id="2" style="padding-left:15px;" >美容品与饰品代理<BR>
  19. 考研资料市场<BR>
  20. 商海纵横<BR>
  21. 动物保护者<BR>
  22. 动物世界<BR>
  23. </DIV>
  24. </DIV>
  25. <DIV>
  26. <A href="#"><IMG src="sx.gif" width="15" height="15" border="0" align="absmiddle">休闲娱乐</A>
  27. <DIV id="3" style="padding-left:15px;" >
  28. 七彩水木<BR>
  29. 网友聚会<BR>
  30. 醉品人生<BR>
  31. 花木园艺<BR>
  32. </DIV>
  33. </DIV>
  34. <DIV>
  35. <A href="#"><IMG src="sx.gif" width="15" height="15" border="0" align="absmiddle">电脑技术</A>
  36. <DIV id="4" style="padding-left:15px;" >BBS安装管理<BR>
  37. CAD技术<BR>
  38. 数字图像设计<BR>
  39. 电脑音乐制作<BR>
  40. 软件加密与解密<BR>
  41. </DIV>
  42. </DIV>
  43. </BODY>
  44. </HTML>
  45. <script>
  46. alert($("#4").parent().children("a").text());
  47. alert($("#4").prev().text());
  48. alert($("#3").parent().next().html());
  49. alert($("#4").parent().find("a").text());
  50. alert($("#4").siblings().html());
  51. </script>


上述代码包含了一个树形菜单

本章总结

节点操作是DOM最基础的操作,也比较繁琐,包括插入节点、删除节点、复制节点等。jQuery针对节点操作提供了很多函数供开发人员使用,这些函数很多比较相似,大家在使用的时候要注意区分。


任务实训部分

1动态管理树形菜单

训练技能点

Ø jQuery节点操作

  需求说明

使用jQuery节点操作函数对树形菜单进行动态添加和删除,如图7.2.1所示。添加节点时,需要先单击选中某个一级或二级节点,然后在文本框中填写新添加的节点名,单击【添加】按钮把节点名作为新节点添加到选中的节点下面。删除节点只实现删除三级节点即可。

 

7.2.1  树形菜单

实现步骤

1)实现图7.2.1所示的界面,参考代码如下所示。


  
  1. <style>
  2. div{
  3. width:120px;
  4. }
  5. .sec{
  6. margin-left:15px;
  7. }
  8. .three{
  9. margin-left:25px;
  10. }
  11. a:link,a:visited{
  12. text-decoration:none;
  13. color:black;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. 节点文本:<input id="txt" type="text" size="10" /><input id="btn_add" type="button" value="添加"/><input id="btn_del" type="button" value="删除"/>
  19. <div id="g1"><img src="img/jia.gif"/><a href="#">国产</a>
  20. <div>
  21. <div class="sec"><img src="img/jia.gif"/><a href="#">北京奔驰</a></div>
  22. <div class="sec"><img src="img/jia.gif"/><a href="#">北京现代</a>
  23. <div class="three"><img src="img/flag.gif"/><a href="#">悦翔</a></div>
  24. <div class="three"><img src="img/flag.gif"/><a href="#">索纳塔</a></div>
  25. <div class="three"><img src="img/flag.gif"/><a href="#">途胜</a></div>
  26. <div class="three"><img src="img/flag.gif"/><a href="#">伊兰特</a></div>
  27. </div>
  28. <div class="sec"><img src="img/jia.gif"/><a href="#">比亚迪</a></div>
  29. </div>
  30. </div>
  31. </body>
  32. (2)实现节点的添加,参考代码如下所示。
  33. <script>
  34. var temp="";
  35. $("a").live("click",function(e){
  36. temp=$(this).parent();
  37. }
  38. );
  39. $("#btn_del").click(
  40. function(){
  41. if(temp=="")
  42. alert("删除之前请先单击某个三级节点!");
  43. else if(temp.attr("class")!="three")
  44. alert("你单击的不是三级节点!");
  45. else
  46. temp.remove();
  47. }
  48. );
  49. $("#btn_add").click(
  50. function(){
  51. if($("#txt").val()!="")
  52. {
  53. if(temp=="")
  54. alert("添加之前请先单击某个一级或二级节点!");
  55. else if(temp.attr("class")=="three")
  56. alert("请单击一级或二级节点!");
  57. else
  58. {
  59. if(temp.attr("class")=="sec")
  60. {
  61. temp.append("<div class='three'>
  62. <img src='img/flag.gif'/><a href='#'>"+$('#txt').val()+"</a></div>");
  63. }
  64. else
  65. {
  66. temp.append("<div class='sec'>
  67. <img src='img/jian.gif'/><a href='#'>"+$('#txt').val()+"</a></div>");
  68. }
  69. }
  70. }
  71. }
  72. );
  73. </script>


2:动态管理表格

训练技能点

Ø jQuery节点操作

  需求说明

使用jQuery节点操作函数对行进行动态添加和删除。

 


实现步骤

(1)实现图7.2.2所示的界面,参考代码如下所示。


  
  1. <body>
  2. <table width="58%" height="38" border="1" align="center" id="t">
  3. <tr>
  4. <td bgcolor="#999999"><div align="center">商品名称</div></td>
  5. <td bgcolor="#999999"><div align="center">商品售价</div></td>
  6. <td bgcolor="#999999"><div align="center">产地</div></td>
  7. <td bgcolor="#999999"><div align="center">删除</div></td>
  8. </tr>
  9. </table>
  10. <p align="center">添加商品
  11. <form>
  12. <p align="center">商品名称:
  13. <input type="text" id="pname" />
  14. </p>
  15. <p align="center">商品售价:
  16. <input type="text" id="price" />
  17. </p>
  18. <p align="center">商品产地:
  19. <input type="text" id="paddress" />
  20. </p>
  21. <p align="center">
  22. <input type="button" id="btn" value="添加商品"/>
  23. </p>
  24. </form>
  25. </body>
  26. (2)实现商品的添加和删除,参考代码如下所示。
  27. <script>
  28. $("a").live("click",function(){
  29. $(this).parent().parent().parent().remove();
  30. }
  31. )
  32. $("#btn").click(
  33. function(){
  34. $("#t") .append("<tr><td bgcolor='#999999'>
  35. <div align='center'>"+$("#pname").val()+"</div></td><td bgcolor='#999999'>
  36. <div align='center'>"+$("#price").val()+"</div></td><td bgcolor='#999999'>
  37. <div align='center'>"+$("#paddress").val()+"</div></td><td bgcolor='#999999'>
  38. <div align='center'><a href='#'>删除</a></div></td></tr>");
  39. }
  40. )
  41. </script>


3:省市级联

训练技能点

Ø jQuery节点操作

  需求说明

按照图7.2.3所示的界面使用jQuery节点操作函数实现省市级联。

 


4:价格小计

训练技能点

Ø jQuery节点操作

  需求说明

按照图7.2.4所示的界面使用jQuery节点操作函数实现价格小计。单击“加”“减”图片可以修改文本框中的数值大小,同时后面的小计要计算出来。

 



巩固练习

一、问答题

1. 请举例描述appendprepend这两个函数的异同点。

2. 请举例描述beforeafter这两个函数的异同点。

3. 请举例描述removeempty这两个函数的异同点。

 

 

 

 

二、上机练习

 使用jQuery节点操作函数实现表格内容的修改。当单击【修改】按钮时,单元格中的文本信息替换为文本框;单击【确定】按钮时,文本框中的数据显示到单元格中。


文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。

原文链接:aaaedu.blog.csdn.net/article/details/57387883

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。