Blogger Information
Blog 48
fans 3
comment 1
visits 30459
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Dom常用增删改操作及留言板案例
吴长清
Original
452 people have browsed it

dom常用增删改操作及留言板案例

1.常用增删改操作的 API

API 描述
createElement(ele) 创建新元素, document上调用
append(string/ele) 追加到父级最后子节点后,在父节点上调用
before(string/ele) 在当前元素之前插入节点, 在当前元素上调用
after(string/ele) 在当前元素之后插入节点, 在当前元素上调用
cloneNode(true) 克隆节点(true:当前节点所有子节点),在要被克隆的节点上调用
replaceChild(ele,pos) 替换子元素,在父级节点上调用
remove(ele) 移除子元素, 在当前节点上调用

代码块:

  1. <!-- 1. 实例演示dom增删改的常用方法 -->
  2. <script>
  3. // 1. 创建元素 在document上调用
  4. // 创建一个ul 创建号的ul在内存中 没有渲染到html页面中
  5. const ul = document.createElement("ul");
  6. // 2.追加元素 在追加的元素的父节点上调用
  7. // 此时追加ul元素 就应该在它的父级元素上调用
  8. document.body.append(ul);
  9. // 在ul下面追加子元素li;
  10. for (let index = 0; index < 5; index++) {
  11. const li = document.createElement("li");
  12. // append() 可以追加元素外还可以追加文本内容
  13. li.append("item-" + (index + 1));
  14. ul.append(li);
  15. }
  16. // 3.在当前元素之前插入元素
  17. // 3.1 创建要插入的元素
  18. let li = document.createElement("li");
  19. // 3.2 追加文本内容
  20. li.append("新元素");
  21. // 3.3 设置css样式
  22. li.style.color = "red";
  23. // 3.4 插入:当前节点.before(新节点)
  24. const item3 = ul.querySelector("li:nth-of-type(3)");
  25. item3.before(li);
  26. // 4.克隆 参数为true时 表示克隆当前元素下的所有子元素 含文本内容
  27. li = li.cloneNode(true);
  28. // 5.在当前元素之后插入元素
  29. item3.after(li);
  30. // 6.替换子元素 在父节点上调用 当前元素.replaceChild(新元素,旧元素)
  31. // 6.1 创建新元素 新值
  32. const newNode = document.createElement("li");
  33. newNode.append("我是替换最后一个li的新元素");
  34. newNode.style.backgroundColor = "cyan";
  35. // 6.2 找到需要被替换的值 最后一个li
  36. const targetNode = document.querySelector("li:last-of-type");
  37. // 6.3 替换
  38. ul.replaceChild(newNode, targetNode);
  39. // 7.移除/删除 在当前节点调用 谁调删谁
  40. ul.firstElementChild.remove();
  41. </script>

效果:

insertAdjacentElement('插入位置', 元素)

插入位置 描述
beforeBegin 开始标签之前,是它的前一个兄弟元素
afterBegin 开始标签之后,第一个子元素
beforeEnd 结束标签之前,它的最后一个子元素
afterEnd 结束标签之后,它的下一个兄弟元素

代码块:

  1. <body>
  2. <ul>
  3. <li>商品1</li>
  4. <li>商品2</li>
  5. <li>商品3</li>
  6. <li>商品4</li>
  7. </ul>
  8. <style>
  9. ul {
  10. border: 1px solid red;
  11. }
  12. </style>
  13. </body>
  1. <script>
  2. // insertAdjacentElement(参数1,参数2)
  3. // 参数1:插入位置 有四个
  4. // 参数2:需要插入的元素 支持标签语义化 能识别html标签
  5. // 获取当前ul元素
  6. const ul = document.querySelector("ul");
  7. // 在当前列表的前面插入一个标题
  8. const h3 = document.createElement("h3");
  9. h3.append("商品列表");
  10. // 在ul开始标签之前插入 插入之后是其兄弟元素 同级
  11. ul.insertAdjacentElement("beforebegin", h3);
  12. // 在ul开始标签之后插入 插入之后是其第一个子元素 子集
  13. ul.insertAdjacentHTML("afterbegin", '<li style="color:red">第一个元素</li>');
  14. // 在ul结束标签之前插入 插入之后是其最后一个子元素 子集
  15. ul.insertAdjacentHTML("beforeend", '<li style="color:blue">最后一个元素</li>');
  16. // 在ul结束标签之后插入 插入之后是其兄弟元素 同级
  17. ul.insertAdjacentHTML("afterend", "<h4>共计: 6个</h4>");
  18. </script>

效果:

2.js操作元素内容

属性 描述
textContent 返回所有文本内容,不包含html标签
innerText 返回正常文本,隐藏的文本不输出
innerHTML 返回所有内容,包含html标签,在输出时html会被正常渲染到文档中
outerHTML 返回字符串,将所有内容包含html标签转为字符串,用于存储一些动态html样式到服务器中

3.自定义属性对象dataset

1.声明方式:以data-为前缀,后面跟上具体的变量名称,如data-name
2.使用方式:ele.dataset.name ele是设置自定义属性的节点元素
3.特例:在声明时除了前缀的标识符-以外,有第二个标识符-,那么使用时可通过驼峰式命名获取自定义属性的值,例如:声明:data-app-name 使用:data-appName

4.案例-留言板

css代码

  1. * {
  2. padding: 0;
  3. margin: 0;
  4. outline: none;
  5. }
  6. li {
  7. list-style: none;
  8. padding: 0 10px;
  9. }
  10. body header {
  11. background-color: antiquewhite;
  12. width: 100%;
  13. height: 50px;
  14. }
  15. body header h3 {
  16. text-align: center;
  17. line-height: 50px;
  18. }
  19. body main {
  20. background-color: lavenderblush;
  21. width: 100%;
  22. height: 500px;
  23. display: grid;
  24. place-items: start center;
  25. }
  26. body main input {
  27. width: 80%;
  28. height: 30px;
  29. margin-top: 10px;
  30. }
  31. body main ul {
  32. width: 80%;
  33. height: 440px;
  34. background-color: white;
  35. box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.404);
  36. }
  37. body main ul li {
  38. display: grid;
  39. grid-template-columns: 10% 80% 10%;
  40. margin-top: 5px;
  41. gap: 0 5px;
  42. }
  43. body main ul li p {
  44. font-size: 14px;
  45. color: #353434;
  46. place-self: center start;
  47. }
  48. body main ul li button {
  49. cursor: pointer;
  50. border: none;
  51. background-color: lightpink;
  52. }
  53. body main ul li button:hover {
  54. background-color: red;
  55. color: white;
  56. }
  57. body main ul li img {
  58. width: 30px;
  59. height: 30px;
  60. border-radius: 30px;
  61. border: 1px solid lightcoral;
  62. place-self: center end;
  63. }

html代码

  1. <header>
  2. <h3>留言板</h3>
  3. </header>
  4. <main>
  5. <!-- onkeydown 键盘事件 -->
  6. <input type="text" onkeydown="addMsg(this)" placeholder="请输入留言" autofocus />
  7. <ul class="list"></ul>
  8. </main>

js代码

  1. function addMsg(ele) {
  2. // 事件方法中有一个对象,表示当前事件: event
  3. // 判断用户是否提交了留言,通过是否按下了回车键
  4. if (event.key === "Enter") {
  5. // 留言非空验证
  6. if (ele.value.length === 0) {
  7. alert("留言不能为空");
  8. // 重置焦点到输入框中
  9. ele.focus();
  10. return false;
  11. }
  12. // 2. 添加留言
  13. ul = document.querySelector(".list");
  14. // 为每条留言添加删除功能
  15. // 创建img元素 且路径随机生成
  16. const img = `<img style='' src='images/${Math.round(Math.random() * 4)}.png'/>`;
  17. // 创建button 并添加单击事件来实现删除功能 传入参数是当前节点的父节点 删除的是整个li
  18. const btn = "<button onclick='del(this.parentNode)'>删除</button>";
  19. // 字符串拼接
  20. ele.value = img + `<p>${ele.value}</p>` + btn;
  21. // insertAdjacentHTML 能识别字符串中的html标签
  22. ul.insertAdjacentHTML("afterbegin", `<li>${ele.value}</li>`);
  23. // 3. 清空输入框
  24. ele.value = null;
  25. }
  26. }
  27. // 删除功能
  28. del = (ele) => (confirm("是否删除?") ? ele.remove() : false);

效果预览

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post