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

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

Wu.Ang
Wu.Ang原创
2022年08月28日 22:00:30592浏览

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