博客列表 >dom的增删改查与留言板实战

dom的增删改查与留言板实战

风车
风车原创
2022年08月08日 10:32:24612浏览

dom中增删改的常用方法

createElement 创建新元素 在document上面调用

  1. const ul = document.createElement("ul");

append(string/ele) 追加到父级的最后子节点后,在父节点上调用

  1. document.body.append(ul);

before 在某元素之前插入 在当前元素调用
注释:首先创建一个新元素Li,然后调用append方法,因为这个方法不光可以追加新节点还可以追加内容,通过append给新元素li添加内容,然后通过querySelectorAll 获取到li的类数组,以此拿到需要节点位置,然后在节点上调用before方法

  1. const li = document.createElement("li");
  2. li.append('new itme');
  3. li.style.color='red';
  4. // 拿到列表的第三个
  5. const a =document.querySelectorAll('.list li');
  6. a[2].before(li);

after 在某元素之后插入 在当前元素调用

  1. const li = document.createElement("li");
  2. li.append('new itme');
  3. li.style.color='red';
  4. // 拿到列表的第三个
  5. const a =document.querySelectorAll('.list li');
  6. a[2].after(li);

cloneNode(true) 克隆节点(输入true 表示包含子节点,不输入表示不包含) 在被克隆节点调用
注释:创建一个新变量,用来装克隆好的新元素,然后调用前面的方法,可以将克隆好的元素添加到节点的指定位置

  1. let newli =li.cloneNode(true);
  2. a[3].before(newli);

replaceChild(ele/pos) 替换子节点 在父节点调用
在父节点上调用,替换掉子节点,需要两个参数,一个是新节点,一个是被替换的节点

  1. ul.replaceChild(li,li);

remove(ele) 删除子元素 在父节点调用
注释:先获取到ul,然后在ul上调用,删除掉UL的子元素
例如下面的例子就是,删掉了ul的最后一个子元素,lastElementChild 是获取当前节点的最后一个子元素。然后调用remove().

  1. const ul =document.querySelector('.list');
  2. ul.lastElementChild.remove();
以某节点为参照插入标签

insertAdjacentElement(‘插入位置’,元素);
下面是插入的位置 一共有四个
afterBegin 开始标签之后,第一个子元素
beforeBegin 开始标签之前,是他的前一个兄弟元素
afterEnd 结束标签之后 是他的下一个兄弟元素
beforeEnd 结束标签之前 是他的最后一个子元素

  1. const li = document.createElement("li");
  2. li.style.color = "red";
  3. li.append('一个新节点');
  4. const ul =document.querySelector('.list');
  5. ul.insertAdjacentElement('beforeend', li);

JS操作页面元素

  1. <div class="box">
  2. <style>
  3. h2{
  4. color: red;
  5. }
  6. </style>
  7. <h2>通知</h2>
  8. <span style="display: none;"">试用期员工不参加</span>
  9. <p>今天下午加班</p>
  10. </div>

span中的样式 dispale:none 表示隐藏,添加的标签所有内容将会被删除
接下来演示JS操作页面元素的方法

textContent 返回所有内容 不包含标签

  1. const box = document.querySelector('.box');
  2. console.log(box.textContent);

innerText 返回文本内容

  1. console.log(box.innerText);

innerHTML 返回所有内容加上所有标签

  1. console.log(box.innerHTML);

outerHTML 返回当前元素的源代码
比如下方就返回box这个div里面的所有源代码

  1. console.log(box.outerHTML);

自定义属性对象

自定义属性以data- 为前缀

我们为这个按钮 添加了一个自定义属性 1 用的就是data-
dataset :自定义属性操作对象(在引用时省去前缀data- 直接引用后缀)
data-xxxx 后缀是自己为这个属性命名
具体操作如下

  1. <button data-index="1" onclick="console.log(this.dataset.index);"> </button>

js操作CSS

获取元素的行内样式 通过style属性

  1. <div style="color: red;">wode</div>
  2. <script>
  3. const div = document.querySelector('div');
  4. console.log(div.style.color);
  5. // </script>

一个元素的样式由外部内部行内等多种来源决定,叫做计算样式
通过getComputedStyle 来获取元素计算样式

  1. console.log(window.getComputedStyle(div).color);

因为getComputedStyle 获得的结果是只读 所以要通过parseInt来进行转换 然后通过行内样式来进行更新

  1. let width=window.getComputedStyle(div).width;
  2. width = parseInt(width);
  3. div.style.width = width + 200+'px';

留言板实战

JS代码

  1. function neir(ele){
  2. // 如果按下了回车键
  3. if (event.key==='Enter'){
  4. // 留言非空认证
  5. if (ele.value.length===0){
  6. alert('留言不能为空');
  7. // 重置焦点
  8. ele.focus();
  9. return false;
  10. }
  11. // 添加留言
  12. const ul=document.querySelector('.text1');
  13. // 为每一条留言添加一个删除按钮
  14. ele.value = ele.value +'<button onclick="del(this.parentNode)">删除</button>';
  15. ul.insertAdjacentHTML('afterbegin', `<li>${ele.value}</li>`);
  16. // 清空当前输入框
  17. ele.value=null; //当前输入框为空
  18. }
  19. }
  20. function del(ele) {
  21. // confirm 是弹框 让用户进行选择
  22. return confirm('是否删除?') ? ele.remove() : false;
  23. }

HTML和css代码

  1. <!-- 引入外部样式表 -->
  2. <link rel="stylesheet" href="css/demo.css">
  3. <!-- 引入外部脚本 -->
  4. <script src="js/demo.js"></script>
  5. </head>
  6. <body>
  7. <!-- --------头部---------- -->
  8. <header>
  9. <div class="top">
  10. <a href="">售后反馈留言</a>
  11. </div>
  12. </header>
  13. <!-- --------主题----------- -->
  14. <main>
  15. <div class="text">
  16. <input type="text" onkeydown="neir(this)" placeholder="请输入您的售后要求" autofocus>
  17. </div>
  18. <div class="wenben">
  19. <ul class="text1">
  20. </ul>
  21. </div>
  22. /* --------------默认样式-------------- */
  23. *{
  24. margin: 0;
  25. padding: 0;
  26. box-sizing: border-box;
  27. color: #000;
  28. }
  29. /* 移除下划线 */
  30. body a{
  31. text-decoration: none;
  32. }
  33. /* 移除li前面的小点 */
  34. li {
  35. list-style: none;
  36. }
  37. /* -----------头部区域----------- */
  38. body .top{
  39. height: 60px;
  40. background-color: beige;
  41. display: flex;
  42. place-content: center;
  43. place-items: center;
  44. }
  45. body .top a{
  46. font-size: 20px;
  47. text-indent: 20px;
  48. }
  49. /* -----------主体------------ */
  50. body main {
  51. margin: auto;
  52. width: 1200px;
  53. }
  54. /* 定义一个输入框 并给相关样式 */
  55. body main .text input{
  56. width:1200px;
  57. height: 40px;
  58. background-color: aqua;
  59. }
  60. /* 定义一个接收框展示 */
  61. body main .wenben{
  62. width: 1200px;
  63. background-color: azure;
  64. height: 2000px;
  65. }
  66. body main .wenben .text{
  67. margin: 50px 80px;
  68. }
  69. body main .wenben .text1 li {
  70. display: grid;
  71. grid-template-columns: 800px 50px;
  72. margin: 15px 80px;
  73. color: red;
  74. font-style: italic;
  75. }
  76. body main .wenben .text1 li button{
  77. color: red;
  78. background-color: rgb(230, 255, 255);
  79. width: 80px;
  80. height: 25px;
  81. }

运行展示

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