博客列表 >JS基本语法7:DOM元素的增删改 \指定位置的插入\ 仿写留言板案例\dataset对象

JS基本语法7:DOM元素的增删改 \指定位置的插入\ 仿写留言板案例\dataset对象

茂林
茂林原创
2024年01月07日 16:32:571101浏览

1. DOM元素的增删改 2. DOM元素内容的增删改查 3.指定位置的插入 4. 仿写留言板案例 5. dataset对象

1. DOM元素的增删改
  1. 1.createElement:新增元素
  2. 2.append:尾部追加元素
  3. 3.createDocumentFragment:增加片断
  4. 4.after:后面插入元素
  5. 5.before:前同插入元素
  6. 6.cloneNode(true):克隆元素(深度克隆)
  7. 7.replaceChild(new,old):替换子元素
  8. 8.remove:删除元素,自杀, removeChild:被(父元素)删除
  1. <script>
  2. /**
  3. * 1.createElement:新增元素
  4. * 2.append:尾部追加元素
  5. * 3.createDocumentFragment:增加片断
  6. * 4.after:后面插入元素
  7. * 5.before:前同插入元素
  8. * 6.cloneNode(true):克隆元素(深度克隆)
  9. * 7.replaceChild(new,old):替换子元素
  10. * 8.remove:删除元素,自杀, removeChild:被(父元素)删除
  11. */
  12. //1.createElement()
  13. //参数:预定义的html标签字符串
  14. //新增元素,第1步创建新元素,保存在变量中
  15. const ul = document.createElement("ul")
  16. //2.append():追加到页面中
  17. //参数:添加的对象或内容
  18. // document.querySelector("body").append(ul)
  19. document.body.append(ul)
  20. //添加多个元素
  21. //let li = document.createElement("li")
  22. //为新的元素添加文本内容
  23. // li.append("item")
  24. //ul.append(li)
  25. /* for (let i = 1; i <= 5; i++) {
  26. let li = document.createElement("li")
  27. li.append("item" + i)
  28. ul.append(li)
  29. } */
  30. //3.createDocumentFragment()
  31. //无参数
  32. //在页面中避免因新加元素频繁,影响页面加载的效率,先将新加的元素存入一个片断中
  33. //最后一次性添加到页面中
  34. let frag = document.createDocumentFragment()
  35. for (let i = 1; i <= 5; i++) {
  36. let li = document.createElement("li")
  37. li.append("item" + i)
  38. frag.append(li)
  39. }
  40. ul.append(frag)
  41. //4.after():后面插入元素
  42. //在插入的位置上调用after()方法
  43. //参数:插入的元素及内容
  44. //先找到插入元素的位置
  45. let three = ul.querySelector(":nth-child(3)")
  46. console.log(three)
  47. //创建要插入的元素
  48. let li = document.createElement("li")
  49. li.append("new-item-after")
  50. //插入
  51. three.after(li)
  52. //5.before():前面插入元素
  53. //在插入的位置上调用before()方法
  54. //参数:插入的元素及内容
  55. //先找到插入元素的位置
  56. three = ul.querySelector(":nth-child(3)")
  57. li = document.createElement("li")
  58. li.append("new-item-before")
  59. three.before(li)
  60. //6.cloneNode(true):克隆/复制元素
  61. //先找到需要克隆的元素
  62. //然后再追加或插入到指定的位置中
  63. let last = ul.lastElementChild
  64. let copy = last.cloneNode(true)
  65. //参数:true,代表深度克隆,会把子元素及其内容一起复制
  66. //不加参数true,只复制元素,不复制元素中的内容
  67. ul.append(copy)
  68. three.before(copy)
  69. //7.replace(new,old):替换子元素
  70. //父元素调此方法替换子元素
  71. //参数:new元素,old元素
  72. let four = ul.querySelector(":nth-child(4)")
  73. console.log(four)
  74. li = document.createElement("li")
  75. li.append("replace-li")
  76. ul.replaceChild(li, four)
  77. //8.removeChild:父元素删除子元素 remove:自己把自己删除,自杀
  78. ul.removeChild(ul.querySelector(":nth-child(2)"))
  79. ul.querySelector(":first-child").remove()
  80. </script>

1. DOM元素的增删改

2 DOM元素的内容增删改

1.textContent:查看元素内容,是全部内容,包括js,css,隐藏内容
2.innerText:查看已渲染的(可见)内容
3.innerHTML:查看/替换/删除子元素内容(html),原样显示出来了
4.outerHTML:查看/替换/删除元素‘自身’(html)及所有的子元素

  1. <body>
  2. <h3>HELLO WORLD</h3>
  3. <div class="box">
  4. <style>
  5. h2 {
  6. color: red;
  7. }
  8. </style>
  9. <h2>通知</h2>
  10. <span style="display: none">试用期员工不参加</span>
  11. <p>今天下午17:00开会, 开发部, 运营部全体参加~~</p>
  12. </div>
  13. </body>
  14. <script>
  15. /**
  16. * 1.textContent:查看元素内容,是全部内容,包括js,css,隐藏内容
  17. * 2.innerText:查看已渲染的(可见)内容
  18. * 3.innerHTML:查看/替换元素内容(html),原样显示出来了
  19. * 4.outerHTML:替换元素‘自身’(html)
  20. */
  21. console.log(document.querySelector("h3").textContent)
  22. console.log(document.querySelector(".box").textContent)
  23. console.log(document.querySelector(".box").innerText)
  24. console.log(document.querySelector(".box").innerHTML)
  25. document.querySelector(".box").innerHTML = "<h2>查看/替换元素内容</h2>"
  26. //.outerHTML = null === .remove()
  27. // document.querySelector(".box").outerHTML = null
  28. document.querySelector(".box").remove()
  29. </script>

3 指定位置插入元素

  1. (1) 插入位置
  2. 1. `beforebegin`:元素自身的前面(起始标签)
  3. 2. `afterbegin`:插入元素内部的第一个子节点之前
  4. 3. `beforeend`:插入元素内部的最后一个子节点之后
  5. 4. `afterend`:元素自身的后面(结束标签)
  6. (2) API 方法
  7. 1. `insertAdjacentElement()`:指定位置插入元素
  8. 2. `insertAdjacentText()`: 指定位置插入文本节点
  9. 3. `insertAdjacentHTML()`: 指定位置插入元素节点(DOMString)
  1. <body>
  2. <ul class="list">
  3. <li>item1</li>
  4. <li>item2</li>
  5. <li>item3</li>
  6. <li>item4</li>
  7. <li>item5</li>
  8. </ul>
  9. <script>
  10. //1.insertAdjacentElement():指定位置插入元素
  11. //有两个参数:1 插入元素的位置 2 插入的元素标签
  12. //插入元素的位置
  13. const ul = document.querySelector(".list")
  14. //插入元素的内容
  15. const h3 = document.createElement("h3")
  16. h3.append("商品列表")
  17. //在ul起始标签的前面插入h3
  18. // ul.insertAdjacentElement("beforebegin", h3)
  19. //在元素内容的第一个子节点之前 插入h3
  20. // ul.insertAdjacentElement("afterbegin", h3)
  21. //在元素内容的最后一个子节点之后插入h3
  22. // ul.insertAdjacentElement("beforeend", h3)
  23. //在元素ul结束标签的后面插入h3
  24. //ul.insertAdjacentElement("afterend", h3)
  25. //2.insertAdjacentText()
  26. //有两个参数:1 插入元素的位置 2 插入的文本内容
  27. //在ul起始标签的前面插入文本
  28. // ul.insertAdjacentText("beforebegin", "(特价商品)")
  29. //在ul元素内容的第一个子节点之前 插入文本内容
  30. //ul.insertAdjacentText("afterbegin", "(特价商品)")
  31. //在ul元素内容的最后一个子节点后面 插入文本内容
  32. //ul.insertAdjacentText("beforeend", "(特价商品)")
  33. //在ul结束标签的后面插入文本
  34. //ul.insertAdjacentText("afterend", "(特价商品)")
  35. // 3.insertAdjacentHTML():指定位置插入元素节点(DOMString)
  36. //在指定的位置插入html元素
  37. //可以将html字符串,直接解析成html元素
  38. let p = `<p style="color:red">商品数量:5件</p>`
  39. ul.insertAdjacentHTML("beforebegin", p)
  40. ul.insertAdjacentHTML("afterbegin", p)
  41. /**指定位置插入
  42. * (1)指定位置
  43. * 1.beforebegin:元素自身起始标签的前面
  44. * 2.afterbegin:插入元素内部的第一个子节点之前
  45. * 3.beforeend:插入元素内部的最后一个子节点之后
  46. * 4.afterend:元素自身结束标签的后面
  47. * (2)插入API方法
  48. * 1.insertAdjacentElement():指定位置插入元素
  49. * 2.insertAdjacentText():指定位置插入文本节点
  50. * 3.insertAdjacentHTML():指定位置插入元素节点(DOMString)
  51. */
  52. </script>
  53. </body>

4.读取自定义属性的方法

  1. 预定义属性: id,class,style, title...
  2. 自定义属性: data-前缀
  3. 注: data-不要写,蛇形->驼峰
  1. <body>
  2. <!--
  3. 1.预定义属性:id,style,class,name...
  4. 2.自定义属性:data- 前缀的属性
  5. 有两个方法获取
  6. 1.通过dataset
  7. 2.通过getAttribute()
  8. -->
  9. <h3 style="color: red">Hello world</h3>
  10. <div data-email="abc@qq.com" data-my-name="朱老师">我的邮件地址</div>
  11. <script>
  12. const h3 = document.querySelector("h3")
  13. console.log(h3.style.color)
  14. const div = document.querySelector("div")
  15. //无法使用以下方法获取自定义属性
  16. // console.log(div.data - email)
  17. //1.通过dataset对象方法获取
  18. //省去前缀data- ,dataset.email
  19. //my-name:转为小驼峰,myName dataset.myName
  20. console.log(div.dataset.email)
  21. console.log(div.dataset.myName)
  22. //2.使用getAttribute('data-email') getAttribute('data-my-name')
  23. console.log(div.getAttribute("data-email"))
  24. console.log(div.getAttribute("data-my-name"))
  25. </script>
  26. </body>

5.getComptedStyle()

  • 计算样式: 元素上的全样样式,包括行内,文档,外部等
  • 只读

    1. <head>
    2. <meta charset="UTF-8" />
    3. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    4. <title>getComputedStyle</title>
    5. <link rel="stylesheet" href="style.css" />
    6. <style>
    7. h3 {
    8. width: 200px;
    9. height: 50px;
    10. }
    11. </style>
    12. </head>
    13. <body>
    14. <h3 style="color: red">Hello World</h3>
    15. <script>
    16. const h3 = document.querySelector("h3")
    17. console.log(h3.style.color)
    18. //querySelector 无法获取对除行内样式以外的样式信息
    19. console.log(h3.style.width)
    20. console.log(window.getComputedStyle(h3).backgroundColor) //rgb(255, 255, 0)
    21. console.log(window.getComputedStyle(h3).width) //200px
    22. let width = window.getComputedStyle(h3).width
    23. //返回的是字符串
    24. //通过 parseInt()转成数值型
    25. width = parseInt(width) + 100 + "px"
    26. console.log(width)
    27. //通过行内样式改变width的值
    28. h3.style.width = parseInt(width) + 100 + "px"
    29. /**
    30. * getComputedStyle对象
    31. * 计算样式:元素上的全部样式,包括行内,文档,外部样式
    32. * 返回值:只读,
    33. * 想修改样式在行内样式里修改
    34. */
    35. </script>
    36. </body>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
徐涛2023-08-18 13:42:361楼
啊撒大声地
  • 啊萨弗拉斯寄快递发啦
    徐涛2023-08-18 13:52:48