在循环中创建网页元素的问题

for (var i = 0; i < json.length; i++) {
    var topic = json[i];
    var btn = $('<button>');
    btn.addClass('btn btn-primary');
    btn.attr('type', 'button');
    btn.html(topic.topicComment);
    $.getJSON('action.action', {
        topicId : topic.p2pTopicId
    }, function(res) {
        var jsn = $.parseJSON(res);
        var cnt = parseInt(jsn);
        if (cnt > 0) {
            btn.removeClass('btn-default').addClass('btn-primary');
        } else {
            btn.removeClass('btn-primary').addClass('btn-default');
        }
    });
    $('#hrAfterBtn').before(btn);
}

这样创建是有问题的,其中的$.getJSON会在所有的循环都结束之后才调用,

这样其中的btn对象就是循环结束之后的最后的那个btn对象;

需要将其中的创建过程提炼成一个函数:

for (var i = 0; i < json.length; i++) {
    var topic = json[i];
    createMsgButton(topic);
}
function createMsgButton(topic) {
    var btn = $('<button>');
    //...   
}
原文地址:https://www.cnblogs.com/stono/p/4271484.html