Javascript For循环在Jquery中只运行一次
jQuery中的for循环只运行一次有问题。Users是一个包含4个项目的数组,对于每个项目,它应该将该项目作为列表元素附加到userList,userList是一个ul。它按预期追加数组中的第一个元素,但仅追加该元素。不确定为什么它没有在整个阵列中运行Javascript For循环在Jquery中只运行一次,javascript,jquery,Javascript,Jquery,jQuery中的for循环只运行一次有问题。Users是一个包含4个项目的数组,对于每个项目,它应该将该项目作为列表元素附加到userList,userList是一个ul。它按预期追加数组中的第一个元素,但仅追加该元素。不确定为什么它没有在整个阵列中运行 $(document).ready(function() { var $currentUser = $('<li class="user"></li>'); for(var i = 0; i < u
$(document).ready(function() {
var $currentUser = $('<li class="user"></li>');
for(var i = 0; i < users.length; i++) {
$currentUser.text(users[i]);
$currentUser.appendTo('.userList');
}
//alert(users.length) returns "4".
});
.text将覆盖以前的文本,看起来您只有一个用户
试试这个
$(document).ready(function(){
for(var i = 0; i < users.length; i++) {
var $currentUser = $('<li class="user"></li>');
$currentUser.text(users[i]);
$currentUser.appendTo('.userList');
}
});
在循环外部创建li,然后尝试将同一元素的文本设置为每个用户,以便在每次迭代中覆盖它。您确定最后一个条目不是您看到的条目吗?试试这个
$(document).ready(function(){
for(var i = 0; i < users.length; i++) {
var $currentUser = $('<li class="user"></li>');
$currentUser.text(users[i]);
$currentUser.appendTo('.userList');
}
});
您正在覆盖元素,而不是为每个用户创建一个新元素。试试上面的代码。更多jQuery'ish
$('.userList').append(function() {
return $.map(users, function(user) {
return $('<li />', {
'class' : 'user',
text : user
})
});
});
您没有为每个迭代添加新的:
这里有一个可行的解决方案:
for (var i = 0; i < users.length; i++) {
$('<li class="user"></li>'
.text(users[i])
.appendTo('.userList');
}
不是每个用户创建一个元素,而是每次迭代都创建一个元素并覆盖其内容。OP尝试创建N个元素,但代码仍会创建一个元素。使用此元素而不是代码或所有其他元素,这很难看,将初始设计决策与代码紧密结合,并且使将dom元素编写为字符串变得更难维护,使用上面adeneo所做的.map。刚发现这个类不必在引号内,而且works@erkaner-这是可行的,但class在javascript中是一个保留关键字,不应该用作变量名或键,这就是为什么它被引用的原因。这就是为什么我实际上分享了,为了从您那里学到一些东西: