【问题标题】:How to do a each inside a each in jquery?如何在jquery中做一个每个里面的一个?
【发布时间】:2012-03-20 23:13:49
【问题描述】:

我有这个 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。也许我需要为第二个循环创建另一个函数。

【问题讨论】:

  • 请发布您的完整 JS 代码,特别是第 2 行 :)
  • 我认为有些 json 错误。您可以在 jsonlint.com 上查看错误
  • “我有这个 json 对象” 引用的文本无效 JSON。 JSON 必须有一个单个 顶级对象(对象{...};或数组[...])。这可能与您遇到的麻烦有关。如果开头有[,结尾有],那么您引用的内容将是有效的。 jsonlint 是验证 JSON 的便捷位置,这通常是诊断此类问题的第一步。 :-)
  • json 验证正常。我相信我执行每个循环的方式可能不正确。
  • “我发现你没有 Caps 令人不安。” - 达斯维达。

标签: jquery replace iteration each jquery-templates


【解决方案1】:

可能只是 obj.comment 未定义(请注意,最后两条消息中没有任何 cmets),添加以下内容:

if(obj.comment) {
}

围绕内部.each 调用,即使其如下所示:

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

工作示例:

【讨论】:

  • 是的,我好像忘记检查了。现在似乎可以工作了。
猜你喜欢
  • 2014-02-18
  • 2015-03-15
  • 2012-10-06
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
相关资源
最近更新 更多