4

从页面中找到与我需要的大小相匹配的所有元素以及更少的浏览器重载的最佳方法是什么?

最重要的是让它在页面上有很多元素时浏览器不会过载并且不会崩溃。

我现在使用的是:

elements = document.getElementsByTagName("*");
len = elements.length; 
for(var i = 0; i < len; i++) 
    if(elements[i].clientHeight == MyHeight && elements[i].clientWidth == MyWidth)
{ /*my code*/ }

请,如果有人知道一种更好的方法,它不会像我现在使用的那样对浏览器造成太大的压力,那么这就是我需要的。

4

2 回答 2

0

如果你绝对必须这样做,递归地遍历树会更有效,因为一旦你遇到一个小于你需要的元素,你就知道它里面的任何东西都不是所需的大小。在大多数情况下似乎仍然会有更好的解决方案,但我不知道您的具体问题。

编辑:

这行得通。

function findElements( width, height, element ){
    var results = Array();

    for( var i=0; i<element.childNodes.length; i+=1 ){
        var childElement = element.childNodes[i];

        if( childElement.clientWidth == width && childElement.clientHeight == height ){
            results.push(childElement);
            results = results.concat(findElements(width, height, childElement));

        } else if( childElement.clientWidth < width || childElement.clientHeight < height ){
            continue;

        } else {
            results = results.concat(findElements(width, height, childElement));
        }
    }

    return results;
}

findElements(myWidth, myHeight, document);
于 2013-07-28T15:24:26.663 回答
0

我认为我们在这里谈论的是速度。(尽管差异很小)。

谁最快???-->点击运行按钮并自己测试!!!

我想 document.body.querySelectorAll("*");这是一个明显的赢家。

var items = document.body.querySelectorAll("*");
     var target, i, len = items.length;
     for (i=0;i<len;i++) {
       target=items[i];
if(//your condition)
    { and the code}

优胜者!!!

**结论:**写出易懂、易读、优雅的代码。我认为理解逻辑是最微不足道的部分。

更新:

function findParentNode() {

    var testObj = document.body.querySelectorAll("*");;
    for(var i=0;i<=testObj.length;i++){
      if(testobj.offsetWidth=="your width" && testobj.offsetHeight=="your height"){
            //push it in an array or do whatever you wanted to do 
          }
     else{
     //no elements found!!!
     }
    }
}
于 2013-07-28T16:14:52.910 回答