【问题标题】:jquery get by id or cached dom node and find(id)jquery 通过 id 或缓存的 dom 节点和 find(id) 获取
【发布时间】:2012-07-13 05:10:01
【问题描述】:

我正在尝试对我的代码进行一些速度改进,我想知道哪种方式是访问 DOM 的更好/更快的方式。

我有一个对应于

  • 的 id 数组,我想遍历它们并添加一个类。

    我有两种方法: 1) 遍历 ids 数组,通过 id 获取元素并应用类

        for(var i=0; i<idArray.length i++){
           $('#'+idArray[i]).addClass('someclass')
         }
    

    2) 提取 DOM 节点,缓存它,然后循环遍历它,所以我只迭代 DOM 的一部分

        var column=$('#my_ul');
    
        for(var i=0; i<idArray.length i++){
           column.find('#'+idArray[i]).addClass('someclass')
         }
    

    提前感谢您的帮助

  • 【问题讨论】:

    • 你可以自己测试一下:jsperf.com
    • 你应该看看jsperf.com 并自己测试一下,或者看看this jQuery 是如何处理它的。

    标签: jquery performance dom iteration


    【解决方案1】:

    您可以使用以下方法避免循环:

     $( "#" +idArray.join( ",#") ).addClass("someclass");
    

    选择器会这样解析:

    "#" +["asd","dasd","daa"].join( ",#") 
    //"#asd,#dasd,#daa"
    

    【讨论】:

      【解决方案2】:

      选项 1 应该更快。但是,如果这些都是一个父级的所有子级,则将类添加到父级可能是个好主意。

      【讨论】:

      • 是的,这是个好主意,在我的情况下,li 是父级,所以我在那里添加了类。谢谢
      猜你喜欢
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多