博客列表 >js-dom学习 第17章 DOM操作与事件机制

js-dom学习 第17章 DOM操作与事件机制

王小飞
王小飞原创
2020年05月27日 16:02:23899浏览

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表示鼠标离开区域

冒泡原理:

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