视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解_jquery
2020-11-27 21:16:43 责编:小采
文档


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

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

如果给定一个表示 DOM 元素集合的 jQuery 对象,.parents() 方法允许我们在 DOM 树中搜索这些元素的祖先元素,并用从最近的父元素向上的顺序排列的匹配元素构造一个新的 jQuery 对象。元素是按照从最近的父元素向外的顺序被返回的。.parents() 和 .parent() 方法类似,不同的是后者沿 DOM 树向上遍历单一层级。

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


下面引用个例子
代码如下:

  • I

  • II

  • A

  • B

  • 1

  • 2

  • 3



  • C



  • III



  • 如果我们从项目 A 开始,则可找到其祖先元素
    代码如下:
    $('li.item-a').parents().css('background-color', 'red');

    此次调用的结果是,level-2 列表、项目 II 以及 level-1 列表等元素(沿 DOM 树一路向上直到 )设置红色背景。由于我们未应用选择器表达式,父元素很自然地成为了对象的一部分。如果已应用选择器,则会在包含元素之前,检测元素是否匹配选择器。由于我们未应用选择器表达式,所有祖先元素都是返回的 jQuery 对象的组成部分。如果已应用选择器,则只会包含其中的匹配项目。

    如果我们从项目 A 开始,则可找到其父元素:
    代码如下:
    $('li.item-a').parent().css('background-color', 'red');

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

    下面在看一个例子
    代码如下:
    body
    one
    hello
    three

    p
    tonsh






    思考:
    代码如下:
    $("a").parent()
    $("a").parents()
    $("a").parents("div:eq(0)")
    var id=$("a").parents("div:eq(1)").children("div:eq(0)").html();

    例三
    代码如下:






    代码如下:
    $('p').parent()
    $('p').parent('.a')
    $('p').parent().parent()
    $('p').parents()
    $('p').parents('.a')

    下面看一下以前项目中使用的例子
    代码如下:
    if(mysql_num_rows($query)){
    while($arr=mysql_fetch_array($query)){
    echo <<

    $arr[id]
    $arr[log]
    $arr[ip]
    $arr[time]


    admin;
    }//while end;
    }else{
    echo "暂无登陆日志";
    }

    jquery相关代码
    代码如下:
    //删除选中日志
    $(".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");

    参考文献:
    parent():http://www.w3school.com.cn/jquery/traversing_parent.asp

    parents():http://www.w3school.com.cn/jquery/traversing_parents.asp


    parentsUntil() 方法

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

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

    下面看一个例子:
    代码如下:






  • I

  • II

  • A

  • B

  • 1

  • 2

  • 3



  • C



  • III


  • $("li.item-a").parentsUntil(".level-1").css("background-color", "red");

    $("li.item-2").parentsUntil( $("ul.level-1"), ".yes" )
    .css("border", "3px solid blue");



    得到结果如下:

    分析:
    代码如下:
    $("li.item-a").parentsUntil(".level-1").css("background-color", "red");

    代码如下:
    -->不符合。其实它是符合li.item-a的祖先元素的。但是根据parentsUntil()方法定义,是不包括选择器、DOM节点或jquery对象所匹配的元素的

  • I
  • -->不符合,这是它祖先元素的同辈元素。并不是li.item-a的祖先元素。
  • II -->符合
    -->符合
  • A
  • -->从这开始往上找其祖先元素。
  • B

  • 1

  • 2

  • 3



  • C



  • III



  • 再来看第二个语句:
    代码如下:
    $("li.item-2").parentsUntil( $("ul.level-1"), ".yes" ).css("border", "3px solid blue");

    代码如下:
    -->是其祖先元素 且又满足选择器表达式".yes",但是根据parentsUntil()方法定义,是不包括选择器、DOM节点或jquery对象所匹配的元素的
  • I
  • 不匹配,不是其祖先元素。
  • II-->是其祖先元素 不满足
    -->是其祖先元素 满足选择器表达式".yes" [所以,最终匹配到该节点,得到如上图所示的蓝色边框效果]
  • A

  • B -->是其祖先元素
    -->是其祖先元素
  • 1

  • 2
  • -->从这开始往上找其祖先元素。
  • 3



  • C



  • III


  • 下载本文
    显示全文
    专题