Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:查找第二个最近的div_Javascript_Jquery - Fatal编程技术网

Javascript jQuery:查找第二个最近的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

如何找到第二个最近的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("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()
更快吗?(我是说,你测量过吗?:)