2011-08-29 90 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