jQuery中的parent()和parents()有啥区别呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery中的parent()和parents()有啥区别呢?相关的知识,希望对你有一定的参考价值。

有大侠用过jQuery中的parent()和parents()函数没?它们有啥区别呢?请赐教~

    parent(selector) 获得当前匹配元素集合中每个元素的父元素,由选择器筛选(可选)。

    parents(selector) 获得当前匹配元素集合中每个元素的祖先元素,由选择器筛选(可选)。

如果给定一个表示 DOM 元素集合的 jQuery 对象,

.parents() 方法允许在 DOM 树中搜索这些元素的祖先元素,并用从最近的父元素向上的顺序排列的匹配元素构造一个新的 jQuery 对象。

元素是按照从最近的父元素向外的顺序被返回的。

.parents() 和 .parent() 方法类似,不同的是后者沿 DOM 树向上遍历单一层级。

这两个方法都可以接受可选的选择器表达式,与向 $() 函数中传递的参数类型相同。如果应用这个选择器,则将通过检测元素是否匹配该选择器对元素进行筛选。

<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>

从项目 A 开始,则可找到其祖先元素

$('li.item-a').parents().css('background-color', 'red');

此次调用的结果是,level-2 列表、项目 II 以及 level-1 列表等元素(沿 DOM 树一路向上直到 <html>)设置红色背景。

由于未应用选择器表达式,父元素很自然地成为了对象的一部分。如果已应用选择器,则会在包含元素之前,检测元素是否匹配选择器。

由于未应用选择器表达式,所有祖先元素都是返回的 jQuery 对象的组成部分。如果已应用选择器,则只会包含其中的匹配项目。

如果从A 开始,则可找到其父元素:

$('li.item-a').parent().css('background-color', 'red');

此次调用的结果是,为 level-2 列表设置红色背景。由于未应用选择器表达式,父元素很自然地成为了对象的一部分。如果已应用选择器,则会在包含元素之前,检测元素是否匹配选择器。 

参考技术A 嘿嘿,这个我知道,jQuery中的parent()函数和parents()函数的区别是:[*]parent()函数是只往父级找一层;[*]parents()函数是往父级找多层,一直找到body标签。 参考技术B parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合。
parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。
可以看出parent取的很明确,就是当前元素的父元素;
parents则是当前元素的祖先元素。下面列出例子说明:
iv id='div1'>
<div id='div2'>
<p>222</p>
</div>
<div id='div3' class='a'>
<p>333</p>
</div>
<div id='div4'>
<p>444</p>
</div>
</div>
$('p').parent()取到的是div2,div3,div4
$('p').parent('.a')取到的是div3
$('p').parent().parent()取到的是div1,这点比较奇特;不过Jquery对象本身的特点决定了这是可行的。
$('p').parents()取到的是div1,div2,div3,div4
$('p').parents('.a')取到的是div3
参考技术C parent() 获得当前匹配元素集合中每个元素的父元素(父亲),使用选择器进行筛选是可选的。
parents() 获得当前匹配元素集合中每个元素的祖先元素(包括父亲,爷爷.....祖先...原始人),使用选择器进行筛选是可选的。
参考技术D

    “parent”是指取得一个包含着所有匹配元素的唯一父元素的元素集合。

    “parents”则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。

使用区别:

[html] view plain copy

<ul id="menu" style="width:100px;">   

<li>   

<ul>   

<li> <a href="#">Home</a> </li>  

</ul>   

</li>  

<li>End</li>  

</ul>    

接下来,分别看看这三个方法:  

<script type="text/javascript">  

//点击Home时   

$("#menu a").click(function()   

$(this).parent("ul").css("background", "yellow"); //0   

$(this).parent("li").parent("ul").css("background", "yellow"); //1  

$(this).parents("ul").css("background", "yellow"); //2   

$(this).closest("ul").css("background", "yellow"); //3 return false;   

);   

</script>  


    1.parent()方法从指定类型的直接父节点开始查找,在"0"中,<a>的直接父节点是<li>所以在这里找不到<ul>父节点。在"2"中先找到了<li>,接着找到<ul>,并将它的背景色设置为yellow。parent()返回一个节点。

    2.parents()方法查找方式同parent()方法类似,不同的一点在于,当它找到第一的父节点时并没有停止查找,而是继续查找,最后返回多个父节点,如在"2"中,使得id为menu的ul整个背景色变成了yellow。

    3.closest()方法查找时从包含自身的节点找起,它同parents()很类似,不同点就在于它只返回一个节点如在"3"中,实现的功能同1相同。但它使得代码量减小,同"2"相比又只返回单一的一个节点。可见,closest()方法在项目中的使用频率是比较大的。

以上是关于jQuery中的parent()和parents()有啥区别呢?的主要内容,如果未能解决你的问题,请参考以下文章

jquery中closest()parent() parents 区别

jquery parent和parents的区别分析

jQuery 利用 parent() parents() 寻找父级 或祖宗元素

jQuery查找——parent/parents/parentsUntil/closest

jquery 常用选择器 回顾 ajax() parent() parents() children() siblings() find() eq()

使用 jquery 选中或取消选中 parent parents 复选框