分离第一个json元素并附加到不同的div?

Posted

技术标签:

【中文标题】分离第一个json元素并附加到不同的div?【英文标题】:detach first json element and append to a different div? 【发布时间】:2011-12-08 18:13:39 【问题描述】:

json:


   "storeList":
      "state":[
         
            "stateName":"Maine",
            "store":[
               
                  "storeName":"Store 1",
                  "storeID":"store1",
                  "storeURL":"http:\/\/www.sitename.com"
               ,
               
                  "storeName":"Store 2",
                  "storeID":"store2",
                  "storeURL":"http:\/\/www.sitename.com"
               ,
               
                  "storeName":"Store 3",
                  "storeID":"store3",
                  "storeURL":"http:\/\/www.sitename.com"
               
            ]
         ,
         
            "stateName":"Connecticut",
            "store":[
               
                  "storeName":"Store 1",
                  "storeID":"store1",
                  "storeURL":"http:\/\/www.sitename.com"
               
            ]
         
      ]
   

以及我在页面上呈现的功能:

$(document).ready(function() 
                    var object;
                    $.getJSON('xml/storeList.json', function(json) 
                        object = json;
                        $('#storeList').append('<ul/>')
                        $.each(object.storeList.state, function() 
                        var list = $('#storeList ul'),
                            listItem = $('<li/>'),
                            html = listItem.append($('<h3/>').text(this.stateName));

                        $.each(this.store, function() 
                            listItem.append($('<a />').attr('href', this.storeURL).text(this.storeName));
                        );

                        list.append(html)
                        );
                    );

                    );

我想获取第一个“状态”对象并将其附加到与其他 div 不同的 div 中。 谢谢!我意识到 json 是一个数组,但我不确定 json 中的定位是如何工作的。

【问题讨论】:

【参考方案1】:

你的问题标题说你想分离第一个元素。为此,您可以使用拼接:

   $.getJSON('xml/storeList.json', function(json) 
       object = json;

       var firstState = object.storeList.state.splice(0, 1)[0];
       //first state has been removed from the array and can be added anywhere

       $.each(object.storeList.state, function() 
          //each will now iterate over the remaining elements 
       );
   );

或者,如果你不想删除它,你可以直接使用它,然后用老式的非 jQuery for 循环来循环剩余的项目:

   $.getJSON('xml/storeList.json', function(json) 
       object = json;
       var currentState;

       var firstState = object.storeList.state[0];

       for(var i = 1; i < object.storeList.state.length; i++) 
          currentState = object.storeList.state[i];
       );
   );

【讨论】:

【参考方案2】:

可以直接从$.each函数中获取当前值的索引。

$.each(object.storeList.state, function(index, value) 
  var div;
  if(index == 0) 
    div = $('#firstItemDiv');
   else 
    div = $('#otherItemsDiv');
  
  div.append(...);
);

【讨论】:

以上是关于分离第一个json元素并附加到不同的div?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript嵌套元素循环并附加bug?

为啥bash只将第一个元素附加到数组

使用来自 JSON 的数据创建和附加多个元素

仅附加 4 个 div,其余 div 在另一部分中

无法在不同的 div 中填充列表元素

如何将列表元素的 ID 值附加到带有 .json 的链接?