05-DOM操作练习:访问关系的封装

访问关系的函数封装

(1)函数封装

新建一个文件名叫tools.js,然后在里面封装访问关系。代码如下。

tools.js:

  1. /**
  2. * Created by smyhvae on 2018/01/28.
  3. */
  4. function getEle(id){
  5. return document.getElementById(id);
  6. }
  7. /**
  8. * 功能:给定元素查找他的第一个元素子节点,并返回
  9. * @param ele
  10. * @returns {Element|*|Node}
  11. */
  12. function getFirstNode(ele){
  13. var node = ele.firstElementChild || ele.firstChild;
  14. return node;
  15. }
  16. /**
  17. * 功能:给定元素查找他的最后一个元素子节点,并返回
  18. * @param ele
  19. * @returns {Element|*|Node}
  20. */
  21. function getLastNode(ele){
  22. return ele.lastElementChild || ele.lastChild;
  23. }
  24. /**
  25. * 功能:给定元素查找他的下一个元素兄弟节点,并返回
  26. * @param ele
  27. * @returns {Element|*|Node}
  28. */
  29. function getNextNode(ele){
  30. return ele.nextElementSibling || ele.nextSibling;
  31. }
  32. /**
  33. * 功能:给定元素查找他的上一个兄弟元素节点,并返回
  34. * @param ele
  35. * @returns {Element|*|Node}
  36. */
  37. function getPrevNode(ele){
  38. return ele.previousElementSibling || ele.previousSibling;
  39. }
  40. /**
  41. * 功能:给定元素和索引值查找指定索引值的兄弟元素节点,并返回
  42. * @param ele 元素节点
  43. * @param index 索引值
  44. * @returns {*|HTMLElement}
  45. */
  46. function getEleOfIndex(ele,index){
  47. return ele.parentNode.children[index];
  48. }
  49. /**
  50. * 功能:给定元素查找他的所有兄弟元素,并返回数组
  51. * @param ele
  52. * @returns {Array}
  53. */
  54. function getAllSiblings(ele){
  55. //定义一个新数组,装所有的兄弟元素,将来返回
  56. var newArr = [];
  57. var arr = ele.parentNode.children;
  58. for(var i=0;i<arr.length;i++){
  59. //判断:对同级的所有元素节点进行遍历,如果不是传递过来的元素自身,那就是兄弟元素,于是添加到新数组中。
  60. if(arr[i]!==ele){
  61. newArr.push(arr[i]);
  62. }
  63. }
  64. return newArr;
  65. }

上方代码中,我们单独来重视一下最后一个方法:获取指定元素的兄弟元素:

  1. /**
  2. * 功能:给定元素查找他的所有兄弟元素,并返回数组
  3. * @param ele
  4. * @returns {Array}
  5. */
  6. function getAllSiblings(ele){
  7. //定义一个新数组,装所有的兄弟元素,将来返回
  8. var newArr = [];
  9. var arr = ele.parentNode.children;
  10. for(var i=0;i<arr.length;i++){
  11. //判断:对同级的所有元素节点进行遍历,如果不是传递过来的元素自身,那就是兄弟元素,于是添加到新数组中。
  12. if(arr[i]!==ele){
  13. newArr.push(arr[i]);
  14. }
  15. }
  16. return newArr;
  17. }

(2)函数的调用举例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. li {
  8. width: 100px;
  9. height: 100px;
  10. background-color: pink;
  11. margin: 5px;
  12. list-style: none;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <ul>
  18. <li></li>
  19. <li></li>
  20. <li id="box"></li>
  21. <li></li>
  22. <li></li>
  23. </ul>
  24. <script src="tools.js"></script>
  25. <script>
  26. //获取box改为red
  27. var box = getEle("box");
  28. box.style.backgroundColor = "red"
  29. //获取第一个和最后一个子节点
  30. var parent = box.parentNode;
  31. getFirstNode(parent).style.backgroundColor = "yellow";
  32. getLastNode(parent).style.backgroundColor = "yellow";
  33. //获取上一个和下一个兄弟节点
  34. getNextNode(box).style.backgroundColor = "blue";
  35. getPrevNode(box).style.backgroundColor = "blue";
  36. //指定兄弟节点
  37. getEleOfIndex(box,0).style.backgroundColor = "green";
  38. getEleOfIndex(box,1).style.backgroundColor = "green";
  39. //获取所有的兄弟节点(返回值是数组,所以用for循环操作)
  40. var arr = getAllSiblings(box);
  41. for(var i=0;i<arr.length;i++){
  42. arr[i].style.backgroundColor = "green";
  43. }
  44. </script>
  45. </body>
  46. </html>

注意:上方代码中,我们引用到了tools.js这个工具类。