祖先是父、祖父或曾祖父等等。
通过 jQuery,能够向上遍历 DOM 树,以查找元素的祖先。
向上遍历 DOM 树,这些 jQuery 方法很有用,它们用于向上遍历 DOM 树:
parent() parents() parentsUntil()
.parent()方法允许我们能够在DOM树中搜索到这些元素的父级元素,从有序的向上匹配元素,并根据匹配的元素创建一个新的 jQuery 对象。
.parents()和.parent()方法是相似的,但后者只是进行了一个单级的DOM树查找
.parentsUntil() 方法会找遍所有这些元素的前辈元素,直到遇到了跟参数匹配的元素才会停止。返回的jQuery对象中包含了所有找到的前辈元素,除了与 .parentsUntil() 选择器匹配的那个元素。
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script src="http://img1.sycdn.imooc.com//down/540812440001e40e00000000.js" type="text/javascript"></script> <title></title> </head> <body> <button id="test1">jQuery遍历祖先</button> <button id="test2">模拟遍历祖先</button> <ul class="level-1"> <li class="item-i">I</li> <li class="item-ii">II <ul class="level-2"> <li class="item-a">A</li> <li class="item-b">B <ul class="level-3"> <li class="item-1">1</li> <li class="item-2">2</li> <li class="item-3">3</li> </ul> </li> <li class="item-c">C</li> </ul> </li> <li class="item-iii">III</li> </ul> <script type="text/javascript"> function parent(elem) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; } function parents(elem){ var matched = []; while ( (elem = elem[ 'parentNode' ]) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { matched.push( elem ); } } return matched; } function parentsUntil(elem, filter) { var matched = [], until, truncate = filter !== undefined; while ((elem = elem['parentNode']) && elem.nodeType !== 9) { if (elem.nodeType === 1) { if (truncate) { if(elem.nodeName.toLowerCase() ==filter){ break; } } matched.push(elem); } } return matched; } $("#test1").click(function(){ var item = $('.item-1'); alert(item.parent()[0]) alert( item.parents().length) alert( item.parentsUntil('body').length) }) $("#test2").click(function(){ var item = document.querySelectorAll('.item-1')[0] alert(parent(item)) alert(parents(item).length) alert(parentsUntil(item, 'body').length) }) </script> </body> </html>