博客列表 >DOM增删改,留言板添加自定义样式

DOM增删改,留言板添加自定义样式

三九三伏
三九三伏原创
2022年07月30日 11:17:30310浏览

一、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

点击确定删除

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