我想替换我的
$("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;
}
});
答案 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;
}
}
答案 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
}