Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将jQuery each()转换为常规javascript循环_Javascript_Loops_Jquery - Fatal编程技术网

如何将jQuery each()转换为常规javascript循环

如何将jQuery each()转换为常规javascript循环,javascript,loops,jquery,Javascript,Loops,Jquery,有几个问题: 常规javascript循环(通过一系列元素循环)是否比使用jQueryeach()更快/更有效 如果是这样,将以下代码编写为常规javascript循环的最佳方法是什么 $('div')。每个(function(){/…})是的,删除each()将使您的性能稍好一些。这就是如何为元素列表编写for循环的方法 var divs = $('div'); for(var i = 0; i < divs.length; i++){ var thisDiv = divs[i

有几个问题:

  • 常规javascript循环(通过一系列元素循环)是否比使用jQuery
    each()更快/更有效

  • 如果是这样,将以下代码编写为常规javascript循环的最佳方法是什么


  • $('div')。每个(function(){/…})
    是的,删除
    each()
    将使您的性能稍好一些。这就是如何为元素列表编写for循环的方法

    var divs = $('div');
    
    for(var i = 0; i < divs.length; i++){
        var thisDiv = divs[i]; // element
    
        var $thisDiv = $(divs[i]); // jquery object
    
        // do stuff
    }
    
     const elems = document.querySelectorAll('.my-elements')
     const $elems = [].slice.call(elems)
     $elems.map( (elem) => { console.log(elem) })
    
    var divs=$('div');
    对于(变量i=0;i
    var divs=document.getElementsByTagName('div'),
    l=分段长度,i,cur;
    
    (i=0;i回答你的第二个问题,因为第一个问题已经得到了回答

    我对此也很感兴趣,我决定使用Gabe的例子对两者进行基准测试,以找出差异。答案是,在希望jQuery对象作为最终结果的情况下:

    它们的表现完全相同


    显然,Firefox实际上发现jQuery版本更快。

    而不是使用jQuery
    。each()

    您可以使用
    document.querySelectorAll()
    ,然后将HTMLCollection转换为JavaScript数组。然后您可以映射元素数组

    var divs = $('div');
    
    for(var i = 0; i < divs.length; i++){
        var thisDiv = divs[i]; // element
    
        var $thisDiv = $(divs[i]); // jquery object
    
        // do stuff
    }
    
     const elems = document.querySelectorAll('.my-elements')
     const $elems = [].slice.call(elems)
     $elems.map( (elem) => { console.log(elem) })
    

    为了回答问题的第一部分,是的,由于消除了一些开销,常规循环的效率会稍高一些。差别应该很小。
    divs[i]
    是jquery对象吗?例如,当我执行
    thisDiv.find('a')
    ,我得到一个错误…
    divs[i]
    不是jquery对象。您必须
    $(divs[i])
    在循环之外声明
    divs.length
    要快得多如果您在“在此处使用cur进行操作”中没有任何内容,只会快50倍部分。它更快,但在大方案中50x是误导性的。如果你真的对循环效率感兴趣,请看这里。a
    for
    循环更快,但请注意,如果你在循环中所做的事情涉及回调函数,需要稍后使用循环索引变量,那么你需要引入闭包,然后uld(或多或少)抵消了效率增益。