• 【web】JavaScript——Web APIs笔记小结 dom 样式属性(自定义属性+节点操作部分)


      期中考完回来更新了 

      感觉进度真的好慢T^T,已经摸了快一个月的鱼了qwq!!!

    来源:JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化echarts

    目录

    ⑦H5自定义属性

    V.节点操作

    ①节点层级

    ※※父级节点

    ※※子节点

    ※※※※获取所有子节点 

    ※※※※获取第一个孩子和最后一个孩子

    ❀ firstChild / lastChild

     ❀ firstElementChild / lastElementChild​编辑

     ❀ children 伪数组 → 实际开发写法

     ※※※※ 下拉菜单

     ※※ 兄弟节点

    ②创建、添加节点

     ※※ 简单版发布留言案例

    ※※※※ 我写的

    ※※※※ 值得一提的小细节

    ※※※※ pink 的

    ———————————————以下是第三天—————————————————

    ③删除节点

     ※※ 删除留言案例

     ※※※※我写的

    ※※※※ pink 的

    ※※※※ MCD 里的完整介绍

    ✿ 一些用法样例

    ④复制节点

    ⑤动态生成表格

    ※※ 我写的

    ※※※※ 直接套用删除节点案例的模板

     ※※※※ 综合之前的创建添加和删除写(正确版)

    ✿ MCD 里的 for…in 解释

    ※※ pink 的


    ⑦H5自定义属性

     

    V.节点操作

     

    ①节点层级

    利用DOM树可以把节点划分为不同的层级关系,常见的是 父子兄层级关系

    ※※父级节点

    ※※子节点

    ※※※※获取所有子节点 

     

     

    ※※※※获取第一个孩子和最后一个孩子

    firstChild / lastChild

    所以下面这段代码的结果都是输出文本节点  #text 

    1. //在body里的部分
    2. <ol>
    3. <li>我是li1li>
    4. <li>我是li2li>
    5. <li>我是li3li>
    6. <li>我是li4li>
    7. <li>我是li5li>
    8. ol>
    9. <script>
    10. var ol = document.querySelector('ol');
    11. console.log(ol.firstChild);//第一个
    12. console.log(ol.lastChild);//最后一个
    13. script>

     ❀ firstElementChild / lastElementChild

    所以下面这段代码的结果都是输出元素节点  

  •   

    1. <ol>
    2. <li>我是li1li>
    3. <li>我是li2li>
    4. <li>我是li3li>
    5. <li>我是li4li>
    6. <li>我是li5li>
    7. ol>
    8. <script>
    9. var ol = document.querySelector('ol');
    10. console.log(ol.firstElementChild);
    11. console.log(ol.lastElementChild);
    12. script>

     

     ❀ children 伪数组 → 实际开发写法

    直接上代码:

    1. <ol>
    2. <li>我是li1li>
    3. <li>我是li2li>
    4. <li>我是li3li>
    5. <li>我是li4li>
    6. <li>我是li5li>
    7. ol>
    8. <script>
    9. var ol = document.querySelector('ol');
    10. console.log(ol.children); //所有
    11. console.log(ol.children[0]); //第一个
    12. console.log(ol.children[ol.children.length - 1]); //最后一个
    13. script>

     ※※※※ 下拉菜单

    这个案例比较简单,所以没有自己写owo,思路是循环绑定事件

    1. 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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. li {
    14. list-style-type: none;
    15. }
    16. a {
    17. text-decoration: none;
    18. font-size: 14px;
    19. }
    20. .nav {
    21. margin: 100px;
    22. }
    23. .nav>li {
    24. position: relative;
    25. float: left;
    26. width: 80px;
    27. height: 41px;
    28. text-align: center;
    29. }
    30. .nav li a {
    31. display: block;
    32. width: 100%;
    33. height: 100%;
    34. line-height: 41px;
    35. color: #333;
    36. }
    37. .nav>li>a:hover {
    38. background-color: #eee;
    39. }
    40. .nav ul {
    41. display: none;
    42. position: absolute;
    43. top: 41px;
    44. left: 0;
    45. width: 100%;
    46. border-left: 1px solid #FECC5B;
    47. border-right: 1px solid #FECC5B;
    48. }
    49. .nav ul li {
    50. border-bottom: 1px solid #FECC5B;
    51. }
    52. .nav ul li a:hover {
    53. background-color: #FFF5DA;
    54. }
    55. style>
    56. head>
    57. <body>
    58. <ul class="nav">
    59. <li>
    60. <a href="#">微博a>
    61. <ul>
    62. <li>
    63. <a href="">私信a>
    64. li>
    65. <li>
    66. <a href="">评论a>
    67. li>
    68. <li>
    69. <a href="">@我a>
    70. li>
    71. ul>
    72. li>
    73. <li>
    74. <a href="#">微博a>
    75. <ul>
    76. <li>
    77. <a href="">私信a>
    78. li>
    79. <li>
    80. <a href="">评论a>
    81. li>
    82. <li>
    83. <a href="">@我a>
    84. li>
    85. ul>
    86. li>
    87. <li>
    88. <a href="#">微博a>
    89. <ul>
    90. <li>
    91. <a href="">私信a>
    92. li>
    93. <li>
    94. <a href="">评论a>
    95. li>
    96. <li>
    97. <a href="">@我a>
    98. li>
    99. ul>
    100. li>
    101. <li>
    102. <a href="#">微博a>
    103. <ul>
    104. <li>
    105. <a href="">私信a>
    106. li>
    107. <li>
    108. <a href="">评论a>
    109. li>
    110. <li>
    111. <a href="">@我a>
    112. li>
    113. ul>
    114. li>
    115. ul>
    116. <script>
    117. // 获取元素
    118. var nav = document.querySelector('.nav');
    119. var lis = nav.children; //获取4个li
    120. //循环注册事件
    121. for (var i = 0; i < lis.length; i++) {
    122. lis[i].onmouseover = function() {
    123. this.children[1].style.display = 'block';
    124. }
    125. lis[i].onmouseout = function() {
    126. this.children[1].style.display = 'none';
    127. }
    128. }
    129. script>
    130. body>
    131. html>

     ※※ 兄弟节点

    感觉跟 nextchild 挺像的 

    代码部分:

    1. //body里的部分
    2. <div>我是divdiv>
    3. <span>我是spanspan>
    4. <script>
    5. var div = document.querySelector('div');
    6. //下一个兄弟节点 包含元素节点、文本节点等等
    7. console.log(div.nextSibling);
    8. //上一个兄弟节点
    9. console.log(div.previousSibling);
    10. //下一个兄弟元素节点
    11. console.log(div.nextElementSibling);
    12. //上一个兄弟元素节点
    13. console.log(div.previousElementSibling);
    14. script>

    ②创建、添加节点

    代码截图:

     ※※ 简单版发布留言案例

    ※※※※ 我写的

    vertical-align忘了的戳这里 → vertical-align(之前写过的博客kkk)

    1. 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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. div {
    14. position: relative;
    15. margin-top: 50px;
    16. left: 50%;
    17. margin-left: -150px;
    18. width: 300px;
    19. height: auto;
    20. }
    21. textarea {
    22. width: 200px;
    23. height: 100px;
    24. border: 1px solid dodgerblue;
    25. outline: none;
    26. resize: none;
    27. vertical-align: bottom;
    28. }
    29. ul {
    30. margin-top: 50px;
    31. }
    32. li {
    33. width: 300px;
    34. padding: 5px;
    35. background-color: lightskyblue;
    36. font-size: 14px;
    37. margin: 15px 0;
    38. }
    39. style>
    40. head>
    41. <body>
    42. <div>
    43. <textarea>textarea>
    44. <button>发布button>
    45. <ul>ul>
    46. div>
    47. <script>
    48. var btn = document.querySelector('button');
    49. var text = document.querySelector('textarea');
    50. var ul = document.querySelector('ul');
    51. btn.onclick = function() {
    52. if (text.value == '') {
    53. alert('没有输入内容!');
    54. return false;
    55. } else {
    56. var li = document.createElement('li');
    57. li.innerHTML = text.value;
    58. //插到后面
    59. ul.appendChild(li);
    60. //插到前面
    61. ul.insertBefore(li, ul.children[0]);
    62. }
    63. }
    64. script>
    65. body>
    66. html>

    ※※※※ 值得一提的小细节

    上面的代码跑出来只有一个节点,并且是按insertBefore来的,我原来以为应该有两个节点的,后来查了查资料发现想错了,而且这一块pink讲的时候也没有提到,具体看下图:

    ※※※※ pink 

    1. 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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. body {
    14. padding: 100px;
    15. }
    16. textarea {
    17. width: 200px;
    18. height: 100px;
    19. border: 1px solid pink;
    20. outline: none;
    21. resize: none;
    22. }
    23. ul {
    24. margin-top: 50px;
    25. }
    26. li {
    27. width: 300px;
    28. padding: 5px;
    29. background-color: rgb(245, 209, 243);
    30. color: red;
    31. font-size: 14px;
    32. margin: 15px 0;
    33. }
    34. style>
    35. head>
    36. <body>
    37. <textarea name="" id="">textarea>
    38. <button>发布button>
    39. <ul>
    40. ul>
    41. <script>
    42. // 1. 获取元素
    43. var btn = document.querySelector('button');
    44. var text = document.querySelector('textarea');
    45. var ul = document.querySelector('ul');
    46. // 2. 注册事件
    47. btn.onclick = function() {
    48. if (text.value == '') {
    49. alert('您没有输入内容');
    50. return false;
    51. } else {
    52. // console.log(text.value);
    53. // (1) 创建元素
    54. var li = document.createElement('li');
    55. // 先有li 才能赋值
    56. li.innerHTML = text.value;
    57. // (2) 添加元素
    58. // ul.appendChild(li);
    59. ul.insertBefore(li, ul.children[0]);
    60. }
    61. }
    62. script>
    63. body>
    64. html>

    ———————————————以下是第三天—————————————————

    ③删除节点

    1. //body内的代码
    2. <button>删除button>
    3. <ul>
    4. <li>熊大li>
    5. <li>熊二li>
    6. <li>光头强li>
    7. ul>
    8. <script>
    9. // 1.获取元素
    10. var ul = document.querySelector('ul');
    11. var btn = document.querySelector('button');
    12. // 2. 删除元素 node.removeChild(child)
    13. // ul.removeChild(ul.children[0]);
    14. // 3. 点击按钮依次删除里面的孩子
    15. btn.onclick = function() {
    16. if (ul.children.length == 0) {
    17. this.disabled = true;
    18. } else {
    19. ul.removeChild(ul.children[0]);
    20. }
    21. }
    22. script>

     ※※ 删除留言案例

     ※※※※我写的

    搞了半天没成功。。最后发现原来删除部分一直没在btn绑定的事件里面orz

    1. 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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. div {
    14. position: relative;
    15. margin-top: 50px;
    16. left: 50%;
    17. margin-left: -150px;
    18. width: 300px;
    19. height: auto;
    20. }
    21. textarea {
    22. width: 200px;
    23. height: 100px;
    24. border: 1px solid dodgerblue;
    25. outline: none;
    26. resize: none;
    27. vertical-align: bottom;
    28. }
    29. ul {
    30. margin-top: 50px;
    31. }
    32. li {
    33. width: 300px;
    34. padding: 5px;
    35. background-color: lightskyblue;
    36. font-size: 14px;
    37. margin: 15px 0;
    38. }
    39. a {
    40. float: right;
    41. }
    42. style>
    43. head>
    44. <body>
    45. <div>
    46. <textarea>textarea>
    47. <button>发布button>
    48. <ul>ul>
    49. div>
    50. <script>
    51. var btn = document.querySelector('button');
    52. var text = document.querySelector('textarea');
    53. var ul = document.querySelector('ul');
    54. btn.onclick = function() {
    55. if (text.value == '') {
    56. alert('没有输入内容!');
    57. return false;
    58. } else {
    59. var li = document.createElement('li');
    60. li.innerHTML = text.value + "删除";
    61. //插到后面 ul.appendChild(li);
    62. //插到前面
    63. ul.insertBefore(li, ul.children[0]);
    64. }
    65. var a = document.querySelectorAll('a');
    66. for (var i = 0; i < a.length; i++)
    67. a[i].onclick = function() {
    68. ul.removeChild(this.parentNode);
    69. }
    70. }
    71. script>
    72. body>
    73. html>

    ※※※※ pink

    主要内容都是一样的,只是样式什么的有点区别

    1. 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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. body {
    14. padding: 100px;
    15. }
    16. textarea {
    17. width: 200px;
    18. height: 100px;
    19. border: 1px solid pink;
    20. outline: none;
    21. resize: none;
    22. }
    23. ul {
    24. margin-top: 50px;
    25. }
    26. li {
    27. width: 300px;
    28. padding: 5px;
    29. background-color: rgb(245, 209, 243);
    30. color: red;
    31. font-size: 14px;
    32. margin: 15px 0;
    33. }
    34. li a {
    35. float: right;
    36. }
    37. style>
    38. head>
    39. <body>
    40. <textarea name="" id="">textarea>
    41. <button>发布button>
    42. <ul>
    43. ul>
    44. <script>
    45. // 1. 获取元素
    46. var btn = document.querySelector('button');
    47. var text = document.querySelector('textarea');
    48. var ul = document.querySelector('ul');
    49. // 2. 注册事件
    50. btn.onclick = function() {
    51. if (text.value == '') {
    52. alert('您没有输入内容');
    53. return false;
    54. } else {
    55. // console.log(text.value);
    56. // (1) 创建元素
    57. var li = document.createElement('li');
    58. // 先有li 才能赋值
    59. li.innerHTML = text.value + "删除";
    60. // (2) 添加元素
    61. // ul.appendChild(li);
    62. ul.insertBefore(li, ul.children[0]);
    63. // (3) 删除元素 删除的是当前链接的li 它的父亲
    64. var as = document.querySelectorAll('a');
    65. for (var i = 0; i < as.length; i++) {
    66. as[i].onclick = function() {
    67. // node.removeChild(child); 删除的是 li 当前a所在的li this.parentNode;
    68. ul.removeChild(this.parentNode);
    69. }
    70. }
    71. }
    72. }
    73. script>
    74. body>
    75. html>

    ※※※※ MCD 里的完整介绍

    完整版戳这里 → MCD的node.removeChild介绍

    ✿ 一些用法样例

    ④复制节点

    代码截图:

    ⑤动态生成表格

    ※※ 我写的

    个人感觉可以有两种写法

    PS. 看完视频发现其实好像就一种来着,但是第一种已经写完了orz,所以还是放上来了

    ※※※※ 直接套用删除节点案例的模板

     

    但是达不到题目要求的 动态 ” 效果,代码:

    1. 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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. table {
    14. margin: 100px auto;
    15. padding: 0;
    16. width: 500px;
    17. height: auto;
    18. font-family: '楷体';
    19. text-align: center;
    20. border: 3px dodgerblue solid;
    21. border-collapse: collapse;
    22. }
    23. th,
    24. td {
    25. border: 2px dodgerblue solid;
    26. }
    27. tr {
    28. height: 30px;
    29. }
    30. th {
    31. font-size: 18px;
    32. height: 30px;
    33. }
    34. style>
    35. head>
    36. <body>
    37. <table>
    38. <thead>
    39. <tr>
    40. <th>姓名th>
    41. <th>科目th>
    42. <th>成绩th>
    43. <th>操作th>
    44. tr>
    45. thead>
    46. <tbody>
    47. <tr>
    48. <td>小明td>
    49. <td>C语言td>
    50. <td>90td>
    51. <td><a href="javascript:;">删除a>td>
    52. tr>
    53. <tr>
    54. <td>小红td>
    55. <td>Javatd>
    56. <td>66td>
    57. <td><a href="javascript:;">删除a>td>
    58. tr>
    59. <tr>
    60. <td>小刚td>
    61. <td>线性代数td>
    62. <td>78td>
    63. <td><a href="javascript:;">删除a>td>
    64. tr>
    65. <tr>
    66. <td>小丽td>
    67. <td>汇编语言td>
    68. <td>70td>
    69. <td><a href="javascript:;">删除a>td>
    70. tr>
    71. tbody>
    72. table>
    73. <script>
    74. var tb = document.querySelector('tbody');
    75. var as = document.querySelectorAll('a');
    76. for (var i = 0; i < as.length; i++) {
    77. as[i].onclick = function() {
    78. console.log(this.parentNode.parentNode);
    79. tb.removeChild(this.parentNode.parentNode);
    80. }
    81. }
    82. script>
    83. body>
    84. html>

     ※※※※ 综合之前的创建添加和删除写(正确版)

    看完视频后发现刚开始想简单了qwq

    代码:(从标签开始,前面的都一样)

    1. <tbody>tbody>
    2. table>
    3. <script>
    4. // 数据部分
    5. var trs = [{
    6. name: '小明',
    7. subject: 'C语言',
    8. score: 90
    9. }, {
    10. name: '小红 ',
    11. subject: 'Java',
    12. score: 66
    13. }, {
    14. name: '小刚',
    15. subject: '线性代数',
    16. score: 78
    17. }, {
    18. name: '小丽',
    19. subject: '汇编语言',
    20. score: 70
    21. }];
    22. // 创建行和行内三个的单元格
    23. console.log(trs.length);
    24. var tb = document.querySelector('tbody');
    25. for (var i = 0; i < trs.length; i++) {
    26. var tr = document.createElement('tr');
    27. tb.appendChild(tr);
    28. //出现了一个被我遗忘的知识点!!具体看PS里的内容qwq
    29. for (j in trs[i]) {
    30. var td = document.createElement('td');
    31. // console.log(trs[i][j]);
    32. //遍历所有元素,每次都进行赋值
    33. td.innerHTML = trs[i][j];
    34. tr.appendChild(td);
    35. }
    36. var td = document.createElement('td');
    37. td.innerHTML = '删除 ';
    38. tr.appendChild(td);
    39. }
    40. var as = document.querySelectorAll('a');
    41. for (var i = 0; i < as.length; i++) {
    42. as[i].onclick = function() {
    43. // console.log(this.parentNode.parentNode);
    44. tb.removeChild(this.parentNode.parentNode);
    45. }
    46. }
    47. script>

    PS. 忘了 for(k in obj)  的小伙伴戳这里 → VI.对象 → 遍历,也可以直接看MCD里的官方解释orz

    MCD 里的 for…in 解释

    ※※ pink

    1. 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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Documenttitle>
    8. <style>
    9. table {
    10. width: 500px;
    11. margin: 100px auto;
    12. border-collapse: collapse;
    13. text-align: center;
    14. }
    15. td,
    16. th {
    17. border: 1px solid #333;
    18. }
    19. thead tr {
    20. height: 40px;
    21. background-color: #ccc;
    22. }
    23. style>
    24. head>
    25. <body>
    26. <table cellspacing="0">
    27. <thead>
    28. <tr>
    29. <th>姓名th>
    30. <th>科目th>
    31. <th>成绩th>
    32. <th>操作th>
    33. tr>
    34. thead>
    35. <tbody>
    36. tbody>
    37. table>
    38. <script>
    39. // 1.先去准备好学生的数据
    40. var datas = [{
    41. name: '魏璎珞',
    42. subject: 'JavaScript',
    43. score: 100
    44. }, {
    45. name: '弘历',
    46. subject: 'JavaScript',
    47. score: 98
    48. }, {
    49. name: '傅恒',
    50. subject: 'JavaScript',
    51. score: 99
    52. }, {
    53. name: '明玉',
    54. subject: 'JavaScript',
    55. score: 88
    56. }, {
    57. name: '大猪蹄子',
    58. subject: 'JavaScript',
    59. score: 0
    60. }];
    61. // 2. 往tbody 里面创建行: 有几个人(通过数组的长度)我们就创建几行
    62. var tbody = document.querySelector('tbody');
    63. for (var i = 0; i < datas.length; i++) { // 外面的for循环管行 tr
    64. // 1. 创建 tr行
    65. var tr = document.createElement('tr');
    66. tbody.appendChild(tr);
    67. // 2. 行里面创建单元格(跟数据有关系的3个单元格) td 单元格的数量取决于每个对象里面的属性个数 for循环遍历对象 datas[i]
    68. for (var k in datas[i]) { // 里面的for循环管列 td
    69. // 创建单元格
    70. var td = document.createElement('td');
    71. // 把对象里面的属性值 datas[i][k] 给 td
    72. // console.log(datas[i][k]);
    73. td.innerHTML = datas[i][k];
    74. tr.appendChild(td);
    75. }
    76. // 3. 创建有删除2个字的单元格
    77. var td = document.createElement('td');
    78. td.innerHTML = '删除 ';
    79. tr.appendChild(td);
    80. }
    81. // 4. 删除操作 开始
    82. var as = document.querySelectorAll('a');
    83. for (var i = 0; i < as.length; i++) {
    84. as[i].onclick = function() {
    85. // 点击a 删除 当前a 所在的行(链接的爸爸的爸爸) node.removeChild(child)
    86. tbody.removeChild(this.parentNode.parentNode)
    87. }
    88. }
    89. // for(var k in obj) {
    90. // k 得到的是属性名
    91. // obj[k] 得到是属性值
    92. // }
    93. script>
    94. body>
    95. html>


    不知不觉又万字了orz,感觉主要是代码的功劳hhh,那这一篇就先到这里吧~!

    恭喜看到这的小伙伴,你已经完成 JavaScript APIs第二天和第三天的一部分的学习了~!!

      内容真的好多啊qwq,以后要更加努力!!

    下一篇在这里 (。・∀・)ノ゙ → 还没写完 

     有用的话可以点赞评论收藏哦!!

  • 相关阅读:
    spark6. 如何设置spark 日志
    打破对ChatGPT的依赖以及如何应对ChatGPT的错误和幻觉
    Vue基本语法
    Java并发-生产者消费者实现
    zabbix自定义模板,邮件报警,代理服务器,自动发现与自动添加及snmp
    C++ Reference: Standard C++ Library reference: C Library: cwctype: iswblank
    day065:IO流、字节流、字节流写数据
    django-rest-framework 基础四 过滤、排序、分页、异常处理
    【数据结构】单链表经典面试题10道及详细思路代码
    【八大排序】java版(上)(冒泡、快排、堆排、选择排序)
  • 原文地址:https://blog.csdn.net/weixin_61096287/article/details/127495984