如果我想查找盒子區域內的所有元素,將其作爲Firefox擴展名的最佳方法是什麼?如果我檢查所有的離開元素並調用getBoundingClientRect(),它會太慢,因爲頁面上可能容易出現超過500個葉子。查找區域內的所有元素
任何幫助將不勝感激。謝謝。
如果我想查找盒子區域內的所有元素,將其作爲Firefox擴展名的最佳方法是什麼?如果我檢查所有的離開元素並調用getBoundingClientRect(),它會太慢,因爲頁面上可能容易出現超過500個葉子。查找區域內的所有元素
任何幫助將不勝感激。謝謝。
您可以使用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;
}
我的插件在上面添加一個圖層,所以我感興趣的元素是第二個最頂層的元素。 – Kar 2010-01-08 16:23:19