如何在jquery中的每个内部做一个?

时间:2012-03-20 23:13:50

标签: jquery replace iteration each jquery-templates

我有这个json对象:

{
"msg_id":"134",
"message":"Dick",
"comment":[
    {
    "com_id":"9",
    "comment":"test",
    "msg_id":"134",
    },
    {
    "com_id":"10",
    "comment":"testtt",
    "msg_id":"134",
    },
    {
    "com_id":"11",
    "comment":"testtttt",
    "msg_id":"134",
    }]
},
{
"msg_id":"134",
"message":"Dick",
},
{
"msg_id":"134",
"message":"Dick",
}

我正在尝试两次迭代它。一次为主json对象,然后为comment对象。

我试过了:

$.each(data, function(index, obj){
    msg += template.replace( /{{message}}/ig  , obj.message )
                   .replace( /{{msg_id}}/ig   , obj.msg_id );

    $.each(obj.comment, function(key, val){
            msg += template.replace( /{{comment}}/ig , val.comment )
                   .replace( /{{com_id}}/ig , val.com_id )
                   .replace( /{{msg_id}}/ig , val.msg_id );           
    });   
});

如果我这样做,我会得到a is undefined jquery.js line 2。也许我需要为第二个循环创建另一个函数。

1 个答案:

答案 0 :(得分:4)

可能只是obj.comment未定义(请注意,您在最后两条消息中没有任何评论),请添加:

if(obj.comment) {
}

围绕内部.each调用,即使它像这样:

$.each(messages, function(i, msg) {
    if(msg.comment) {
        $.each(msg.comment, function(i, comment) {
            $('#log').append($('<div>').text(comment.comment));
        });
    }
});

工作示例: