2010-01-08 97 views
1

如果我想查找盒子區域內的所有元素,將其作爲Firefox擴展名的最佳方法是什麼?如果我檢查所有的離開元素並調用getBoundingClientRect(),它會太慢,因爲頁面上可能容易出現超過500個葉子。查找區域內的所有元素

任何幫助將不勝感激。謝謝。

+0

我的插件在上面添加一個圖層,所以我感興趣的元素是第二個最頂層的元素。 – Kar 2010-01-08 16:23:19

回答

2

您可以使用document.elementFromPoint和訪問每個第五像素(每隔五是比訪問每一個像素快得多),將找到的元素到數組:

function getElementsInRegion(x, y, width, height) { 

    var elements = [], 
     expando = +new Date, 
     cx = x, 
     cy = y, 
     curEl; 

    height = y + height; 
    width = x + width; 

    while ((cy += 5) < height) { 
     cx = x; 
     while (cx < width) { 
      curEl = document.elementFromPoint(cx, cy); 
      if (curEl && !curEl[expando]) { 
       curEl[expando] = new Number(0); 
       elements.push(curEl); 
       cx += curEl.offsetWidth; 
      } else { 
       cx += 5; 
      } 
     } 
    } 

    return elements; 

} 
+0

謝謝。但有沒有辦法讓document.elementFromPoint返回第二個最頂層的元素呢?我的插件在頂部添加了另一個圖層,因此document.elementFromPoint會返回該圖層。 – Kar 2010-01-08 16:22:03

+0

您可以暫時隱藏圖層('display:none;'),然後運行該功能。 – James 2010-01-08 16:33:37

+0

非常感謝elementFromPoint()的J-P我只是在尋找這個 – Mic 2010-01-08 22:12:22