如何在javascript中用for循环替换.each()

时间:2017-03-13 21:54:05

标签: javascript

我想替换我的

$("p").each(function(i) 

for (var i = 0, len =  $('p').length; i < len; i++) {
    $('p')[i]; 
}

以获得更快的性能。我想保持相同的switch语句。我该怎么做?我是javascript的新手,而且我的switch语句也不长,但我缩短了它,所以你们可以更好地看到它。我的问题是$(这个)。提前谢谢。

 for (var i = 0, len =  $("p").length; i < len; i++) {
    $("p")[i]; 
 }




$("p").each(function(i) {
  switch(window.localStorage['kgenfavred' + i])
        {
    case 'yred':
          $(this).addClass("favoritesred");  
          $(this).removeClass("favoritesyellow");
        break;
      }
   });

3 个答案:

答案 0 :(得分:2)

这样的事可能(未经测试):

var paragraphs = document.getElementsByTagName('p');
for (var p = 0; p < paragraphs.length; p++) {
    switch(window.localStorage['kgenfavred' + p]) {
        case 'yred':
            paragraphs[p].classList.add('favoritesred');
            paragraphs[p].classList.remove('favoritesyellow');
            break;
    }
}

JSFiddle example

答案 1 :(得分:1)

您当前的方法可能会变慢,因为您在每次迭代时都添加了DOM查找。如果你真的想转换为for循环,首先捕获你的元素集,然后迭代它 - 用.eq(index)访问当前元素:

var $p = $('p');
for (var i = 0, len = $p.length; i < len; i++) {
    // get jquery element
    console.log($p.eq(i)); 
    // or get DOM node
    console.log($p.get(i));
}

正如@Kinduser指出的那样,将jQuery完全从图片中删除可能是最快/最简单的:

var p = document.querySelectorAll('p');
for (var i = 0; i < p.length; i++) {
   console.log(p[i]);
}

或更新:

document.querySelectorAll('p').forEach((element) => {
    console.log(element);
});

答案 2 :(得分:0)

这是不正确的。你可以使用jQuery的.each()方法:

  var $ps = $(document).find('p');
  for (var i=0; i<$ps.length; i++)
  {
      let temp = $ps[i];  /// this is a dom element and if you want use jQuery methods, you need to use a selector over it;
      let $temp = $(temp); /// this is jQuery element
      /// Do whatever you want here
  }