博客列表 >0227作业+DOM与事件的原理与运用+10期线上班

0227作业+DOM与事件的原理与运用+10期线上班

江川林
江川林原创
2020年03月11日 15:57:51729浏览

关于DOM

DOM是document object model的简写,文档对象模型

当网页被加载时,浏览器会创建页面的文档对象模型(DOM),我们可以通过DOM,访问所有的HTML元素,连同它们所包含的文本和属性

-可改变页面中的所有HTML元素(createElement/removeElement)
-可改变页面中的所有HTML属性(.属性名 =
-可改变页面中的所有CSS样式(.style.样式名 =)
-能够对页面中的所有事件作出反应

可以通过以下几点查找元素的
1,通过标签名
document.getElementsByTagName('标签名')
-返回HTMLCollection集合
2,通过ID
document.getElementById('ID名')
-返回第一个id元素,不是集合
3,通过class
document.getElementsByClassName('类名')
-返回HTMLCollection集合
4,通过CSS控制器
document.querySelector()
-返回第一个CSS控制器的第一个元素
document.querySelectorAll()
返回CSS控制器的所有元素的nodeList集合

以下是实操代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>DOM与事件的原理与运用</title>
  6. </head>
  7. <body>
  8. <div class="container">
  9. <p id="item">DOM与事件的学习</p>
  10. <ul class="uls">
  11. <li class="list">努力</li>
  12. <li>认真</li>
  13. <li>坚持</li>
  14. </ul>
  15. </div>
  16. <script>
  17. // 通过标签获取元素
  18. var p = document.getElementsByTagName('p');
  19. // console.log(typeof p);
  20. // console.log(p);
  21. // console.log(p.item(0).firstChild.nodeValue);
  22. var div = document.getElementsByTagName('div');
  23. // console.log(div[0].children.item(0))
  24. // 通过ID获取元素
  25. var item = document.getElementById('item');
  26. // console.log(item);
  27. // console.log(typeof item.firstChild);
  28. // 通过class获取元素
  29. var li = document.getElementsByClassName('list');
  30. // console.log(li);
  31. // console.log(li.item(0));
  32. var uls = document.getElementsByClassName('uls');
  33. // console.log(uls);
  34. // console.log(uls.item(0).firstElementChild);
  35. // 通过API
  36. var api = document.querySelector('li');
  37. // console.log(api.firstElementChild);
  38. // console.log(typeof api);
  39. var apis = document.querySelectorAll('li');
  40. // console.log(apis);
  41. </script>
  42. </body>
  43. </html>

备注

其中元素节点有三大重要属性:
-nodeName:节点名称
-nodeType:节点类型
-ndeValue:节点值(此属性必须是文本节点才有的)

还有

-firstChild:获取第一个节点
-firstElementChild:获取第一个元素节点
-children:获取所有元素节点
-parentElement:获取该元素的父元素

元素的新增

1,创建新元素
-document.createElment
2,给新元素添加HTML内容
-element.innerHTML/innerText
3,获取需要新增元素的父级元素
4,将新元素新增到HTML页面中
-parentelement.appendChild

注:
如果需要新增多个元素,最好创建一个片段,然后将新增元素添加在片段中,最后将片段新增到父元素下,来提升页面的加载效率
-document.createDocumentFragment:创建元素片段

元素的删除

元素的删除和新增流程大致一样,删除代码是:
-document.removeElement:移除元素

以下是实操代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>元素的新增和删除</title>
  6. </head>
  7. <body>
  8. <div class="container">
  9. <p id="item">DOM与事件的学习</p>
  10. <ul class="uls">
  11. <li class="list">努力</li>
  12. <li>认真</li>
  13. <li>坚持</li>
  14. </ul>
  15. </div>
  16. <script>
  17. // 元素的单个新增
  18. // 创建新增元素
  19. var p = document.createElement('p');
  20. // 为新元素增加HTML内容
  21. p.innerText= '我在PHP中文网学习';
  22. // console.log(typeof p.innerText);
  23. // 将新增元素附加到现在元素中,例如:添加在div里面
  24. var div = document.querySelector('div');
  25. // console.log(div);
  26. div.appendChild(p);
  27. // 添加在BODY中
  28. // document.body.appendChild(p);
  29. // 添加多个元素,运用片段
  30. var frag = document.createDocumentFragment();
  31. // 创建元素
  32. // for (var i = 0; i<20;i++){
  33. // var li = document.createElement('li');
  34. // li.innerText = '第:' + (i+1) +'个';
  35. // frag.appendChild(li);
  36. // var ul = document.querySelector('ul');
  37. // }
  38. // ul.appendChild(frag);
  39. // 删除元素
  40. var ul = document.querySelector('ul');
  41. var li = ul.children.item(0);
  42. console.log(li);
  43. ul.removeChild(li);
  44. </script>
  45. </body>
  46. </html>

关于事件

DOM时间允许JS在HTML文档元素中注册不同的时间处理程序,
时间通常与函数结合使用,函数不会在发生前被执行
HTML时间的例子:
-当用户点击鼠标时
-当网页加载时
-当图像加载时
-当鼠标移动到元素上时
-当输入字段被改变时
-当提交HTML表单时
-当用户出发按键时
on事件名称用来在HTML文档属性里面添加

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>事件</title>
  6. </head>
  7. <body>
  8. <div class="contaier">
  9. <p>点击这个按钮,看它会发生什么</p>
  10. <button onclick="alert('欢迎你')">点我</button>
  11. </div>
  12. </body>
  13. </html>

监听器:addEventListener()

-addEventListener()方法用于向指定元素添加事件句柄
-事件监听器的可添加多次,且不会覆盖已存在的时间句柄
-可以向任何DOM对象添加事件监听器,不仅仅是HTML
addEventListener(‘事件类型,例click’,函数,false冒泡/true捕获)
事件类型里面不用加on

  1. <div class="container">
  2. <p>点击这个按钮,看它会发生什么</p>
  3. <button onclick="alert('欢迎你')">点我</button>
  4. <p id="study"></p>
  5. </div>
  6. <script>
  7. // 获取需要监听的元素
  8. var button = document.querySelector('button');
  9. // console.log(button);
  10. // 设置监听事件
  11. button.addEventListener('mouseenter', function (ev) {
  12. // ev.preventDefault()
  13. document.querySelector('#study').innerHTML = 'PHP中文网';
  14. },false)
  15. </script>

事件方法

事件方法就是匿名函数,可以用在给HTML元素添加事件属性

  1. // 函数表达式/匿名函数
  2. button.onclick = function (ev) {
  3. alert('欢迎你');
  4. }

ToDoList实战

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>ToDoList</title>
  6. </head>
  7. <body>
  8. <form action="">
  9. <label for="container">请输入留言内容</label>
  10. <input type="text" id="container">
  11. <button>提交</button>
  12. </form>
  13. <div style="border: 1px solid black; width: 400px; height: 400px;margin-top: 20px">
  14. <p>留言区</p>
  15. <ul>
  16. </ul>
  17. </div>
  18. <script>
  19. // 获取表单
  20. var form = document.forms.item(0);
  21. // 监听提交事件submit
  22. // 获取提交元素
  23. var button = document.querySelector('button');
  24. // 监听提交事件
  25. form.addEventListener('submit', function (ev) {
  26. // 1,禁止提交按钮跳转
  27. ev.preventDefault();
  28. // 2,获取留言框
  29. var ul = document.querySelector('ul');
  30. // 3,创建留言新增元素
  31. var li = document.createElement('li');
  32. // 4,获取留言内容
  33. // var value = document.querySelector('input').value;
  34. var value = form.container.value;
  35. // 判断留言内容是否为空
  36. if (value.trim().length === 0) {
  37. alert('留言内容不能为空');
  38. form.container.focus();
  39. return false;
  40. } else {
  41. // 5,为留言元素增长HTML文档
  42. li.innerHTML = value;
  43. }
  44. // 改变留言顺序
  45. if (ul.childElementCount === 0){
  46. // 6,将留言新增元素添加到留言框
  47. ul.appendChild(li);
  48. }else {
  49. ul.insertBefore(li, ul.firstElementChild);
  50. }
  51. // 7,清空留言输入框
  52. form.container.value = ' ';
  53. form.container.focus();
  54. },false);
  55. </script>
  56. </body>
  57. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议