抱歉,这听起来很奇怪。

用户可以按任意顺序创建具有任意数量的元素的HTML页面,Div将被分配一个类。我无法控制要放置的顺序或位置。

我需要遍历DOM并在每个div上使用特定于我的框架的类名称调用init函数。因此,我不知道它们的放置顺序。

这是我的挑战:
-我正在使用递归.children()jQuery调用,然后遍历当前元素的每个子元素...我想我需要找到一种更快的方法来实现此目标,这会影响性能。
-进行迭代时,$ .each()比标准的for循环要快。我不知道为什么。 $ .each()对于较小的集合是否执行得更快? (即尺寸
我的另一种选择是在每个类上执行选择器,但我需要执行几次迭代,因为这不能保证顺序,因此这些迭代会抵消任何性能优势。

所以我的需求:
-一种更好的性能方法,可首先遍历DOM宽度。如果我能找到比JQuery函数更好的性能,可以使用Plain ol'Javascript。

抱歉,我知道这听起来有点奇怪。任何建议都非常欢迎。

最佳答案

首先,您不应该对性能造成重大影响。这个问题可能在您的代码中的其他地方,但是您没有向我们展示当前的内容,因此我无话可说。就是说,这里的想法应该很快:

var classes = ["class1", "class2", "class3"];
i = classes.length, divs, j, curDiv;

while(i--) {
    divs = document.getElementsByClassName(classes[i]);
    j = divs.length;

    while(j--) {
        var curDiv = divs[j];
        // call some init function on the current div
    }
}


如果这不是很快,那么您在其他地方也可能有问题(也请不要忘记确保在加载文档后调用此问题)。



至于$.each()是否比标准for循环快,这几乎是一个经验法则:本机代码比库代码快(但库代码通常更方便)。在这种情况下,这是正确的。您的平均for循环将比$.each()快得多。

关于javascript - 遍历DOM的最快方法(宽度优先),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13149325/

10-12 00:40
查看更多