Blogger Information
Blog 36
fans 1
comment 0
visits 29716
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS事件添加与事件委托
Jason
Original
956 people have browsed it

作业

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的交互次数,这样我们就需要一个内存空间就够了。提高网页性能。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:你的总结是对的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post