Blogger Information
Blog 145
fans 7
comment 7
visits 164638
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS核心知识:DOM操作和事件
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
Original
1032 people have browsed it

随堂知识总结:

一、DOM操作:

1、节点时DOM树种的最小单元:节点是有类型的:元素、属性、文本、文档、注释、片段等

  1. document:(window.document)获取文档;定义的快速入口:
  2. document.doctype:获得文档类型
  3. document.documentElement:获取文档种的根节点
  4. document.head:获取head节点
  5. document.body:获取body节点
  6. document.title:获取head中的title节点
  7. document.links:获取a链接的节点集合;

2、DOM操作选择函数

  1. document.getElementsByTagName("元素标签名"); //返回HTMLCollection集合
  2. document.getElementById("ID值"); //返回html代码(元素)
  3. document.getElementsByName("name属性值"); //返回Nodelist集合,节点也可以通过数组和item()方法访问
  4. document.getElementsByClassName("class属性值"); //返回HTMLCollection集合
  5. document.querySelector("Css选择器"); //返回html代码
  6. document.querySelectorAll("css选择器"); //返回Nodelist集合

3、属性操作:

  1. .innerText:操作元素中的文字
  2. .innerHTML:可以操作元素中的文字且可以添加html代码
  3. .style.css属性:可以操作css属性值

4、HTMLCollection(HTML元素)集合和Nodelist(节点)集合可以通过for()循环遍历,Nodeslist可以通过forEach()遍历,而HTMLCollection不可以通过forEach()遍历,可以通过Array.from()把HTMLCollection转换成数组来遍历
5、HTMLCollection(HTML元素)集合和Nodelist(节点)集合都可以通过数组方式访问;也可以通过item()方法访问,两都有length()方法获取长度(数量);
6、节点集合操作函数:

  1. 节点集合.childNodes; //返回包含所有节点类型的集合
  2. 节点集合.children; //只包含元素节点类型的集合
  3. 节点集合.childElementCount; //统计元素节点的数量
  4. 节点集合.childNodes.length; //统计所有类型节点的数量

7、节点操作函数:

  1. 节点.nodeName; //返回元素标签
  2. 节点.nodeType; //返回元素类型
  3. 节点.nodeValue; //返回元素值
  4. 节点集合.firstChild; //返回第一个节点
  5. 节点集合.firstElementChild; //返回第一个元素节点
  6. 节点集合.lastChild; //返回最后一个节点
  7. 节点集合.lastElementChild; //返回最后一个元素节点
  8. 节点.previousSibling; //返回当前节点的前一个节点
  9. 节点.nextSibling; //返回当前节点的前一个节点
  10. 节点.previousElementSibling; //返回当前节点的前一个元素节点
  11. 节点.nextElementSibling; //返回当前节点的前一个元素节点
  12. 节点.parentElement;//返回当前节点的父级元素;

8、DOM属性操作,在JS中class是关键字所以使用className代替class属性值,但由于class属性操作经常被使用,classList对象来操作class属性值,更方便
classList对象中的方法:

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

9、在操作HMTL自定义的属性(例如:data-index)时,常用dataset对象来获取其属性值(例如:dataset.index);如果自定义属性是由两个单词通过-连接组成时;在获取其属性值,把-去掉,把第二个单词字母大写即可(例如:data-index-num,获取:dataset.indexNum)
10、append()appendChild()添加元素和节点;
11、在某个元素中子元素之前插入元素:
parentElement.insertBefore(element,element);在某个元素执行插入操作,第一个元素为要插入的元素,第二个参数为以那个元素为参照

二、事件监听

1、addEventListener('事件',function(){},false);事件监听函数,最后一个值false时为冒泡事件,为true为捕获事件
2、常见的事件:
(1)输入文本时:

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

(2)鼠标事件

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

3、new Event('事件')创建事件对象,dispatchEvent('事件对象');委派事件对象来触发元素事件;
4、回调函数中事件对象和类型:

  1. ev.type; //监听事件类型
  2. ev.targe; //触发事件元素
  3. ev.currentTarget; //绑定事件元素

5、事件委托把子级事件委托父级来触发,主要通过触犯事件的元素(ev.targe)经行区分是那个子级元素触发的,而非帮绑定事件的元素;
6、冒泡和捕获事件的区别:

代码练习

1.demo

  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>获取dom元素</title>
  7. </head>
  8. <body>
  9. <ul id="list">
  10. <li class="item" name="first">item1</li>
  11. <li class="item">item2</li>
  12. <li class="item">item3</li>
  13. <li class="item active">item4</li>
  14. <li class="item">item5</li>
  15. <a href="#"></a>
  16. </ul>
  17. </body>
  18. </html>
  19. <script>
  20. var cl = console.log.bind(console);
  21. //标签
  22. var lis = document.getElementsByTagName("li"); //返回HTMLCollection集合
  23. cl(lis);
  24. //ID
  25. var ul = document.getElementById("list"); //返回html代码(元素)
  26. cl(ul);
  27. ul.style.fontSize = "18px";
  28. //name
  29. var li1 = document.getElementsByName("first"); //返回Nodelist集合,节点也可以通过数组和item()方法访问
  30. cl(li1[0]);
  31. li1.item(0).innerText = "我是第一个元素"; //通过.innerText可以操作元素中的文字
  32. li1.item(0).innerHTML = "<span style='color:red'>我是第二个元素</span>"; //通过.innerText可以操作元素中的文字且可以添加html代码
  33. //class
  34. var lis = document.getElementsByClassName("item"); //返回HTMLCollection集合
  35. cl(lis);
  36. lis1 = Array.from(lis); //HTMLCollection类型无法使用forEach();可以通过Array.from()转换成数组使用;
  37. cl("转换成数组", lis1);
  38. cl(lis.length); //总数量
  39. cl(lis[0]); //以数组的方式访问HTMLCollection
  40. cl(lis.item(1)); //以类数组对象中的item()的方法访问HTMLCollection
  41. //选中的元素和标签可以通过的对象方法操作其属性:.style操作样式;
  42. // CSS选择器
  43. var ul = document.querySelector("#list"); //返回html代码
  44. cl(ul);
  45. var lis = document.querySelectorAll(".item"); //返回Nodelist集合
  46. cl(lis);
  47. lis.forEach(function (item) {
  48. item.style.background = "lightgreen";
  49. });
  50. var first = document.querySelectorAll("#list>:nth-of-type(-n+2)");
  51. var last = document.querySelectorAll("#list>:nth-of-type(n+4)");
  52. cl(first);
  53. cl(last);
  54. cl(document.doctype); //获取文档类型
  55. cl(document.documentElement); //获取html文档内容不包含(文档类型);
  56. cl(window.document); //获取html文档所有内容(包含文档类型);
  57. cl(document.title); //获取html文档标题title .body获取主体内容部分,.head获取头部信息内容;
  58. cl(document.links); //获取文档链接返回HTMLCollection集合
  59. </script>

2.demo2

  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="fisrt">
  10. <li>item01</li>
  11. <li>item02</li>
  12. <li>item03</li>
  13. <li>item04</li>
  14. <li>item05</li>
  15. </ul>
  16. </body>
  17. <script>
  18. var cl = console.log.bind(console);
  19. /*js节点类型:
  20. 1.元素
  21. 2.属性
  22. 3.文本
  23. 6.注释
  24. 9.文档
  25. 11.文档片段
  26. */
  27. var ul = document.querySelector("ul");
  28. /* var li = document.createElement("li");
  29. li.innerHTML = "item6";
  30. //append和appendChild区别在于,append可以添加多个节点,而appendchild只能添加一个节点且不能直接添加字符串;
  31. //且不会重复添加一个元素
  32. ul.append(li);
  33. ul.appendChild(li);*/
  34. // nodeslist
  35. cl(ul);
  36. var lis = document.querySelectorAll("li");
  37. cl(lis);
  38. cl(ul.childNodes); //返回包含所有节点类型的集合
  39. cl(ul.children); //只包含元素节点类型的集合
  40. cl(ul.childElementCount); //统计元素节点的数量
  41. cl(ul.childNodes.length); //统计所有类型节点的数量
  42. cl(ul.childNodes[0]);
  43. cl(ul.childNodes[1].nodeName); //返回元素标签
  44. cl(ul.childNodes[1].nodeType); //返回元素类型
  45. cl(ul.childNodes[1].nodeValue); //返回元素值
  46. cl(ul.firstChild); //返回第一个节点
  47. cl(ul.firstElementChild); //返回第一个元素节点
  48. cl(ul.lastChild); //返回最后一个节点
  49. cl(ul.lastElementChild); //返回最后一个元素节点
  50. cl("返回前一个节点(previousSibling)和下一个节点(nextSibling)");
  51. cl(ul.childNodes[3]); //返回当前节点
  52. cl(ul.childNodes[3].previousSibling); //返回当前节点的前一个节点
  53. cl(ul.childNodes[3].nextSibling); //返回当前节点的前一个节点
  54. cl("^…………");
  55. cl(ul.childNodes[3]); //返回当前节点
  56. cl(ul.childNodes[3].previousElementSibling); //返回当前节点的前一个元素节点
  57. cl(ul.childNodes[3].nextElementSibling); //返回当前节点的前一个元素节点
  58. </script>
  59. </html>

3.demo3

  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>节点中className和classList</title>
  7. <style>
  8. .red {
  9. color: red;
  10. }
  11. .item {
  12. background-color: lightskyblue;
  13. }
  14. .blue {
  15. color: limegreen;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <ul id="first">
  21. <li class="item">item1</li>
  22. <li class="item">item2</li>
  23. <li class="item">item3</li>
  24. <li class="item">item4</li>
  25. <li class="item">item5</li>
  26. <li class="item">item6</li>
  27. </ul>
  28. </body>
  29. <script>
  30. var cl = console.log.bind(console);
  31. var ul = document.querySelector("ul");
  32. cl(ul.id); //输出元素中的id值
  33. cl(ul.children[0].className); //输出节点的class值,在JS中class是关键字所以使用className代替class
  34. cl(ul.children[1].classList); //返回的是DOMTokenList对象
  35. /*
  36. classList对象中的方法:
  37. 1.add()增加值
  38. 2.remove()移除值
  39. 3.toggle()判断,有此值则移除,无则添加
  40. 4.replace()替换
  41. */
  42. ul.children[3].classList.add("red");
  43. ul.children[4].classList.remove("item");
  44. ul.children[3].classList.toggle("red"); //有则移除
  45. ul.children[4].classList.toggle("red"); //无则添加
  46. ul.children[2].classList.replace("item", "blue"); //把元素中的item替换成blue;
  47. </script>
  48. </html>

4.demo4

  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>data-属性</title>
  7. </head>
  8. <body>
  9. <!-- html5中可以使用自定义数据属性保存标签的附加信息,data-做为前缀 -->
  10. <ul data-index="1">
  11. <li data-index="1">item1</li>
  12. <li data-index="2">item2</li>
  13. <li data-index-num="three">item3</li>
  14. <li data-index="4">item4</li>
  15. <li data-index="5">item5</li>
  16. </ul>
  17. </body>
  18. <script>
  19. var cl = console.log.bind(console);
  20. var ul = document.querySelector("ul");
  21. cl(ul);
  22. cl(ul.children);
  23. //data-index获取其属性时去掉data即dataset.index;
  24. cl(ul.children[0].dataset.index);
  25. //如果属性名data-index-num时将中间线去掉,第二个单词字母大写,例如:dataset.indexNum;
  26. cl(ul.children[2].dataset.indexNum); //获取其属性值
  27. ul.children[2].dataset.indexNum = "3"; //修改其属性值
  28. </script>
  29. </html>

5.demo5

  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. <!-- 事件触犯和执行都在元素上 -->
  10. <span onclick="alert(this.innerText)">你好</span>
  11. <br />
  12. <!-- 事件触犯在元素上,通过函数调用执行JS中函数执行 -->
  13. <span onclick="show(this)">php中文网</span>
  14. <p id="p">你好</p>
  15. <span>种业圈</span>
  16. </body>
  17. <script>
  18. function show(item) {
  19. var text = item.innerText;
  20. alert(text);
  21. }
  22. // 通过获取元素绑定事件,并执行
  23. var p = document.querySelector("#p");
  24. p.onclick = function () {
  25. alert(this.nodeName);
  26. };
  27. //监听事件
  28. var span = document.querySelector("body>span:last-of-type");
  29. console.log(span);
  30. span.addEventListener(
  31. "click",
  32. function (ev) {
  33. alert(ev.target.innerText);
  34. },
  35. false
  36. );
  37. //创建委托事件来触发
  38. var ev = new Event("click"); //创建点击事件对象
  39. span.dispatchEvent(ev); //委派点击事件来触发span事件
  40. </script>
  41. </html>
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:dom与事件, 在全栈开发中的占有重要地位
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