2010-01-08 7 views
1

상자 영역 안에있는 모든 요소를 ​​찾으려면 Firefox 확장 기능으로 가장 좋은 방법은 무엇입니까? 모든 요소를 ​​남겨두고 getBoundingClientRect()를 호출하면 페이지에 500 개 이상의 잎이있을 수 있으므로 너무 느릴 것입니다.지역 내의 모든 요소 찾기

도움이 될 것입니다. 감사.

+0

내 부가 기능은 상단에 레이어를 추가, 그래서 내가 찾는 것에 관심이있는 요소는 두 번째 최상위 요소입니다. – Kar

답변

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가 두 번째 최상위 요소를 대신 반환하는 방법이 있습니까? 내 addon이 위에 다른 레이어를 추가하므로 document.elementFromPoint가 대신 해당 레이어를 반환합니다. – Kar

+0

일시적으로 레이어를 숨기고 ('display : none;') 함수를 실행할 수 있습니다. – James

+0

elementFromPoint()에 J-P를 많이 가져 주셔서 감사합니다. – Mic