博客列表 >DOM操作

DOM操作

phpcn_u202398
phpcn_u202398原创
2020年05月26日 19:11:36551浏览

1、NodeList

  • NodeList是一个节点的集合(既可以包含元素和其他节点),在DOM中,节点的类型总共有12种,通过判断节点的nodeType来判断节点的类型。
  • NodeList对象有个length属性和item()方法,length表示所获得的NodeList对象的节点个数,这里还是要强调的是节点,而item()可以传入一个索引来访问Nodelist中相应索引的元素。
1.1、与html有关的6个节点类型
类型名称 常数值
元素节点 1
属性节点 2
文本节点 3
实体名称节点 6
文档节点 9
文档片段节点 11
代码示例
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <ul id="list">
  10. <li class="item" name="first">item1</li>
  11. <li class="item" name="first">item2</li>
  12. <li class="item" name="first">item3</li>
  13. <li class="item" name="first">item4</li>
  14. <li class="item" name="first">item5</li>
  15. <li class="item" name="first">item6</li>
  16. </ul>
  17. </body>
  18. </html>
  19. <script>
  20. var lg = console.log.bind(console);
  21. var ul = document.querySelector("ul");
  22. lg(ul);
  23. //子节点
  24. lg(ul.childNodes);
  25. lg(ul.childNodes.length);
  26. lg(ul.childNodes[3]);
  27. //遍历
  28. var eles = [];
  29. ul.childNodes.forEach(function(item){
  30. if(item.nodeType === 1) this.push(item);
  31. },eles)
  32. lg(eles);
  33. //获取第一个子节点
  34. lg(ul.firstChild);
  35. //获取下一个子节点
  36. lg(ul.firstChild.nextSibling);
  37. //获取最后一个子节点
  38. lg(ul.lastChild);
  39. //获取前一个子节点
  40. lg(ul.lastChild.previousSibling);
  41. </script>

2、HTMLCollection

  • HTMLCollection是元素集合,它和NodeList很像,有length属性来表示HTMLCollection对象的长度,也可以通过elements.item()传入元素索引来访问。
  • HTMLCollection的集合和NodeList对象一样也是动态的,他们获取的都是节点或元素集合的一个引用。
代码示例
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <ul id="list">
  10. <li class="item" name="first">item1</li>
  11. <li class="item" name="first">item2</li>
  12. <li class="item" name="first">item3</li>
  13. <li class="item" name="first">item4</li>
  14. <li class="item" name="first">item5</li>
  15. <li class="item" name="first">item6</li>
  16. </ul>
  17. </body>
  18. </html>
  19. <script>
  20. var lg = console.log.bind(console);
  21. var ul = document.querySelector("ul");
  22. lg(ul.children);
  23. lg(ul.children.length);
  24. lg(ul.childElementCount);
  25. //第一个元素
  26. lg(ul.firstElementChild);
  27. //最后一个元素
  28. lg(ul.lastElementChild);
  29. lg(ul.children[3]);
  30. //前一个
  31. lg(ul.children[3].previousElementSibling);
  32. //下一个
  33. lg(ul.children[3].nextElementSibling);
  34. lg("-------------------------");
  35. //遍历
  36. for(var i = 0;i<ul.childElementCount;i++){
  37. lg(ul.children.item(i));
  38. }
  39. </script>

3、事件添加方式

代码示例
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <button onclick="show(this)">按钮</button>
  10. <button>按钮1</button>
  11. <button>按钮2</button>
  12. </body>
  13. </html>
  14. <script>
  15. //给html元素绑定事件属性
  16. function show(ele){
  17. var text = ele.innerText;
  18. alert(text);
  19. }
  20. //监听器
  21. var btn = document.querySelector("button:first-of-type");
  22. btn.addEventListener("click",function(){
  23. alert(this.innerText);
  24. },
  25. false //false为冒泡排序
  26. );
  27. //事件派发
  28. var btn1 = document.querySelector("button:nth-of-type(3)");
  29. btn1.addEventListener("click",function(){
  30. alert(this.innerText);
  31. },
  32. false //false为冒泡排序
  33. );
  34. //创建一个事件对象
  35. var ev = new Event("click");
  36. btn1.dispatchEvent(ev);
  37. </script>

4、事件委托/代理

代码示例
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <div class="first">
  10. <div class="second">
  11. <div class="three">事件传递</div>
  12. </div>
  13. </div>
  14. <script>
  15. //事件的捕获与冒泡
  16. var lg = console.log.bind(console);
  17. var first = document.querySelector(".first");
  18. var second = document.querySelector(".second");
  19. var three = document.querySelector(".three");
  20. //true 捕获阶段触发事件
  21. first.addEventListener("click",function(ev){
  22. //ev:事件对象
  23. // ev.type:事件类型
  24. // ev.target:触发事件的元素
  25. // ev.currentTarget:绑定事件的元素
  26. lg(ev.target.classList.item(0));
  27. lg("捕获阶段:" + "触发:" + ev.target.classList.item(0),
  28. "绑定:" + ev.currentTarget.classList.item(0));
  29. },true);
  30. second.addEventListener("click",function(ev){
  31. lg(ev.target.classList.item(0));
  32. lg("捕获阶段:" + "触发:" + ev.target.classList.item(0),
  33. "绑定:" + ev.currentTarget.classList.item(0));
  34. },true);
  35. three.addEventListener("click",function(ev){
  36. lg(ev.target.classList.item(0));
  37. lg("捕获阶段:" + "触发:" + ev.target.classList.item(0),
  38. "绑定:" + ev.currentTarget.classList.item(0));
  39. },true);
  40. //false 冒泡阶段触发事件
  41. first.addEventListener("click",function(ev){
  42. lg(ev.target.classList.item(0));
  43. lg("冒泡阶段:" + "触发:" + ev.target.classList.item(0),
  44. "绑定:" + ev.currentTarget.classList.item(0));
  45. },false);
  46. second.addEventListener("click",function(ev){
  47. lg(ev.target.classList.item(0));
  48. lg("冒泡阶段:" + "触发:" + ev.target.classList.item(0),
  49. "绑定:" + ev.currentTarget.classList.item(0));
  50. },false);
  51. three.addEventListener("click",function(ev){
  52. lg(ev.target.classList.item(0));
  53. lg("冒泡阶段:" + "触发:" + ev.target.classList.item(0),
  54. "绑定:" + ev.currentTarget.classList.item(0));
  55. },false);
  56. </script>
  57. <!--冒泡实现事件的委托/代理-->
  58. <ul>
  59. <li>item1</li>
  60. <li>item2</li>
  61. <li>item3</li>
  62. <li>item4</li>
  63. <li>item5</li>
  64. </ul>
  65. <script>
  66. //document.querySelectorAll("ul li").forEach(function(item){
  67. // item.addEventListener("click",function(ev){
  68. // lg("当前触发事件的元素:", this);
  69. // });
  70. //});
  71. //事件委托/代理 :子元素上的事件会冒泡到父元素上的同名事件上触发
  72. document.querySelector("ul").addEventListener("click",function(ev){
  73. lg("当前触发事件的元素:",ev.target);
  74. lg("当前绑定事件的元素:",ev.currentTarget);
  75. });
  76. </script>
  77. </body>
  78. </html>

5、事件捕获与冒泡原理

学习总结

本节课我们学习了事件的添加方式与事件的委托/代理,通过本节课的学习使知道了捕获与冒泡的原理,同时学到了事件委托/代理的实现方式。

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