博客列表 >1. 实例演示dom增删改的常用方法 2. 改写留言板案例, 添加自定义样式

1. 实例演示dom增删改的常用方法 2. 改写留言板案例, 添加自定义样式

P粉314265155
P粉314265155原创
2022年07月28日 11:43:58327浏览

DOM增删改

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>dom 增删改</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 创建元素document.createElement
  12. const ul = document.createElement('ul');
  13. // 添加ul内部元素 append 追加元素 追加内容
  14. document.body.append(ul);
  15. // 在ul内添加多个li
  16. // 方法一
  17. for(let i = 0 ; i < 5 ; i++){
  18. const li = document.createElement('li');
  19. // 给 li给元素 添加内容 注是括弧里面(i+1)
  20. li.append('item-'+(i+1));
  21. // 在ul内添加li
  22. ul.append(li);
  23. }
  24. console.log(ul);
  25. console.log('================');
  26. // 在某个节点之前插入 before
  27. // 创建li 元素
  28. const li = document.createElement('li');
  29. // ('new item') 添加新的节点 注意括弧;里面的单引号
  30. // li 元素 里面添加内容
  31. li.append('new item');
  32. li.style.color ='red';
  33. // 在某个元素之前插入,先获取这个元素
  34. // 采用伪类获取
  35. const itm = ul.querySelector('li:nth-of-type(3)')
  36. // 在获取的元素之前插入新的元素
  37. itm.before(li);
  38. // 在获取的元素之后插入新的元素
  39. // 1、克隆 方法 clon clonNode 克隆节点
  40. // 克隆新节点 注意 如果后面(ture) 是,带着节点内容克隆的,否则只克隆节点元素
  41. let newnode = li.cloneNode(true);
  42. // 在某个节点之后插入
  43. itm.after(newnode);
  44. // 在某个节点 元素 之前之后添加 insertAdjacentElement
  45. // begin 表示开始标签、 end标识结束标签
  46. // beforebegin afterbegin beforeend afterend
  47. ul.style.border = ' 2px solid red ';
  48. // 在UL列表前面增加标题
  49. const h3 = document.createElement('h3');
  50. h3.append('商品');
  51. // 开始标签之前插入
  52. ul.insertAdjacentElement('beforebegin',h3);
  53. // 开始标签之后插入并且插入样式
  54. ul.insertAdjacentHTML('beforebegin','<li style = "color:red">之后插入</li>');
  55. // 结束标签之前
  56. ul.insertAdjacentHTML('beforeend','<li style = "color:red">之后插入</li>');
  57. ul.insertAdjacentHTML('beforeend','<h3>你好</h3>');
  58. // 元素替换
  59. // replaceChild() 在父元素调用
  60. // parentNode.replaceChild( 新节点,被替换的节点)
  61. const lastNode = ul.querySelector('li:last-of-type');
  62. const link = document.createElement('a');
  63. link.href = 'http://www.baidu.com';
  64. link.append('百度');
  65. ul.replaceChild(link,lastNode);
  66. // remove 移除
  67. // 移除第一个节点
  68. ul.firstElementChild.remove;
  69. // 移除最后一个节点
  70. ul.lastElementChild.remove;
  71. // 移除某一个节点
  72. // 移除第二个
  73. ul.querySelector('li:nth-of-type(2)').remove
  74. </script>
  75. </body>
  76. </html>
效果

jsd的操作效果

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>js的操作内容</title>
  8. </head>
  9. <body>
  10. <!-- 你好就是内容 内容就是文本 -->
  11. <!-- <h2>你好</h2> -->
  12. <div class="box">
  13. <style>
  14. h2 {
  15. color: aqua;
  16. }
  17. </style>
  18. <h2>通知</h2>
  19. <!-- display:none 不可见、 -->
  20. <span style="display: none"> 注意</span>
  21. <p>下雨</p>
  22. </div>
  23. <script>
  24. // 1、textContent() 首选
  25. // 返回所有内容,包括 css style display 内容
  26. const box = document.querySelector('.box')
  27. console.log( '%c'+box.textContent, 'color:red');
  28. // 2、innerText() 只输出文本 ,css、style display 内容 不输出
  29. console.log( '%c'+box.innerText, 'color:blue');
  30. // 3、innerHTML() 与 textContent() 相比只 展示标签,带着标签 次选
  31. console.log( '%c'+box.innerHTML, 'color:red');
  32. // 举例
  33. let p = document.createElement('p');
  34. let ul ='<a href = "http://www.baidu.com">百度</a>'
  35. p.innerText =ul;
  36. box.append(p);
  37. // 对象
  38. console.log( box);
  39. // 4、outerHtml() 返回当前包裹当前元素字符串,也就是源代码 不能用json传递
  40. console.log( '%c'+box.outerHTML, 'color:blue');
  41. // 替换 内容
  42. // box.outerHTML = '<h3 style = "color:red">hello</h3>';
  43. // 删除:给一个null相当于删除
  44. // box.outerHTML = null ;
  45. </script>
  46. </body>
  47. </html>
效果

留言板

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>dom案例:留言板 toDoList 留言板</title>
  8. </head>
  9. <body>
  10. <!-- placeholder="请输入留言" 提示文字 自动获取焦点autofocus -->
  11. <!-- onkeydown="" 事件,当键盘按下时触发 this把当前元素 input传入 -->
  12. <input type="text" onkeydown="addMsg(this)" placeholder="请输入留言" autofocus>
  13. <ul class="list"></ul>
  14. <script>
  15. function addMsg(anjian) {
  16. console.log(anjian);
  17. // 事件方法 中有一个对象,表示当前事件:event 按键盘的事件
  18. console.log(event);
  19. // 按键类型 keytype
  20. console.log(event.type);
  21. // 获取当前按键的信息 即按 键盘哪个键
  22. console.log(event.key);
  23. // 判断用户是否提交留言,且 是否按下回车键
  24. if(event.key =='Enter'){
  25. // 第一步、留言是否为空
  26. if(anjian.value.length ==0) {
  27. alert ('留言不能为空');
  28. // 重置焦点
  29. anjian.focus;
  30. return fsale;
  31. }else{
  32. // 添加留言输出控制台
  33. console.log(anjian.value);
  34. const li =document.createElement('li')
  35. li.append(anjian.value);
  36. // 2\ 添加到文档 ,且当前插入位置为 依次插入,有问题的
  37. // document.querySelector('.list').append(li);
  38. //2.1 应该最后输入的插到最开始位置 注意 如果最开始 的值null 会报错,需要做个判断
  39. // document.querySelector('.list').firstElementChild.append(li);
  40. // 2.2 判断是否已有第一个元素
  41. const ul = document.querySelector('.list');
  42. // if (ul.firstElementChild != null ){
  43. // ul.firstElementChild.before(li);
  44. // }
  45. // else{
  46. // ul.append(li);
  47. // }
  48. // 以上简化版
  49. // 注意括弧里面是 逗号
  50. // 进一步简化 就可以省略
  51. // console.log(anjian.value);
  52. // const li =document.createElement('li')
  53. // ul.insertAdjacentHTML('after','<li>${anjian.value}</li>');
  54. // 为每条留言添加删除功能 并且增加事件
  55. // ele.value = ele.value + '<button onclick="del(this.parentNode)">删除</button>';
  56. anjian.value= anjian.value + '<button onclick= "del(this.parentNode)">删除</button>';
  57. ul.insertAdjacentHTML('afterbegin' , `<li>${anjian.value}</li>`);
  58. // ul.insertAdjacentHTML('afterbegin', `<li>${ele.value}</li>`);
  59. // 3\ 清空输入框
  60. anjian.value =null;
  61. }
  62. // 删除功能
  63. }
  64. }
  65. function del(anjian){
  66. console.log(anjian);
  67. // anjian.remove()
  68. // 增加判断
  69. if (confirm('是否删除')){
  70. anjian.remove()
  71. }
  72. // 简化 三元运算
  73. // confirm('是否删除')?anjian.remove():false;
  74. // 另一方式
  75. // return confirm('是否删除?') ? (anjian.outerHTML = null) : false;
  76. }
  77. </script>
  78. </body>
  79. </html>
效果

自定义属性对象dataset

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>自定义属性对象dataset</title>
  8. </head>
  9. <body>
  10. <!--
  11. 1、预定义属性 id class title 官方的
  12. 2、 自定义 :data-
  13. -->
  14. <div class="btn-group">
  15. <!-- 将每个按钮的索引 保存到一个自定义属性,方便用户操作 -->
  16. <!-- 添加事件 -->
  17. <!-- 此处 index 省略了dataset- 前缀 -->
  18. <button data-index="1" onclick="console.log(this.dataset.index);">btn1</button>
  19. <button data-index="2" onclick="console.log(this.dataset.index);" >btn2</button>
  20. <button data-index="3" onclick="console.log(this.dataset.index);">btn3</button>
  21. <div class = "my" data-my-email="123456@qq.com"> 我的邮箱</div>
  22. </div>
  23. <script>
  24. const div =document.querySelector ('.my');
  25. console.log(div);
  26. // 注意 my-email 转为驼峰式
  27. console.log(div.dataset.myEmail);
  28. </script>
  29. </body>
  30. </html>
效果

js操作css

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>js操作css</title>
  8. <style>
  9. /* 文档内部样式 */
  10. div {
  11. width: 100px;
  12. height: 200px;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div style="color: red; background-color: blue;"> Hello</div>
  18. <script>
  19. // 获取元素样式
  20. const div = document.querySelector('div');
  21. // 行内样式 获取不到文档内部样式
  22. console.log(div.style,div.style.backgroundColor);
  23. // 一个元素的最终样式,有外部,内部行内多种级别多个来源确定,所以叫计算样式
  24. // getComputedStyle 因为 只读 所以只能通过行内style 来更新
  25. console.log(window.getComputedStyle(div).width);
  26. console.log('========');
  27. // window 全局对象
  28. console.log(window);
  29. console.log('========');
  30. console.log(document.defaultView);
  31. console.log('========');
  32. // parseFloat parseInt 字符转换。就把 获取的100px 变为 100
  33. let width = window.getComputedStyle(div).width
  34. width = parseInt (width);
  35. console.log(width);
  36. div.style.width = width + 200 +'px ';
  37. </script>
  38. <!-- <iframe src="" frameborder="0"></iframe> 添加画中画 -->
  39. <!-- <iframe src="" frameborder="0"></iframe> -->
  40. </body>
  41. </html>
效果

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