2011-08-29 89 views
0

在因特网上搜索后,我找到了这些用于查找HTML元素实际位置的标准方法。事情是这样的:计算HTML元素的绝对位置不起作用

function findPos(obj) { 
    var curleft = curtop = 0; 
    if (obj.offsetParent) { 
     curleft = obj.offsetLeft 
     curtop = obj.offsetTop 
     while (obj = obj.offsetParent) { 
      curleft += obj.offsetLeft 
      curtop += obj.offsetTop 
     } 
    } 

    return [curleft,curtop]; 
}   

,我用它来找到任何YouTube视频页面上的“喜欢”按钮的位置,这样我可以(使用的GreaseMonkey)插入我自己的“格”在那里。它适用于简单的Youtube版本,但不适用于它的cosmicpanda版本(youtube.com/cosmicpanda)。这种情况下,有人能帮助我知道为什么它不在那里工作?

-

谢谢
的Piyush

+0

在你的代码中,只有'curleft'是一个局部变量。 'curtop'成为一个隐含的全局变量。做这个,而不是:'var curleft = 0,curtop = 0;' –

+0

这可以帮助你:http://www.quirksmode.org/js/findpos.html – meo

+0

quirksmode.org链接包含几乎相同的代码,已经写在上面。它可以工作,但只适用于简单版本的YouTube。他们做了一些设计更改,这不允许我获得正确的位置。我甚至尝试过使用getBoundingClientRect(),它以更快更简单的方式完成同样的事情,但结果相同。请有人使用上面的链接去youtube的cosmicpanda版本,并尝试说明为什么它不适用于Like按钮。 –

回答

0

offsetLeftoffsetTop给你定位相对定位的父,而不是相对于整个文档。

您的函数将不得不递归获取偏移量,直到它们返回null,这意味着您处于文档级别。然后将所有偏移量加起来得到总偏移量。

+0

嗨mblase75,我想这就是我在上面写的示例代码中所做的。它可以在简单的YouTube上使用。我想知道它的cosmicpanda版本有什么特别之处,所以它不会返回正确的值。你可以看看使用Firebug或其他东西吗?谢谢... –

+0

其实我不行。工作限制等等。抱歉。 – Blazemonger