Javascript jquery,查找不在任何祖先中的最近的div

Javascript jquery,查找不在任何祖先中的最近的div,javascript,jquery,Javascript,Jquery,HTML: 1) 找到最接近目标的查找div的方法是什么 2) 如何找到相对不太接近的其他find_divdiv 请注意,在所讨论的案例中没有祖先关系。因此,我认为jaqueryclosest()在这里是无效的 在我之前问了一个相关问题后,我提出了这个问题。希望这不会造成任何重复 编辑:在目标div行之前添加了几行代码。尝试-获取与给定选择器匹配的以下所有同级 <div class="find_div" id="some_id_1"></div> <!-- o

HTML:


1) 找到最接近目标的
查找div
的方法是什么

2) 如何找到相对不太接近的其他
find_div
div

请注意,在所讨论的案例中没有祖先关系。因此,我认为jaquery
closest()
在这里是无效的

在我之前问了一个相关问题后,我提出了这个问题。希望这不会造成任何重复

编辑:
目标div
行之前添加了几行代码。

尝试-获取与给定选择器匹配的以下所有同级

<div class="find_div" id="some_id_1"></div>

<!-- other divs -->

<div class="find_div" id="some_id_2"></div>

    <!-- other divs -->


<div class="find_div" id="some_id_3"></div>

<!-- other divs -->

    <div class="target_div"></div>


<div class="find_div" id="some_id_4"></div>

<!-- other divs -->

<div class="find_div" id="some_id_5"></div>

    <!-- other divs -->


<div class="find_div" id="some_id_6"></div>

<!-- other divs -->
$('.target_div').nextAll('.find_div').first();//一个接一个

$('.target_div').nextAll('.find_div').eq(0)//您可以使用
nextAll:

(一)

(二)


因为任何横向DOM方法都有一个“单向方向”,所以最好的选择似乎是从“body”标记元素开始,然后在DOM中下降以获取所有元素。 应该对此进行优化,但为了让您了解总体思路,请查看以下内容: (如果相等,则返回2个DOM元素)

var domElems=$('body')。查找('*'),
指数=0,
targetIndex、prevIndex、NextIndex、grabbedElems=[],
结果=[];
对于(变量i=0,z=domElems.length;itargetIndex){
nextIndex=i;
打破
}
}
}
if(Math.abs(prevIndex-targetIndex)1)console.log(results[1]);​

< /代码> @ ISTIAQAEHMED,你认为哪一个最接近?取决于两个相邻的距离(即使不完全相邻,因为其他div可能存在于两个div之间)。或者说距离是指中间的子元素的数量?尝试使用这个想法来解决我的问题。你能看看我帖子中提到的问题吗?你的问题变得越来越复杂。我只是想看看所有nextAll()的答案,如何对上一个div和下一个div应用这样的请求,并计算丢弃的元素,以获得哪个元素实际上是“最近的”元素。在编辑中,在
目标div
之前添加了div。因此,答案中只考虑了下一个div。对不起,我错了,我觉得用jquery代替原始js很容易。哦,你用了jquery。。。嗯,让我试一下答案。你能看一看吗?
$('.target_div').nextAll('.find_div').first();// gets closest one after

$('.target_div').nextAll('.find_div').eq(0) // <-- index of where they are in the collection
var $tdiv = $('.target_div');
var $prev = $tdiv.prevAll('.find_div').first();// prev .find_div div
var $nex = $tdiv.nextAll('.find_div').first();// next .find_div div
var closest;
// get distance between bottom of prev div and top of target div
var $prevDistance = $tdiv.position().top - ($prev.position().top + $prev.height());
// get distance between bottom of target div and top of next div
var $nexDistance = $nex.position().top - ($tdiv.position().top + $tdiv.height());

// if prev div distance is less than next div - closest == prev div
if ($prevDistance < $nexDistance) {
    closest = $prev;
} else {
    closest = $nex;
}
// now you can do whatver you want with the closest element
closest.dowhatever
// or if you want to do something to all others except closest
$('.find_div').not(closest).dowhatever
$('.target_div').nextAll(".find_div").first()
$('.target_div').nextAll(".find_div").not(':first')
 var domElems = $('body').find('*'),
    index = 0,
    targetIndex, prevIndex, nexttIndex, grabbedElems = [],
    results = [];

for (var i = 0, z = domElems.length; i < z; i++) {
    index++;
    if ($(domElems[i]).is('.find_div')) grabbedElems[index] = $(domElems[i]);
    else if ($(domElems[i]).is('.target_div')) targetIndex = index;
}

for (var i = 0, z = grabbedElems.length; i < z; i++) {
    if (grabbedElems[i]) {
        if (i < targetIndex) prevIndex = i;
        else if (i > targetIndex) {
            nextIndex = i;
            break;
        }
    }
}

if (Math.abs(prevIndex - targetIndex) <= Math.abs(nextIndex - targetIndex)) results.push(grabbedElems [prevIndex]);

if (Math.abs(nextIndex - targetIndex) <= Math.abs(prevIndex - targetIndex)) results.push(grabbedElems [nextIndex]);

if (results.length > 0) console.log(results[0]);
if (results.length > 1) console.log(results[1]);​