【问题标题】:jQuery: Finding second closest divjQuery:查找第二个最接近的 div
【发布时间】:2012-07-11 04:02:28
【问题描述】:

如何找到第二个最接近的 div?

例如,要获得最接近的,我正在成功使用:

var closest_div_id = $(this).closest('div').attr('id');

现在,我如何获得第二近的?类似的东西:

$(this).(closest('div').closest('div')).attr('id'); ???

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    假设this 不是<div> 元素,您可以将选择器传递给parents() 并编写:

    var secondClosestId = $(this).parents("div").eq(1).attr("id");
    

    parents() 返回从最近到最外层的祖先,所以这里可以使用eq()。一般情况见this question

    【讨论】:

      【解决方案2】:

      jQuery#closest() 将返回当前元素,如果它匹配选择器。所以你可以像@Frederic 建议的那样使用jQuery#parents(),或者手动上一个元素:

      $(this).closest('div').parent().closest('div').attr('id');
      

      也就是说,您的代码中还有另一个问题。您将两个最接近的()调用包装在括号中。这将产生这两个调用在其他调用之前被评估的效果。由于您可能没有在您的范围内调用最接近的函数,因此给定的代码会因 ReferenceError 而失败。

      (我只是为了解释你的初始代码失败的原因,你真的应该接受@Frederic 的建议)

      【讨论】:

      • 我认为您需要删除.closest('div') 之一或删除.parent(),否则您将转到第三个最近的父级。但是,如果 .parent() 不是目标 div,它的结果与使用 .closest('div').closest('div') 的结果不同
      • 嗯,不。请阅读我在答案中提供的有关最接近()的文档,并查看»获取与选择器匹配的第一个元素,从当前元素开始并向上遍历 DOM 树。«
      【解决方案3】:

      要获得比eq 更好的性能,您可以使用slice

      var secondClosest = $(this).parents("div").slice(1, 2).attr('id');
      

      【讨论】:

      • 为了获得更好的性能,您可以$(this).parents("div")[1].id, ...
      • 您确定slice() 在这种情况下比eq() 快吗? (我的意思是,你测量过吗?:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 2019-02-26
      相关资源
      最近更新 更多