Javascript jQuery:查找第二个最近的div
如何找到第二个最近的div 例如,为了获得最接近的一个,我成功地使用了:Javascript jQuery:查找第二个最近的div,javascript,jquery,Javascript,Jquery,如何找到第二个最近的div 例如,为了获得最接近的一个,我成功地使用了: var closest_div_id = $(this).closest('div').attr('id'); 现在,我怎样才能得到第二个最近的?比如: $(this).(closest('div').closest('div')).attr('id'); ??? 假设此不是元素,则可以将选择器传递给并写入: var secondClosestId = $(this).parents("div").eq(1).attr
var closest_div_id = $(this).closest('div').attr('id');
现在,我怎样才能得到第二个最近的?比如:
$(this).(closest('div').closest('div')).attr('id'); ???
假设
此
不是
元素,则可以将选择器传递给并写入:
var secondClosestId = $(this).parents("div").eq(1).attr("id");
parents()
返回从最靠近外部的祖先开始排序的祖先,因此这里可以使用eq()
。有关一般情况,请参阅。将返回当前元素(如果它与选择器匹配)。因此,您可以使用@Frederic建议的方法,也可以手动向上移动一个元素:
$(this).closest('div').parent().closest('div').attr('id');
也就是说,代码中还有另一个问题。您将两个最近的()调用包装在括号中。这将导致这两个调用在其他调用之前被评估。由于您的作用域中可能没有一个名为“最近”的函数,因此给定的代码可能会因引用错误而失败
(我只是解释为什么您最初的代码失败了,您真的应该接受@Frederic的建议)要比
eq
更好的性能,您可以使用slice
:
var secondClosest = $(this).parents("div").slice(1, 2).attr('id');
我认为您需要删除其中一个
.closest('div')
或删除.parent()
,否则您将转到第三个最近的父级。但是,如果.parent()
不是目标div,则其结果与使用.closest('div')的结果不一样。closest('div')
不是。请阅读我在回答中提供的关于closest()的文档,并查看»获取与选择器匹配的第一个元素,从当前元素开始,通过DOM树向上推进。«为了获得更好的性能,您可以$(this).parents(“div”)[1].id
,…您确定在这种情况下slice()
比eq()
更快吗?(我是说,你测量过吗?:)