jquery $ .each和.html()只显示1行

时间:2014-06-08 09:07:58

标签: jquery

在客户端和服务器端使用socket.io。一切都在那里运作良好,除了$ .each,它只显示表中的一行。

代码:

    $('#roll').click(function(e) {
        e.preventDefault();

        socket.emit('roll', {amount: $('#amount').val(), chance: $('#chance').val()});

        socket.on('roll', function(rolls) {
            $.each(rolls, function(index, roll) {
                $('#rolls').html('<tr><td> ' + roll.id + '</td><td> ' + roll.amount + '</td><td> ' + roll.chance + '</td><td> ' + roll.result + '</td><td> ' + roll.number + '</td></tr>');
            });
        });

    });

1 个答案:

答案 0 :(得分:1)

$(&#39;#rolls&#39;)的innerHTML已在您的每个iternation中被替换,这是因为调用.html将替换所有内容。

引用jQuery:http://api.jquery.com/html/#html2

  

当.html()用于设置元素的内容时,该元素中的任何内容都将被新内容完全替换。

因此,您必须将代码更改为...

$('#roll').click(function(e) {
    e.preventDefault();

    socket.emit('roll', {amount: $('#amount').val(), chance: $('#chance').val()});

    socket.on('roll', function(rolls) {
        var htmlContent = '';
        $.each(rolls, function(index, roll) {
            htmlContent += ('<tr><td> ' + roll.id + '</td><td> ' + roll.amount + '</td><td> ' + roll.chance + '</td><td> ' + roll.result + '</td><td> ' + roll.number + '</td></tr>');
        });
        $('#rolls').html(htmlContent);
    });

});