Как сделать каждый внутри каждого в JQuery? - PullRequest
0 голосов
/ 21 марта 2012

У меня есть этот объект 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 Ответ

4 голосов
/ 21 марта 2012

Возможно, просто 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));
        });
    }
});

Рабочий пример:

...