6

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

例如,为了获得最接近的,我成功地使用了:

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

现在,我如何获得第二近的?就像是:

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

3 回答 3

15

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

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

parents()返回从最近到外部排序的祖先,所以eq()可以在这里使用。有关一般情况,请参阅此问题

于 2012-07-10T19:44:53.350 回答
2

jQuery#closest()将返回当前元素,如果它匹配选择器。因此,您可以像@Frederic 建议的那样使用jQuery#parents() ,也可以手动增加一个元素:

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

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

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

于 2012-07-10T19:50:05.103 回答
0

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

var secondClosest = $(this).parents("div").slice(1, 2).attr('id');
于 2012-07-10T19:53:35.240 回答