Blogger Information
Blog 19
fans 0
comment 0
visits 8261
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
dom 元素的增删改、操作内容、自定义属性操作对象、js操作css
Wu.Ang
Original
591 people have browsed it

js dom 元素的增删改、操作内容、自定义属性操作对象、js操作css

dom 元素的增删改

读 : 遍历 dom

写 : 增、删、改

创建元素 createElement()

const span = document.createElement('span');

追加元素 append()

  1. // 创建新元素
  2. const span = document.createElement("span");
  3. // 追加到页面
  4. document.body.append(span);
  5. // 给span追加内容
  6. span.append("hello");

遍历追加元素

  1. // 创建新元素
  2. const ul = document.createElement("ul");
  3. // 追加到页面
  4. document.body.append(ul);
  5. for (let i = 0; i < 5; i++) {
  6. let li = document.createElement("li");
  7. li.append("item" + (i + 1));
  8. ul.append(li);
  9. li.style = "list-style:none;";
  10. }

再某个节点前后加入内容

1.当前节点之前 before();

2.在当前节点之后 after();

  1. // 获取第三个li
  2. const li3 = ul.querySelector("li:nth-of-type(3)");
  3. // 在节点前添加内容
  4. const append_li = document.createElement("li");
  5. append_li.append("新内容");
  6. li3.before(append_li);
  7. // 在节点后追加内容
  8. const after_li = document.createElement("li");
  9. after_li.append("追加一个内容");
  10. li3.after(after_li);

克隆 cloneNode(true)

如果克隆内容()内必须加上 true

  1. const append_li = document.createElement("li");
  2. append_li.append("新内容");
  3. const new_li = append_li.cloneNode(true);

insertAdjacentElement(‘插入位置’,元素)

  1. // insertAdjacentElement('插入位置', 元素)
  2. // 插入位置有四个
  3. // afterBegin: 开始标签之后,第一个子元素
  4. // beforeBegin: 开始标签之前,是它的前一个兄弟元素
  5. // afterEnd: 结束标签之后,它的下一个兄弟元素
  6. // beforeEnd: 结束标签之前,它的最后一个子元素
  7. const h2 = document.createElement("h2");
  8. h2.append("列表");
  9. const h3 = h2.cloneNode(true);
  10. // 列表前插入标题
  11. ul.insertAdjacentElement("beforebegin", h2);
  12. // 列表内容开始插入标签
  13. ul.insertAdjacentHTML("afterbegin", "<li>第一个标签</li>");
  14. // 列表内容结束插入标签
  15. ul.insertAdjacentHTML("beforeend", "<li>最后一个标签</li>");
  16. // 列表后插入标题
  17. ul.insertAdjacentElement("afterend", h3);

元素替换 replaceChild(新节点,被替换的旧节点)

  1. 需要找到插入点
  2. 在父元素调用
  1. // 被替换的旧节点
  2. const targetNode = ul.querySelector("li:last-of-type");
  3. // 新节点
  4. const link = document.createElement("a");
  5. link.href = "http://www.baidu.com";
  6. link.append("百度一下");
  7. // 节点替换
  8. ul.replaceChild(link, targetNode);

移除元素 remove()

  1. ul.lastElementChild.remove();
  2. ul.firstElementChild.remove();
  3. ul.querySelector("li:nth-of-type(2)").remove();

js 操作内容 (textContent、innerText、innerHTML、outerHTML)

首选 : textContent、innerHTML

  1. textContent : 返回所有内容,包括 style
  1. // textContent : 返回所有内容,包括style
  2. console.log(box.textContent);
  3. /*
  4. h2 {
  5. color: red;
  6. }
  7. 信息
  8. 隐藏信息
  9. xxxxxxxxxxxxxx
  10. */
  1. innerText : 只输出正常文本
  1. // innerText : 只输出正常文本
  2. console.log(box.innerText);
  3. /*
  4. 信息
  5. xxxxxxxxxxxxxx
  6. */
  1. innerHTML : 带有标签的 html 内容
  1. // innerHTML : 带有标签的html内容
  2. console.log(box.innerHTML);
  3. /*
  4. <style>
  5. h2 {
  6. color: red;
  7. }
  8. </style>
  9. <h2>信息</h2>
  10. <span style="display: none">隐藏信息</span>
  11. <p>xxxxxxxxxxxxxx</p>
  12. */

innerHTML 和 innerText 区别 : innerHTML 可以解析 html 标签

  1. const p = document.createElement("p");
  2. const link = '<a href="http://www.php.cn">php中文网</a>';
  3. p.innerText = link; //追加后a标签不能正常显示
  4. p.innerHTML = link; //a标签可以正常显示
  5. box.append(p);
  1. outerHTML : 当前 html 元素的表示
  1. // outerHTML : 当前html元素的表示
  2. console.log(box.outerHTML);
  3. /*
  4. <div class="box">
  5. <style>
  6. h2 {
  7. color: red;
  8. }
  9. </style>
  10. <h2>信息</h2>
  11. <span style="display: none">隐藏信息</span>
  12. <p>xxxxxxxxxxxxxx</p>
  13. <p><a href="http://www.php.cn">php中文网</a></p>
  14. </div>
  15. */
  16. ele.outerHTML = null; //删除元素
  17. ele.outerHTML = "<a>xxx</a>"; //替换内容

自定义属性操作对象 dataset

  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.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div class="btn-group">
  11. <button data-index="1" onclick="alert(this.dataset.index)">btn1</button>
  12. <button data-index="2" onclick="alert(this.dataset.index)">btn2</button>
  13. <button data-index="3" onclick="alert(this.dataset.index)">btn3</button>
  14. <!-- 自定义属性 : data-xxx -->
  15. <!-- 获取时 : dataset.xxx -->
  16. <div data-my-email="0000000000@qq.com">我的邮箱</div>
  17. </div>
  18. <script>
  19. const email = document.querySelector('body div div');
  20. // data-my-email -> dataset.myEmail
  21. // 需要把my-email替换成myEmail
  22. console.log(email.dataset.myEmail);
  23. </script>
  24. </body>
  25. </html>

js操作css : getComputedStyle()

  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.0">
  7. <title>Document</title>
  8. <style>
  9. .box{
  10. width: 100px;
  11. height: 100px;
  12. border: 1px solid;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div class="box" style="color: red;">hello</div>
  18. <script>
  19. // 获取元素行内样式 : style属性
  20. const box = document.querySelector('.box');
  21. console.log(box.style.color);
  22. // 获取元素内部样式
  23. const wgs = window.getComputedStyle(box);
  24. console.log(wgs.width);
  25. console.log(wgs.height);
  26. // 宽度转换
  27. let width = window.getComputedStyle(box).width;
  28. // 数据类型转换
  29. width = parseInt(width);
  30. console.log(width);
  31. console.log(typeof(width));
  32. // 要通过行内样式进行替换
  33. box.style.width = (width +100) + 'px';
  34. </script>
  35. </body>
  36. </html>

实例演示

  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.0" />
  7. <title>留言板</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. li {
  15. list-style: none;
  16. /* 允许内容换行 */
  17. word-wrap: break-word;
  18. }
  19. .title_div,
  20. .message_div,
  21. .btn_div {
  22. width: 350px;
  23. margin-left: 20px;
  24. }
  25. .btn_div button {
  26. width: 200px;
  27. height: 30px;
  28. margin: auto;
  29. }
  30. .tishi {
  31. color: red;
  32. font-size: 10px;
  33. display: none;
  34. }
  35. input {
  36. width: 200px;
  37. height: 30px;
  38. border-radius: 10px;
  39. padding-left: 10px;
  40. }
  41. ul.list {
  42. width: 300px;
  43. margin-top: 20px;
  44. }
  45. /* ------------------------------------------- */
  46. .box {
  47. width: 300px;
  48. border: 1px solid;
  49. border-radius: 10px;
  50. margin: 3px;
  51. padding: 5px;
  52. position: relative;
  53. }
  54. .box:hover {
  55. background-color: lightgoldenrodyellow;
  56. }
  57. .title_h3 {
  58. text-align: center;
  59. }
  60. .button_xg {
  61. position: absolute;
  62. top: 10px;
  63. right: 45px;
  64. }
  65. .button_sc {
  66. position: absolute;
  67. top: 10px;
  68. right: 10px;
  69. }
  70. </style>
  71. </head>
  72. <body>
  73. <div class="title_div">
  74. <label for="message" style="font-size: 20px">标题:</label>
  75. <input type="text" id="title" class="title" autofocus />
  76. <span class="tishi">标题不能为空</span>
  77. </div>
  78. <div class="message_div">
  79. <label for="message" style="font-size: 20px">留言:</label>
  80. <input type="text" id="message" class="message" autofocus />
  81. </div>
  82. <div class="btn_div">
  83. <button onclick="Btn()">提交</button>
  84. </div>
  85. <ul class="list"></ul>
  86. <script>
  87. function Btn() {
  88. // 获取内容
  89. const title = document.querySelector(".title");
  90. const message = document.querySelector(".message");
  91. const span = document.querySelector(".tishi");
  92. const ul = document.querySelector(".list");
  93. // -----------------------------------------------------------------
  94. // 判断标题是否为空
  95. if (title.value == 0) {
  96. span.style.display = "inline";
  97. return false;
  98. } else {
  99. span.style.display = "none";
  100. }
  101. // -----------------------------------------------------------------
  102. // 新建div,h3,li,button
  103. const div = document.createElement("div");
  104. const h3 = document.createElement("h3");
  105. const li = document.createElement("li");
  106. const button_sc = document.createElement("button");
  107. const button_xg = button_sc.cloneNode(true);
  108. // 添加属性
  109. div.classList.add("box");
  110. h3.classList.add("title_h3");
  111. button_xg.classList.add("button_xg");
  112. button_sc.classList.add("button_sc");
  113. // li.classList.add("message_li");
  114. // 追加内容
  115. h3.append(title.value);
  116. li.append(message.value);
  117. button_xg.append("修改");
  118. button_sc.append("删除");
  119. div.append(h3);
  120. div.append(li);
  121. div.append(button_xg);
  122. div.append(button_sc);
  123. // ul中追加div
  124. ul.insertAdjacentElement("afterbegin", div);
  125. // 修改
  126. button_xg.onclick = function () {
  127. // prompt() 弹出input框
  128. const new_message = prompt(li.innerText);
  129. li.innerHTML = new_message;
  130. };
  131. // 点击删除
  132. button_sc.onclick = function () {
  133. confirm("是否删除") ? div.remove() : false;
  134. };
  135. // -----------------------------------------------------------------
  136. // 输入框清空
  137. title.value = null;
  138. message.value = null;
  139. }
  140. </script>
  141. </body>
  142. </html>
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