在js中我们要获取父节点有很多办法,如
1)parentObj.firstChild:如果节点为已知节点(parentObj)的第一个子节点就可以使用这个方法。这个属性是可以递归使用的,也就是支持parentObj.firstChild.firstChild.firstChild...的形式,如此就可以获得更深层次的节点。
(2)parentObj.lastChild:很显然,这个属性是获取已知节点(parentObj)的最后一个子节点。与firstChild一样,它也可以递归使用。
在使用中,如果我们把二者结合起来,那么将会达到更加令人兴奋的效果,即:parentObj.firstChild.lastChild.lastChild...
(3)parentObj.childNodes:获取已知节点的子节点数组,然后可以通过循环或者索引找到需要的节点。
在jquery我们可以使用closest和parents
假设需要获取当前节点的祖父节点(父节点的父节点),其有属性class=”pp”,那么获取的方法为:
代码如下 | 复制代码 |
$('#cur').parent().parent(); 或 $('#cur').parent().parent('.pp'); 或 $('#cur').parent('.pp'); |
获取父节点的方法closest([expr])。
代码如下 | 复制代码 |
$('#cur').closest('.pp'); |
先举个例子,
代码如下 | 复制代码 |
<ul class="parent1"> <li><a href="#" id="item1">jquery获取父节点</a></li> <li><a href="#">jquery获取父元素</a></li> </ul> |
我们的目的是通过 id 为 item1 的便签a取到 class 为 parent1 的ul元素,有以下几种方法:
1、parent([expr])
取得一个包含着所有匹配元素的唯一父元素的元素集合。
你可以使用可选的表达式来筛选。
代码如下
代码如下 | 复制代码 |
$('#item1').parent().parent('.parent1'); |
2、:parent
匹配含有子元素或者文本的元素
代码如下
代码如下 | 复制代码 |
$('li:parent'); |
3、parents([expr])
取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。
代码如下
代码如下 | 复制代码 |
$('#items').parents('.parent1'); |
closest和parents的主要区别是:
前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找
前者逐级向上查找,直到发现匹配的元素后 就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤
前者返回0或1个元素,后者可能包含0 个,1个,或者多个元素