使用jQuery查找特定位置的元素?

51

jQuery中是否有一种方法可以选择位于特定位置的元素?

例如,我可以选择位于left:100和top:300绝对位置上的元素吗?

如果我可以选择位于一定范围内的元素就更好了,例如选择位于left: 100 - 150像素,top: 200 - 280像素的元素。


为什么你需要那个?如果你传递了具有 position: relative 属性的父元素,那么这是可能的,但是为什么呢?它肯定会变慢,而且我真的不认为你没有其他解决方案。 - Claudiu
这基本上与此问题相同:https://dev59.com/5UjSa4cB1Zd3GeqPJeZx - Anderson Green
Anderson,这个没有指定jQuery。 这个链接有: http://stackoverflow.com/questions/2664227/find-element-at-an-absolute-position?rq=1 - Cees Timmerman
2个回答

87

您正在寻找 JavaScript/DOM 方法 .elementFromPoint()

var elem = document.elementFromPoint(100, 100) // x, y

这会返回一个 DOM 节点,然后可以将其包装成 jQuery 对象:

$(elem).remove(); // for instance

我对跨浏览器兼容性并不是很了解,希望一些更懂的人能够编辑这篇文章或者在下面留言。

参考文献:.elementFromPoint()

示例链接:http://www.jsfiddle.net/YjC6y/22/


4
哇!我从未知道这个。太棒了!每天都能学到一些新东西。 - John Hartsock
1
@Thomas:这是非常有可能的。 - jAndy
在IE中使用以下代码:var elem = document.elementFromPoint(100, 100) alert(elem); 它会弹出Object,但是如果使用alert(elem.id);则在FF和chrome中都会弹出id。 - Thomas John
1
显然,使用绝对文档坐标(Safari和Opera)还是相对窗口坐标(IE和Firefox)存在不兼容性。关于这个问题的解释和jQuery解决方案,请访问zehnet.de [document.elementFromPoint - a jQuery solution] (http://www.zehnet.de/2010/11/19/document-elementfrompoint-a-jquery-solution/)。 - Jake Rayson
如果您使用border-radius,请注意,被圆角“移除”的部分将被(正确地)忽略此命令。这在检查鼠标位置时非常有用,但如果您以编程方式检查某些坐标处是否存在元素并且不知道它具有圆角,则可能会引起混淆。 - Shu
当视口小于文档时,您还应减去滚动偏移量。 - Nicolas Castro

13

只要你知道相对于文档的确切坐标:

function getElsAt(top, left){
    return $("body")
               .find("*")
               .filter(function() {
                           return $(this).offset().top == top 
                                    && $(this).offset().left == left;
               });
}

另一个答案止步于第一个重叠层。


2
在一些应用中,在 .find("*") 选择器中添加 :visible 可能会有帮助。 - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接