博客列表 >JS事件添加与事件委托

JS事件添加与事件委托

Jason
Jason原创
2020年05月28日 01:49:28953浏览

作业

NodeList与HTMLCollection区别

主要有两个方面不一样

1.包含节点的类型
2.使用方法

1.包含节点的类型不同

  1. (1)NodeList
  2. 一个节点的集合,既可以包含元素和其他节点(注释节点,文本节点等)。
  3. (2)HTMLCollection
  4. 元素集合,只有Element

2.使用方法不同

遍历方式不一样,Nodelist可以用forEach遍历数据
示例

  1. <body>
  2. <ul>
  3. <li>item1</li>
  4. <li>item2</li>
  5. <li>item3</li>
  6. <li>item4</li>
  7. <li>item5</li>
  8. </ul>
  9. </body>
  10. <script>
  11. var cl = console.log.bind(console);
  12. var ul = document.querySelector("ul");
  13. var eles = [];
  14. ul.childNodes.forEach(function (item) {
  15. // 只返回类型为1的元素节点
  16. if (item.nodeType === 1) this.push(item);
  17. }, eles);
  18. cl(eles);

HTMLcollection没有forEach,只能用for循环遍历

  1. <body>
  2. <ul>
  3. <li>item1</li>
  4. <li>item2</li>
  5. <li>item3</li>
  6. <li>item4</li>
  7. <li>item5</li>
  8. </ul>
  9. </body>
  10. <script>
  11. var cl = console.log.bind(console);
  12. var ul = document.querySelector("ul");
  13. for(var i = 0; i < ul.childElementCount; i++) {
  14. cl(ul.children.item(i));
  15. }
  16. </script>

事件的添加方式

注:onclick为点击事件

事件的添加方式有四种:

行内样式

  1. <body>
  2. <button onclick="var text=this.innerText; alert(text);">按钮1</button>
  3. <body>

给HTML元素绑定事件属性

  1. <body>
  2. <button onclick="show(this)">按钮2</button>
  3. </body>
  4. <script>
  5. function show(ele) {
  6. var text = ele.innerText;
  7. alert(text);
  8. }
  9. </script>

通过监听器添加事件

  1. <body>
  2. <button onclick="show(this)">按钮2</button>
  3. </body>
  4. <script>
  5. var btn4 = document.querySelector("button:nth-of-type(4)");
  6. btn4.addEventListener(
  7. "click",
  8. function () {
  9. alert(this.innerText);
  10. },
  11. false
  12. );
  13. <script>

事件委托与代理

原理:子元素上的事件会冒泡到父元素上的同名事件上触发,比如click,注意是同名事件。

示例:

  1. <ul>
  2. <li>item1</li>
  3. <li>item2</li>
  4. <li>item3</li>
  5. <li>item4</li>
  6. <li>item5</li>
  7. </ul>
  8. <script>
  9. // 事件委托/代理: 子元素上的事件会冒泡到父元素上的同名事件上触发,只要写父元素的事件就行了
  10. document.querySelector("ul").addEventListener("click", function (ev) {
  11. cl(ev.target);
  12. cl(ev.currentTarget);
  13. cl(this === ev.currentTarget);
  14. cl("当前触发事件的元素是:", ev.target);
  15. // });
  16. </script>

总结

NodeListHTMLCollection的访问与遍历有所区别,他们可以说是一个包含关系。运用场景不一样。事件的委托与代理,应用场景十分的广阔,它可以减少重复DOM的交互次数,这样我们就需要一个内存空间就够了。提高网页性能。

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