如何将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
each()更快/更有效
$('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是误导性的。如果你真的对循环效率感兴趣,请看这里。afor
循环更快,但请注意,如果你在循环中所做的事情涉及回调函数,需要稍后使用循环索引变量,那么你需要引入闭包,然后uld(或多或少)抵消了效率增益。