如何在jQuery的可滚动区域内获取元素的绝对位置?

时间:2010-07-02 00:36:57

标签: jquery css

假设我有$container div position: relative$foo内有div position: absolute。我想得到$foo相对于容器的位置。 jQuery使这很简单:

$foo.position()

返回具有topleft属性的对象,以像素为单位指定。问题是,如果容器向下或向右滚动,则此数字不再准确。具体来说,它不会发生变化。 jQuery计算position()使其等同于$foo.offset() - $container.offset()(其中offset()给出窗口相对位置),并且$foo.offset()随着用户滚动$container而更改。

2 个答案:

答案 0 :(得分:1)

您似乎需要$foo.position(),然后通过添加$container的{​​{1}}和scrollTop()进行调整。

如果您实际上不知道scrollLeft()的相对容器是什么,这会很烦人。我已经开始编写一个函数(在CoffeeScript中):

$foo

我有一种更直接的方式吗?或者直接查找任意元素容器的滚动条位置?

[更新>在阅读了Gaby的回答和评论后,我制作了一个小jQuery插件,该插件遍历所有元素的父母,并将他们的$.fn.container: -> $parent: @parent() if $parent.css('position') is 'relative' return $parent else return $parent.container() scrollTop()添加到该元素的scrollLeft()。我没有对此进行彻底测试,所以请尝试一下,让我知道它是否适合您:jqPositionWithScrolling plugin

position()不会自动执行此操作有点奇怪 - 我敢称之为错误。]

答案 1 :(得分:0)

$container的{​​{3}}和.scrollLeft()添加到.position()

$foo返回的值

那应该涵盖它..

<强> 更新

要查找相对父级,您应使用以下

var $parent = $foo.parents()
                  .filter(
                       function(){
                            var position =  $(this).css('position')
                            return position==='relative' || position==='absolute';
                                 }
                         ).eq(0);