Blogger Information
Blog 26
fans 0
comment 0
visits 12176
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
ES6 JS获取元素api&& Dom 常用遍历方法 含源码(1107)
高空中的云
Original
405 people have browsed it

ES6 实例演示二个获取元素的api

querySelector/querySelectorAllgetElementby相比较优势是:可以使用 CSS 风格的 Selectors;并且几乎支持所有CSS选择器的 syntax 风格

  • querySelector()
    文档对象模型Document引用的 querySelector() 方法返回文档中与指定选择器或选择器组匹配的第一个 Element对象。如果找不到匹配项,则返回null。
  1. const ul = document.querySelector('ul'); //等同于 document.getElementbyTagname('ul')[0]
  2. console.log(ul);
  3. //如果页面中有ul标签,则打印第一个<ul>...</ul>,如无,则打印null
  • querySelectorAll()

    返回与指定的选择器组匹配的文档中的元素列表 (使用深度优先的先序遍历文档的节点)。返回的对象是 NodeList 。

  1. const ul = document.querySelectorAll('ul'); // 等同于 document.getElementbyTagname('ul')
  2. console.log(ul);
  3. // 如果页面有ul标签,则打印所有ul的集合,例如:NodeList(2) [ul, ul]...

实例演示dom常用的遍历方法

nodeType 节点类型,常见值:1,元素节点;3,元素或属性中的文字;9,文档类型节点

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <ul class="list"><li>item1</li><li>item2</li><li>item3</li><li>item4</li><li>item5</li></ul>
  11. <ul class="listWithWrap">
  12. <li>listwithwrapItem1</li>
  13. <li>listwithwrapItem2</li>
  14. <li>listwithwrapItem3</li>
  15. </ul>
  16. <script>
  17. const list = document.querySelector('.list');
  18. const listWithWrap = document.querySelector('.listWithWrap');
  19. // nodeType 节点类型
  20. console.log("---------nodeType---------");
  21. console.log(
  22. "list nodeType:" + list.nodeType +
  23. "\nlistWithWrap nodeType: " + listWithWrap.nodeType);
  24. // 都是ul开头,所以都是html标签,即 nodeType == 1 == Node.ELEMENT_NODE
  25. // 1. 所有子节点: childNodes
  26. console.log("--------childNodes----------");
  27. let listItems = list.childNodes;
  28. let listWithWrapItems = listWithWrap.childNodes;
  29. console.log(
  30. "listItems.childNode[0].nodeType=" + listItems[0].nodeType
  31. +
  32. "\nlistWithWrapItems.childNode[0].nodeType=" + listWithWrapItems[0].nodeType
  33. )
  34. //list 没有换行,所以第一个childNode 是'li标签',是一个html标签, 即 nodeType == 1 == Node.ELEMENT_NODE
  35. // listWithwrap 有换行,所以第一个childNode 是 '\n',是一个文本,即 nodeType == 3 == Node.TEXT_NODE,
  36. // listWithWrap为什么是11个,因为有6个文本类型节点(text:`\n`),5个元素类型节点(`li`)
  37. // 类数组
  38. // 1. Array.from
  39. console.log("---------from-----------")
  40. console.log(Array.from(listItems))
  41. console.log(Array.from(listWithWrapItems))
  42. // 2. ...rest
  43. console.log("---------rest-----------")
  44. // ...在这里是把数组中的元素展开
  45. console.log([...listItems])
  46. console.log([...listWithWrapItems])
  47. // 转为数组之后,Array很多API都可以用
  48. // 要求只返回“元素类型的节点”
  49. let resultListItems = [...listItems].filter(item => item.nodeType === 1)
  50. let resultListWithWrapItems = [...listWithWrapItems].filter(item => item.nodeType === 1)
  51. console.log("-------只返回元素类型节点-------")
  52. console.log(resultListItems)
  53. console.log(resultListWithWrapItems)
  54. console.log("------------封装函数----------------")
  55. // 封装
  56. const getChildren = items => [...listItems].filter(item => item.nodeType === 1)
  57. // 使用这个API
  58. console.log(getChildren(listItems))
  59. console.log(getChildren(listWithWrapItems))
  60. // js已经给我们封装好一个属性 children
  61. console.log("---------js已定义属性children----------")
  62. // 2. children : 所有子元素节点
  63. console.log(list.children)
  64. console.log(listWithWrap.children)
  65. // children : 类数组
  66. // 3. 第一个子元素
  67. // ele.textContent: 元素内的文本
  68. console.log("----------------element.textContent----------------")
  69. console.log(list.children[0].textContent)
  70. console.log(listWithWrap.children[0].textContent)
  71. // 语法糖
  72. console.log("------------------语法糖-----------------------------")
  73. console.log("------------firstElementChild-----------------")
  74. let first = list.firstElementChild
  75. console.log(first.textContent)
  76. // 4. 后一个兄弟
  77. console.log("------------后一个兄弟:first-child + * ,与css选择器相同-----------------")
  78. let next = list.querySelector(':first-child + *')
  79. next.style.color = 'blue'
  80. next = first.nextElementSibling
  81. console.log(next.style);
  82. console.log("------------第三个兄弟:nth-of-type(3) ,与css选择器相同-----------------")
  83. let third = listWithWrap.querySelector(':nth-of-type(3)');
  84. third.style.color = '#2900e8';
  85. third.style.fontWeight = 'bolder';
  86. console.log(third.style)
  87. // 5. 最后一个
  88. console.log("----------------最后一个:lastElementChild ---------------")
  89. let last = list.lastElementChild
  90. last.style.color = 'red'
  91. console.log(last.style);
  92. // 6. 前一个兄弟
  93. console.log("------------------前一个兄弟:previousElementSibling--------------------------")
  94. let prev = last.previousElementSibling
  95. prev.style.color = 'violet'
  96. console.log(prev.style);
  97. // 7. 父节点: 一定是元素或文档类型
  98. console.log("------------------list父节点:parentNode-------------------------------")
  99. let parent = list.parentNode
  100. console.log(parent);
  101. parent.style.border = '1px solid';
  102. // 8. 遍历
  103. // 在 [],{},()前分号不能省
  104. // 正确写法
  105. [...list.children].forEach(item => (item.style.border = '1px solid red'));
  106. // 为什么不能让list直接用forEach,因为querySelector/querySelectorAll返回的是一个元素集,不是 NodeList
  107. // 需要先用...展开成一个数组
  108. // 以下代码会报错
  109. console.log(listWithWrap);
  110. listWithWrap.forEach(
  111. (item) =>
  112. alert('aaa')
  113. );
Correcting teacher:PHPzPHPz

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