【发布时间】: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
如何找到第二个最接近的 div?
例如,要获得最接近的,我正在成功使用:
var closest_div_id = $(this).closest('div').attr('id');
现在,我如何获得第二近的?类似的东西:
$(this).(closest('div').closest('div')).attr('id'); ???
【问题讨论】:
标签: javascript jquery
假设this 不是<div> 元素,您可以将选择器传递给parents() 并编写:
var secondClosestId = $(this).parents("div").eq(1).attr("id");
parents() 返回从最近到最外层的祖先,所以这里可以使用eq()。一般情况见this question。
【讨论】:
jQuery#closest() 将返回当前元素,如果它匹配选择器。所以你可以像@Frederic 建议的那样使用jQuery#parents(),或者手动上一个元素:
$(this).closest('div').parent().closest('div').attr('id');
也就是说,您的代码中还有另一个问题。您将两个最接近的()调用包装在括号中。这将产生这两个调用在其他调用之前被评估的效果。由于您可能没有在您的范围内调用最接近的函数,因此给定的代码会因 ReferenceError 而失败。
(我只是为了解释你的初始代码失败的原因,你真的应该接受@Frederic 的建议)
【讨论】:
.closest('div') 之一或删除.parent(),否则您将转到第三个最近的父级。但是,如果 .parent() 不是目标 div,它的结果与使用 .closest('div').closest('div') 的结果不同
要获得比eq 更好的性能,您可以使用slice:
var secondClosest = $(this).parents("div").slice(1, 2).attr('id');
【讨论】:
$(this).parents("div")[1].id, ...
slice() 在这种情况下比eq() 快吗? (我的意思是,你测量过吗?:)