博客列表 >JQuery中html元素的DOM操作,动态添加删除:菜品类别和菜品类别对应的菜品

JQuery中html元素的DOM操作,动态添加删除:菜品类别和菜品类别对应的菜品

王娇
王娇原创
2020年06月01日 17:46:551020浏览

学习总结

1. jquery中如果想删除一个元素,必须先用empty()删除这个元素下的子元素,然后再用remove()删除该元素
2. remove(‘active’)可以删除class='active'的所有元素
3. jquery中使用$()工厂函数时,可以使用元素的属性值选择器$("form>.listItem[data-food-index=1"]>div"),data-food-indexlistItem的属性
4. append(‘html代码’)添加元素时,可以直接写html代码

动态添加删除菜品类别和菜品index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>JQuery对html元素的基本操作</title>
  7. <link rel="stylesheet" href="css/index.css" />
  8. <script src="js/jquery-3.5.1.js"></script>
  9. </head>
  10. <body>
  11. <form action="">
  12. <div>
  13. <input
  14. type="text"
  15. name="tabCard"
  16. id="tabCard"
  17. placeholder="添加菜品类别"
  18. />
  19. <button id="addTabBtn" type="button">添加菜品类别</button>
  20. </div>
  21. <div>
  22. <input type="text" name="item" id="item" placeholder="添加菜品" />
  23. <button id="addTabItemBtn" type="button">添加菜品</button>
  24. </div>
  25. <div class="listTab">
  26. <div data-food-index="1">凉菜</div>
  27. <div class="active" data-food-index="2">热菜</div>
  28. <div data-food-index="3">甜品</div>
  29. <div data-food-index="4">酒水</div>
  30. </div>
  31. <div class="listItem" data-food-index="1">
  32. <div class="active" data-food-detail="1">五香酱牛肉</div>
  33. <div data-food-detail="2">凉拌笋丝</div>
  34. <div data-food-detail="3">果仁菠菜</div>
  35. <div data-food-detail="4">大拌菜</div>
  36. </div>
  37. <div class="listItem active" data-food-index="2">
  38. <div class="active" data-food-detail="1">宫爆鸡丁</div>
  39. <div data-food-detail="2">鱼香肉丝</div>
  40. <div data-food-detail="3">锅包肉</div>
  41. <div data-food-detail="4">木须肉</div>
  42. </div>
  43. <div class="listItem" data-food-index="3">
  44. <div class="active" data-food-detail="1">蛋糕</div>
  45. <div data-food-detail="2">冰淇淋</div>
  46. <div data-food-detail="3">蛋挞</div>
  47. <div data-food-detail="4">饼干</div>
  48. </div>
  49. <div class="listItem" data-food-index="4">
  50. <div class="active" data-food-detail="1">橙汁</div>
  51. <div data-food-detail="2">啤酒</div>
  52. <div data-food-detail="3">二锅头</div>
  53. <div data-food-detail="4">雪碧</div>
  54. </div>
  55. <button id="delTabBtn" type="button">删除菜品类别</button>
  56. <button id="delTabItemBtn" type="button">删除菜品</button>
  57. </form>
  58. </body>
  59. </html>
  60. <script>
  61. //---------------------------------------------------
  62. //添加类别按钮
  63. var addTabBtn = $("form #addTabBtn");
  64. addTabBtn.click(function () {
  65. var tabInput = $("form #tabCard");
  66. //val()方法,获取form中input的值
  67. if (tabInput.val().trim() !== "") {
  68. //添加一个新选项卡,并设置为高亮
  69. var index;
  70. //parseInt(字符串)字符串转为数值
  71. //typeof()返回变量值的类型
  72. if (
  73. typeof $("form>.listTab>div:last-of-type").attr("data-food-index") ===
  74. "undefined"
  75. ) {
  76. index = 1;
  77. } else {
  78. index =
  79. parseInt(
  80. $("form>.listTab>div:last-of-type").attr("data-food-index")
  81. ) + 1;
  82. }
  83. $("form>.listTab").append("<div>" + tabInput.val().trim() + "</div>");
  84. var tabs = $("form>.listTab>div");
  85. delClass(tabs);
  86. var lastTab = $("form>.listTab>div:last-of-type");
  87. lastTab.attr("data-food-index", index);
  88. $(lastTab).addClass("active");
  89. //添加一个新的选项卡内容,并设置为高亮
  90. console.log();
  91. var lastItem = $("form>.listItem:last-of-type");
  92. //如果当前没有菜品列表,则插入到菜品类别后面
  93. if (lastItem.length === 0) {
  94. $("form>.listTab").after('<div class="listItem"></div>');
  95. } else {
  96. lastItem.after('<div class="listItem"></div>');
  97. var items = $("form>.listItem");
  98. delClass(items);
  99. }
  100. $("form>.listItem:last-of-type").attr("data-food-index", index);
  101. $("form>.listItem:last-of-type").addClass("active");
  102. }
  103. //val(值),可以设置input的值
  104. tabInput.val("");
  105. tabInput.focus();
  106. });
  107. //----------------------------------------------
  108. //为类别列表添加点击事件
  109. $("form .listTab").click(function (ev) {
  110. // map(回调)遍历元素
  111. if (ev.target !== ev.currentTarget) {
  112. var tabs = $("form>.listTab>div");
  113. delClass(tabs);
  114. $(ev.target).addClass("active");
  115. var items = $("form>.listItem");
  116. delClass(items);
  117. $(items).map(function (index, item) {
  118. if (
  119. $(item).attr("data-food-index") ===
  120. $(ev.target).attr("data-food-index")
  121. ) {
  122. $(item).addClass("active");
  123. }
  124. });
  125. }
  126. });
  127. //--------------------------------------------------
  128. //添加菜品按钮
  129. var addTabItemBtn = $("form #addTabItemBtn");
  130. addTabItemBtn.click(function () {
  131. var itemInput = $("form #item");
  132. //val()方法,获取form中input的值
  133. if (itemInput.val().trim() !== "") {
  134. var items = $("form>.listItem");
  135. items.map(function (index, item) {
  136. if ($(item).hasClass("active")) {
  137. var index = $(item).attr("data-food-index");
  138. var foodList = $("form>.listItem[data-food-index=" + index + "]>div");
  139. delClass(foodList);
  140. $(item).append(
  141. "<div class='active' data-food-detail=" +
  142. (foodList.length + 1) +
  143. ">" +
  144. itemInput.val().trim() +
  145. "</div>"
  146. );
  147. }
  148. });
  149. }
  150. //val(值),可以设置input的值
  151. itemInput.val("");
  152. itemInput.focus();
  153. });
  154. //----------------------------------------------
  155. //为菜品列表添加点击事件
  156. $("form>.listItem").click(function (ev) {
  157. if (ev.target !== ev.currentTarget) {
  158. var foodDetail = $("form>div[class='listItem active']>div");
  159. delClass(foodDetail);
  160. $(ev.target).addClass("active");
  161. }
  162. });
  163. //------------------------------
  164. //删除列表活动样式
  165. function delClass(delList) {
  166. //each(回调)遍历元素
  167. delList.each(function (index, delItem) {
  168. // hasClass(class属性)判断是否存在class属性
  169. if ($(delItem).hasClass("active")) {
  170. //removeClass()移除类样式
  171. $(delItem).removeClass("active");
  172. }
  173. });
  174. }
  175. //删除类别按钮
  176. var delTabBtn = $("form #delTabBtn");
  177. delTabBtn.click(function () {
  178. tabs = $("form>.listTab>div");
  179. tabs.remove(".active");
  180. if (tabs.length !== 0) {
  181. tabs.each(function (index, tab) {
  182. if ($(tab).hasClass("active")) {
  183. if (index === 0) {
  184. $(tabs[index + 1]).addClass("active");
  185. var foodIndex = $(tabs[index + 1]).attr("data-food-index");
  186. } else {
  187. $(tabs[index - 1]).addClass("active");
  188. var foodIndex = $(tabs[index - 1]).attr("data-food-index");
  189. }
  190. //empty(元素)删除元素的子元素
  191. $("form>.listItem.active").empty();
  192. $('form>div[class = "listItem active"]').remove();
  193. $("form>.listItem").each(function (index, item) {
  194. if ($(item).attr("data-food-index") === foodIndex) {
  195. $(item).addClass("active");
  196. }
  197. });
  198. return false;
  199. }
  200. });
  201. }
  202. });
  203. //删除菜品按钮
  204. var delTabItemBtn = $("form #delTabItemBtn");
  205. delTabItemBtn.click(function () {
  206. //选中正在显示的菜品列表下在菜品
  207. var foods = $('form>div[class="listItem active"]>div');
  208. //删除选中的菜品
  209. foods.remove(".active");
  210. if (foods.length - 1 !== 0) {
  211. foods.each(function (index, food) {
  212. //如果当前是第一个被选中,则它的下一个设置为高亮,否则它的上一个设置为高亮
  213. if ($(food).hasClass("active")) {
  214. if (index === 0) {
  215. $(foods[index + 1]).addClass("active");
  216. return false;
  217. } else {
  218. $(foods[index - 1]).addClass("active");
  219. return false;
  220. }
  221. }
  222. });
  223. }
  224. });
  225. </script>

样式表 index.css

  1. * {
  2. padding: 0px;
  3. margin: 0px;
  4. box-sizing: border-box;
  5. font-size: 12px;
  6. }
  7. /* form表单,动态生成选项卡 */
  8. form {
  9. margin: 10px 10px;
  10. padding: 10px 10px;
  11. width: 600px;
  12. height: 360px;
  13. border: 1px solid #313c46;
  14. display: grid;
  15. grid-template-columns: 280px 280px;
  16. grid-template-rows: 1fr 250px 1fr;
  17. grid-auto-flow: row;
  18. gap: 10px;
  19. justify-content: space-evenly;
  20. align-items: center;
  21. }
  22. form > div > input {
  23. height: 30px;
  24. width: 150px;
  25. font-size: 1.2rem;
  26. }
  27. form button {
  28. height: 30px;
  29. }
  30. /* 选项卡 */
  31. form > .listTab {
  32. border: 1px solid #ccc;
  33. padding: 10px;
  34. height: 250px;
  35. overflow: auto;
  36. background-color: white;
  37. }
  38. form > .listTab > div.active {
  39. background-color: lightseagreen;
  40. color: white;
  41. }
  42. /* 选项卡内容 */
  43. form > .listItem {
  44. border: 1px solid #ccc;
  45. padding: 10px;
  46. height: 250px;
  47. overflow: auto;
  48. display: none;
  49. }
  50. form > .listItem.active {
  51. display: block;
  52. }
  53. form > .listItem > div.active {
  54. background-color: lightseagreen;
  55. color: white;
  56. }
  57. /* 中间两个列表中内容的样式 */
  58. form > div > div {
  59. height: 30px;
  60. font-size: 1.3rem;
  61. }
  62. form > div > div:hover {
  63. cursor: pointer;
  64. background-color: lightgreen;
  65. }

代码效果图

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议