使用 Javascript / jQuery 有效地跟踪和更新 DOM 元素的数组?

Efficiently tracking and updating an array of DOM elements with Javascript / jQuery?

在我正在编写的模块内部(它是一种滑块/时间轴界面组件)我有一种方法可以更新控件,这些控件是底部的一组可点击元素,在点击和更新时更新当用户滚动时。

我正在执行以下操作以将 类 附加到项目 直到 活跃的项目。虽然我使用的方法有效,但感觉效率很低,因为我每次都在一组 DOM 元素上循环。

     updateTimeLine : function(pos, cb) {

        var p = pos;
        var timeline = $('.timer').toArray();
        if (p > 15)
            p = 15;

        $.each(timeline, function(index,value) {
            var that = $(this);
            if (index >= p) {
                if (that.children('span').hasClass('active'))
                    that.children('span').removeClass('active');
            } else {
                that.children('span').addClass('active');
            }
        });

        if (cb && typeof(cb) === "function") {
            cb();
        }

        return this;
    },

有更好的方法吗?如果是,怎么做?

对于 observer pattern 这样的东西,这是一个很好的用例吗?我还没有完全理解,还没有花任何时间,所以如果是的话,我真的很想知道如何正确应用这个模式。

当发生相关更改时,观察者模式通过循环调用每个订阅者上的侦听器来通知订阅对象。因此,您可能最终还是会使用 $.each。我认为你所拥有的同样有效。

如果您对每次遍历 dom 都感到不爽,请考虑一下:没有这样的算法可以在不遍历每个 dom 元素的情况下更新它们。缓存 DOM 数组理论上会提高性能,但我的钱表明浏览器已经这样做了。亲自尝试一下 jsperf...