找到在jquery中(视觉上)堆叠在元素下的元素

如果我有2个div(z索引没有分配),一个分层覆盖,我可以使用顶部div的引用来找到它下面的div吗?

就DOM结构而言,这两个div将是兄弟姐妹。 但在视觉上它们彼此堆叠在一起。

这是一个例子:

 

结果如下: 在此处输入图像描述

所以我想弄清楚,当有黑色div,box2,一种在jquery中返回box1的方法(使用选择器),因为box1在box2下面,使用jquery。

检查box1是否与页面上的某个位置共享相同的位置。


只是因为我有点无聊,我做了这个真棒

http://jsfiddle.net/hunter/PBAb6/

 function GetAllElementsAt(x, y) { var $elements = $("body *").map(function() { var $this = $(this); var offset = $this.offset(); var l = offset.left; var t = offset.top; var h = $this.height(); var w = $this.width(); var maxx = l + w; var maxy = t + h; return (y <= maxy && y >= t) && (x <= maxx && x >= l) ? $this : null; }); return $elements; } 

也许沿着这些方向的东西……分离光标下的元素(在本例中为box1)并使用document.elementFromPoint获取x,y位置下面的下一个元素。粗略示例:

  var first_box = $('#box1');// more programmaticaly would be to use document.elementFromPoint to fetch the element under your cursor var first_box_offset = first_box.offset(); var x = first_box_offset.left; var y= first_box_offset.top + first_box.height(); var reattach_me = first_box.detach(); var second_box = document.elementFromPoint(x, y); $('body').append(reattach_me); 

据我所知,没有一个选择器。 你可以编写一个函数来做到这一点。 我将遍历有问题的div之前的每个元素,并检查它的边界框是否在所需的div中。

正如在示例中所拥有的那样,唯一的方法是在DOM中实现另一个DIV分层。 所以,你的简单答案是任何div都在另一个div上,如果它在DOM树之后。 如果不充分,请提供更具说明性的示例。

您可以通过尝试向DIV1添加正边距来说明这是有效的。 你会注意到它向下踢DIV2。 然而,当给出负边距时,DIV2将在DIV1上“分层”。 在使用没有z-index或其他定位方法的边距和div的场景中,DIV1不可能与DIV2重叠。

根据评论编辑:

确定两个元素是否占据相同空间的过程是一个不同的游戏。 您的方法的一般规律是获取锚点的坐标位置并获得其宽度和高度。 然后,遍历所有div并查看锚点的位置是否与其任何坐标重叠。 如果它与多个div重叠,则取DOM中的最后一个,因为它将位于另一个之上。

请不要让我写一个代码示例。 🙂