Blogger Information
Blog 35
fans 0
comment 0
visits 16935
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
DOM增删改,留言板添加自定义样式
三九三伏
Original
311 people have browsed it

一、dom增删改的常用方法

1. 常用接口

  • createElement(ele)创建新元素,document上调用。
  • append(string/ele)追加到父级最后的子节点之后,在父节点上调用。
  • before(string/ele)在某元素之前插入节点,在当前元素上调用。
  • after(string/ele)在某元素之后插入节点,在当前元素上调用。
  • cloneNode(true)克隆节点(true:包含子节点),在被克隆的节点上调用。
  • replaceChild(ele,pos)替换子元素,在父级节点上调用。
  • remove(ele)移除子元素,在父节点上调用。
  1. ...
  2. <script>
  3. ...
  4. // 创建元素,创建好的元素在内存中,没有被浏览器渲染。
  5. const ul = document.createElement('ul');
  6. // 通过追加元素来显示
  7. document.body.append(ul);
  8. for(let i=0; i < 5; i++){
  9. const li = document.createElement('li');
  10. li.append('item-'+(i+1));
  11. ul.append(li);
  12. }
  13. // 在某节点前插入
  14. const li = document.createElement('li');
  15. li.append('new item');
  16. li.style.color = 'red';
  17. // 获取第三个节点
  18. const item = ul.querySelector('li:nth-of-type(3)');
  19. // 追加语法:当前节点.before(新节点)
  20. item.before(li);
  21. // 克隆节点,true表示连带元素内容一起克隆。
  22. let newNode = li.cloneNode(true);
  23. //插入到item之后
  24. item.after(newNode);
  25. ...
  26. </script>
  27. ...

  • insertAdjacentElement(‘插入位置’,元素)
    插入位置有四个
    • afterBegin:开始标签之后,第一个子元素。
    • beforeBegin:开始标签之前,是他的前一个兄弟元素。
    • afterEnd:结束标签之后,他的下一个兄弟元素。
    • beforeEnd:结束标签之前,他的最后一个子元素。
  1. ...
  2. <script>
  3. ...
  4. const h3 = document.createElement('h3');
  5. h3.append('商品列表');
  6. ul.insertAdjacentElement('beforebegin',h3);
  7. ul.insertAdjacentHTML('afterbegin','<li>hello</li>');
  8. ul.insertAdjacentHTML('beforeend','<li>hello beforeend</li>');
  9. ul.insertAdjacentHTML('afterend','<h4>共计九个</h4>');
  10. // 替换,在父节点调用,parentNode.replaceChild(新节点,旧节点)
  11. const xoldNode = ul.querySelector('li:last-of-type'); //旧节点
  12. const xnewNode = document.createElement('a'); //新节点
  13. xnewNode.href = 'www.php.cn';
  14. xnewNode.append('php中文网');
  15. ul.replaceChild(xnewNode,xoldNode);
  16. ...
  17. </script>
  18. ...

  1. ...
  2. <script>
  3. ...
  4. // 移除
  5. ul.firstElementChild.remove();
  6. ul.lastElementChild.remove();
  7. ul.querySelector('li:nth-of-type(3)').remove();
  8. ul.querySelector('li:nth-of-type(4)').remove();
  9. ...
  10. </script>
  11. ...

2. 内容修改

基础html代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. ...
  4. <body>
  5. ...
  6. <div class="box">
  7. <style>
  8. h2 { color: red;}
  9. </style>
  10. <h2>通知</h2>
  11. <span style="display: none;">试用期员工不参加</span>
  12. <p>今天下午17:00开会,开发部,运营部全体参加~~</p>
  13. </div>
  14. ...
  15. </body>
  16. </html>

2.1 textContent使用实例

  1. ...
  2. <script>
  3. ...
  4. const box = document.querySelector('.box');
  5. //textContext返回所有内容,包括style、display:none等部分
  6. console.log('%c' + box.textContent,'color:red');
  7. ...
  8. </script>
  9. ...

2.2 innerText

  1. ...
  2. <script>
  3. ...
  4. // innerText仅输出内容,不包括style和display:none那些。
  5. console.log('%c' + box.innerText,'color:blue');
  6. ...
  7. </script>
  8. ...

2.3 innerHTML

  1. ...
  2. <script>
  3. ...
  4. // innerHTML比textContext还多一些HTML标签,输出内容可以直接被浏览器渲染显示。
  5. console.log('%c' + box.innerHTML,'color:violet');
  6. ...
  7. </script>
  8. ...

首选textContent,innerHTML,innerText是2016年才成为w3c标准。

  1. ...
  2. <script>
  3. ...
  4. // 对比textContent和innerHTML的效果
  5. let p1 = document.createElement('p');
  6. p1.textContent = '<a href="www.php.cn">php中文网</a>';
  7. box.append(p1);
  8. let p2 = document.createElement('p');
  9. p2.innerHTML = '<a href="www.php.cn">php中文网</a>';
  10. box.append(p2);
  11. ...
  12. </script>
  13. ...

2.4 outerHTML

  1. ...
  2. <script>
  3. ...
  4. // box类型是对象
  5. console.log(typeof box);
  6. console.log(box);
  7. // box.outerHTML输出类型是字符串
  8. console.log(typeof box.outerHTML);
  9. console.log(box.outerHTML);
  10. ...
  11. </script>
  12. ...

  1. ...
  2. <script>
  3. ...
  4. // 元素box调用outerHTML的效果
  5. box.outerHTML = '<h3 style="color:red">Hello</h3>';
  6. ...
  7. </script>
  8. ...

元素box调用outerHTML的效果,相当于h3替换了box。所以删除一个元素可以如下写法:

  1. ...
  2. <script>
  3. ...
  4. //删除一个元素box
  5. box.outerHTML = null;
  6. ...
  7. </script>
  8. ...

二、留言板案例

  1. ...
  2. <body>
  3. <!-- onkeydown:按键触发事件 -->
  4. <input type="text" onkeydown="addMsg(this)" placeholder="请输入留言" autofocus>
  5. <ul class="list"></ul>
  6. <script>
  7. function addMsg(ele) {
  8. console.log(ele);
  9. if(event.key === 'Enter'){
  10. // 1. 留言非空验证
  11. if(ele.value.length === 0){
  12. alert('留言不能为空');
  13. // 重置焦点
  14. ele.focus();
  15. return false;
  16. }
  17. // 2. 添加留言
  18. console.log(ele.value);
  19. const ul = document.querySelector('.list');
  20. ele.value = ele.value + '<button onclick="del(this.parentNode)">删除</button>';
  21. ul.insertAdjacentHTML('afterbegin',`<li>${ele.value}</li>`);
  22. // 3. 清空输入框
  23. ele.value = null;
  24. }
  25. }
  26. function del(dparentNode){
  27. console.log(dparentNode);
  28. // return confirm('是否删除?') ? dparentNode.remove(): false;
  29. return confirm('是否删除?') ? (dparentNode.outerHTML = null): false;
  30. }
  31. </script>
  32. </body>
  33. ...

输入三个值

删除一个3

点击确定删除

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