Javascript 查找区域内的所有元素

Javascript 查找区域内的所有元素,javascript,firefox-addon,Javascript,Firefox Addon,如果我想找到盒子区域内的所有元素,作为Firefox扩展,最好的方法是什么?如果我检查所有leave元素并调用getBoundingClientRect(),那么速度太慢了,因为一个页面上很容易有500多个leave 任何帮助都将不胜感激。谢谢。您可以使用document.element frompoint访问每五个像素(每五个像素比访问每一个像素快得多),将找到的每个元素添加到数组中: function getElementsInRegion(x, y, width, height) {

如果我想找到盒子区域内的所有元素,作为Firefox扩展,最好的方法是什么?如果我检查所有leave元素并调用getBoundingClientRect(),那么速度太慢了,因为一个页面上很容易有500多个leave


任何帮助都将不胜感激。谢谢。

您可以使用
document.element frompoint
访问每五个像素(每五个像素比访问每一个像素快得多),将找到的每个元素添加到数组中:

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;

}
函数getElementsInRegion(x、y、宽度、高度){ var元素=[], expando=+新日期, cx=x, cy=y, curEl; 高度=y+高度; 宽度=x+宽度; 而((cy+=5)<高度){ cx=x; 而(cx<宽度){ curEl=document.elementFromPoint(cx,cy); if(curEl&!curEl[expando]){ curEl[expando]=新编号(0); 元素。推(curEl); cx+=curEl.offsetWidth; }否则{ cx+=5; } } } 返回元素; }
谢谢。但是有没有办法让document.elementFromPoint返回第二个最上面的元素呢?我的加载项在顶部添加了另一层,因此document.elementFromPoint将返回该层。您可以暂时隐藏您的层(
display:none;
),然后运行该函数。非常感谢J-P提供的elementFromPoint(),我只是在寻找它。我的加载项在顶部添加了一层,所以我感兴趣的元素是排名第二的元素。