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 列表设置红色背景。由于我们未应用选择器表达式,

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

 

在看一个实例:

<body>body
    <div id="one">one
        <div id="two">hello</div>
        <div id="three">three
            <p>p
               <a href="#">tonsh</a>
           </p>
        </div>
     </div>
</body>

 思考:

$("a").parent()
$("a").parents()
$("a").parents("div:eq(0)")
var id=$("a").parents("div:eq(1)").children("div:eq(0)").html();

 实例:

<div id='div1'>
 <div id='div2'><p></p></div>
 <div id='div3' class='a'><p></p></div>
 <div id='div4'><p></p></div>
</div>

 

$('p').parent()
$('p').parent('.a')
$('p').parent().parent()
$('p').parents()
$('p').parents('.a')

 下面看一下以前项目中使用的例子

//删除选中日志
$(".delcheckbox").click(function(){
    var str='';
    $(".tab input[name=checkbox]:checked").each(function(){
        str+=$(this).val()+',';
    });
    str=str.substring(0,str.length-1);
    if(chk_Batch_PKEY(str)){
        art.dialog.confirm('你确认删除选中的日志吗?',function(){
            $.post("myRun/managerlog_del.php",{id:str},function(tips){
                if(tips=='ok'){
                    art.dialog.through({title:'信息',icon:'face-smile',content:'删除成功',ok:function(){art.dialog.close();location.reload();}});
                }else{
                    art.dialog.tips('删除失败');
                }
            });
            return true;
        });
    }else{
        art.dialog.through({title:'信息',icon:'face-sad',content:'请选择删除的日志',ok:function(){art.dialog.close();}});
    }
}).addClass("pointer");

//del event
$(".del").bind("click",function(event){
    var _tmpQuery=$(this);
    var id=$("input[name='id']",$(this).parents("form:first")).attr("value");
    art.dialog.confirm('你确认删除该日志吗?',function(){
        $.post("myRun/managerlog_del.php",{id:id},function(tips){
            if(tips=='ok'){
                art.dialog.tips('成功删除');
                _tmpQuery.parents('tr:first').hide();
            }else{
                art.dialog.tips(tips,5);
            }
        });
        return true;
    });
});

 涉及到的知识点:

 

var id=$("input[name='id']",$(this).parents("form:first")).attr("value");

 

parentsUntil() 方法

定义:parentsUntil() 获得当前匹配元素集合中每个元素的祖先元素,直到(但不包括)被选择器、DOM 节点或 jQuery 对象匹配的元素。

其实,parentsUntil()方法,以及nextUntil()方法、prevUntil()方法,原理一样。唯一不同的是nextUntil()是往下,prevUntil()是往上(同辈元素),

parentsUntil()也是往上(找祖先元素)

 

转载于:https://www.cnblogs.com/sunliyuan/p/5988340.html

<think>嗯,用户想了解jQuery.parent().parents()方法的区别。好的,首先我得回忆一下这两个方法的具体用法区别。记得.parent()是获取每个匹配元素的直接父元素,也就是上一级的父节点,而.parents()则是获取所有祖先元素,直到文档根元素。不过可能需要更详细地解释一下。 首先,我应该确认两者的基本定义。比如.parent()只能向上遍历一级,而.parents()可以遍历多级,并且可以选择性地传入选择器来过滤结果。这时候需要举例子说明,比如一个HTML结构,使用.parent().parents()后的不同结果。 然后,用户可能想知道它们的参数使用情况。比如,是否都可以接受选择器作为参数?是的,两者都可以用选择器来过滤结果。比如.parent('.active')会检查直接父元素是否有.active类,而.parents('.container')会查找所有祖先中符合条件的元素。 接下来,是否需要提到性能差异?因为.parents()会遍历所有祖先元素,可能在大型DOM树中影响性能,而.parent()只查找直接父级,效率更高。这点对用户来说可能有帮助。 另外,用户可能还会混淆.parents().parentsUntil(),不过问题中没有提到,但或许在相关问题里可以提到。不过当前问题只需要区分.parent().parents()。 还需要考虑是否有其他相关方法,比如.closest(),它.parents()类似,但.closest()从自身开始查找,并且返回第一个匹配的祖先,而.parents()返回所有匹配的祖先,顺序是从父级往上。不过这可能超出当前问题的范围,但如果有必要可以简要提及。 再想一下示例代码,应该用什么样的HTML结构来演示这两个方法的不同。比如一个多层嵌套的div结构,然后分别用.parent().parents()来展示结果的不同。这样用户能更直观地理解。 然后,是否需要提到返回元素的顺序?比如.parents()返回的顺序是从直接父元素开始,逐级向上直到根节点,而.parent()只返回直接父元素。 还有,是否要提到这两个方法都返回jQuery对象,可以使用链式调用?不过这可能属于基本知识,用户可能已经了解。 最后,总结两者的区别,用表格或者列表的形式会更清晰。可能需要分点说明遍历层级、参数作用、返回结果数量等。 确保回答符合用户的要求,结构清晰,正确使用LaTeX格式(虽然这里可能用不上,但用户示例中提到了数学公式的相关要求,但当前问题不涉及数学公式,所以可能不需要)。同时生成相关的问题,比如.parentsUntil()的作用,或者.closest()区别,或者性能优化的建议。</think>### jQuery .parent().parents()区别 #### 1. 核心功能对比 - **`.parent()`** 仅获取匹配元素的**直接父元素**(上一级 DOM 节点)。 示例:若 `$("span").parent()`,结果为 `<div class="parent">`[^1]。 - **`.parents()`** 获取匹配元素的**所有祖先元素**(从父级逐级向上直到 `<html>` 根节点)。 示例:若 `$("span").parents()`,结果为 `<div class="parent">` → `<div class="grandparent">` → `<body>` → `<html>`。 #### 2. 参数作用 - **支持选择器过滤** 两者均可传入选择器筛选结果: ```javascript // 仅匹配直接父元素中类名为.active的元素 $("li").parent(".active"); // 匹配所有祖先中类名为.container的元素 $("img").parents(".container"); ``` #### 3. 性能差异 - `.parent()` 仅遍历一级,效率更高; - `.parents()` 需遍历整个祖先链,DOM 层级深时可能影响性能。 #### 4. 代码示例 假设 HTML 结构如下: ```html <div class="grandparent"> <div class="parent"> <span class="child">Text</span> </div> </div> ``` 使用不同方法的结果: ```javascript $(".child").parent(); // 返回 <div class="parent"> $(".child").parents(); // 返回 [div.parent, div.grandparent, body, html] $(".child").parents("div"); // 返回 [div.parent, div.grandparent] ``` #### 5. 总结表格 | 方法 | 遍历层级 | 返回元素数量 | 是否包含根节点 | |------------|----------|--------------|----------------| | `.parent()`| 1级 | 0或1个 | 否 | | `.parents()`| 所有 | 0或多个 | 是 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值