Javascript For循环在Jquery中只运行一次

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

jQuery中的for循环只运行一次有问题。Users是一个包含4个项目的数组,对于每个项目,它应该将该项目作为列表元素附加到userList,userList是一个ul。它按预期追加数组中的第一个元素,但仅追加该元素。不确定为什么它没有在整个阵列中运行

$(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中是一个保留关键字,不应该用作变量名或键,这就是为什么它被引用的原因。这就是为什么我实际上分享了,为了从您那里学到一些东西: