1-3 遍历祖先
本节编程练习不计算学习进度,请电脑登录imooc.com操作

遍历祖先

祖先是父、祖父或曾祖父等等。

通过 jQuery,能够向上遍历 DOM 树,以查找元素的祖先。

向上遍历 DOM 树,这些 jQuery 方法很有用,它们用于向上遍历 DOM 树:

parent()
parents()
parentsUntil()

.parent()方法允许我们能够在DOM树中搜索到这些元素的父级元素,从有序的向上匹配元素,并根据匹配的元素创建一个新的 jQuery 对象。

.parents().parent()方法是相似的,但后者只是进行了一个单级的DOM树查找

.parentsUntil() 方法会找遍所有这些元素的前辈元素,直到遇到了跟参数匹配的元素才会停止。返回的jQuery对象中包含了所有找到的前辈元素,除了与 .parentsUntil() 选择器匹配的那个元素。

任务

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <script src="http://img1.sycdn.imooc.com//down/540812440001e40e00000000.js" type="text/javascript"></script>
  6. <title></title>
  7. </head>
  8. <body>
  9.  
  10. <button id="test1">jQuery遍历祖先</button>
  11. <button id="test2">模拟遍历祖先</button>
  12.  
  13. <ul class="level-1">
  14. <li class="item-i">I</li>
  15. <li class="item-ii">II
  16. <ul class="level-2">
  17. <li class="item-a">A</li>
  18. <li class="item-b">B
  19. <ul class="level-3">
  20. <li class="item-1">1</li>
  21. <li class="item-2">2</li>
  22. <li class="item-3">3</li>
  23. </ul>
  24. </li>
  25. <li class="item-c">C</li>
  26. </ul>
  27. </li>
  28. <li class="item-iii">III</li>
  29. </ul>
  30.  
  31.  
  32. <script type="text/javascript">
  33.  
  34.  
  35. function parent(elem) {
  36. var parent = elem.parentNode;
  37. return parent && parent.nodeType !== 11 ? parent : null;
  38. }
  39.  
  40.  
  41. function parents(elem){
  42. var matched = [];
  43. while ( (elem = elem[ 'parentNode' ]) && elem.nodeType !== 9 ) {
  44. if ( elem.nodeType === 1 ) {
  45. matched.push( elem );
  46. }
  47. }
  48. return matched;
  49. }
  50.  
  51. function parentsUntil(elem, filter) {
  52. var matched = [],
  53. until,
  54. truncate = filter !== undefined;
  55. while ((elem = elem['parentNode']) && elem.nodeType !== 9) {
  56. if (elem.nodeType === 1) {
  57. if (truncate) {
  58. if(elem.nodeName.toLowerCase() ==filter){
  59. break;
  60. }
  61. }
  62. matched.push(elem);
  63. }
  64. }
  65. return matched;
  66. }
  67.  
  68.  
  69. $("#test1").click(function(){
  70. var item = $('.item-1');
  71. alert(item.parent()[0])
  72. alert( item.parents().length)
  73. alert( item.parentsUntil('body').length)
  74. })
  75.  
  76. $("#test2").click(function(){
  77. var item = document.querySelectorAll('.item-1')[0]
  78. alert(parent(item))
  79. alert(parents(item).length)
  80. alert(parentsUntil(item, 'body').length)
  81. })
  82.  
  83.  
  84.  
  85.  
  86. </script>
  87.  
  88. </body>
  89. </html>
下一节