Blogger Information
Blog 52
fans 0
comment 3
visits 42445
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
js-dom学习 第17章 DOM操作与事件机制
王小飞
Original
900 people have browsed it

1、NodeList 和 HTMLCollection的区别

NodeList 文档所有节点的集合(包括空格 回车等),我们可通过节点列表中的索引号来访问列表中的节点(索引号由0开始)。

HTMLCollection: 表示 HTML 元素的集合(只返回有用的元素)。类似数组,但又不是数组。不会返回无用的文本节点如:空格 回车等等。
特征:1.键名、由0开始 2.有一个length属性,表示数量 3.始终返回一个集合,哪怕只有一个元素。

  1. // js 节点有11种类型,但是与html相关的只有6个
  2. // 1: 元素
  3. // 2: 属性
  4. // 3: 文本
  5. // 6: 注释
  6. // 9: 文档, document
  7. // 11: 文档片断

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>遍历元素节点</title>
  7. </head>
  8. <body>
  9. <ul>
  10. <li>item1</li>
  11. <li>item2</li>
  12. <li>item3</li>
  13. <li>item4</li>
  14. <li>item5</li>
  15. </ul>
  16. </body>
  17. <script>
  18. //先写一个数组 待放遍历结果
  19. var eles = [];
  20. ul.childNodes.forEach(function (item) {
  21. // 只返回类型为1的元素节点 this.push然后添加到eles数组里面
  22. if (item.nodeType === 1) this.push(item);
  23. // 这里表示要添加的数组
  24. }, eles);
  25. cl(eles);
  26. </script>
  27. </html>

效果:

HTMLCollection元素方式遍历(由于文本节点干涉 所以这种方法更好用)

HTMLCollection没有forEach 使用for
  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>遍历元素节点</title>
  7. </head>
  8. <body>
  9. <ul>
  10. <li>item1</li>
  11. <li>item2</li>
  12. <li>item3</li>
  13. <li>item4</li>
  14. <li>item5</li>
  15. </ul>
  16. </body>
  17. <script>
  18. for (var i = 0; i < ul.childElementCount; i++) {
  19. cl(ul.children.item(i));
  20. }
  21. </script>
  22. </html>

效果:

classList对象方法:

  1. classList.add()增加值
  2. classList.remove()移除值
  3. classList.toggle()判断,有此值则移除,无则添加
  4. classList.replace()替换

事件

事件添加方式:

1.onclick 直接添加到按钮属性当中

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

2.给onclick的值传一个参数

<button onclick="show(this)">按钮2</button>

  1. <script>
  2. function show(ele) {
  3. var text = ele.innerText;
  4. alert(text);
  5. }
  6. </script>

3.给html元素添加属性

<button>按钮3</button>

  1. var btn3 = document.querySelector("button:nth-of-type(3)");
  2. btn3.onclick = function () {
  3. alert(this.nodeName);
  4. };

4.监听器方式

<button>按钮4</button>

  1. var btn4 = document.querySelector("button:nth-of-type(4)");
  2. // btn4.addEventListener(事件类型, 事件回调函数, 传递机制)
  3. btn4.addEventListener(
  4. "click",
  5. function () {
  6. alert(this.innerText);
  7. },
  8. // false: 冒泡阶段触发
  9. false
  10. );

5.事件派发(自动操作)

<button>按钮5</button>

  1. var btn5 = document.querySelector("button:last-of-type");
  2. btn5.addEventListener(
  3. "click",
  4. function () {
  5. alert(this.innerText);
  6. },
  7. false
  8. );
  9. // 创建一个事件对象
  10. var ev = new Event("click");
  11. // 不用点击,也会自动的触发点击事件
  12. btn5.dispatchEvent(ev);

总结常见的事件:

(1)输入文本时:

  1. onchange内容改变事件
  2. onfocus获得焦点事件
  3. onblur失去焦点事件
  4. onkeydown键盘按键按下事件
  5. onkeypress释放键盘按键事件

(2)鼠标事件

  1. onclick点击事件
  2. ondbclick表示鼠标快速点击了两次。
  3. mouseover表示鼠标经过。
  4. mouseout表示鼠标离开区域

冒泡原理:

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