无法正确地将JSON加载到Bootstrap选项卡

时间:2017-04-06 16:20:40

标签: jquery json twitter-bootstrap twitter-bootstrap-3 bootstrap-tabs

我正在尝试像下面的代码一样动态地将JSON数据加载到Bootstrap 3 Tab中。我可以加载nav-tabs但在加载内容时没有任何成功。你能看一下这个,让我知道如何解决它吗?



   var data = {
        "action":
            [
                { "id": "1001", "name": "Matrix" },
                { "id": "1002", "name": "IP Man" },
                { "id": "1003", "name": "Revenge" }
            ],
        "comedy":
            [
                { "id": "2001", "type": "Iceman" },
                { "id": "2002", "type": "Pat & Mat" },
                { "id": "2003", "type": "Sugar" }
                 ],
        "animation":
            [
                { "id": "3001", "type": "Frozen" },
                { "id": "3002", "type": "Tangled" },
                { "id": "3003", "type": "Croods" }
                 ]
    
    };
    
    for (var i in data) {
      $('.nav-tabs').append('<li role="presentation" class=""><a href="#' + i + '" aria-controls="' + i + '" role="tab" data-toggle="tab">' + i + '</a></li>');
    
    }
      for (var j = 0; j < data[i].length; j++) {
        var obj = data[i][j];
        $('.tab-content').append('<div role="tabpanel" class="tab-pane" id="' + obj.name + '">' + obj.name + '</div>');
     }


$('.nav-tabs li').eq(0).addClass('active');
&#13;
body{padding:30px;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="container">
  <ul class="nav nav-tabs" role="tablist"></ul>
  <div class="tab-content"></div>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

You have a couple of logic and typo errors in your code. Below working version.

Typo: in "action" you tape parameter name but in other two parameter name is a type.

Logic: 1. Using .append cause closing HTML element, so you need to build a full string and then append. 2. You have to close parent for-loop after the second loop, otherwise, you always have only one tab.

var data = {
        "action":
            [
                { "id": "1001", "type": "Matrix" },
                { "id": "1002", "type": "IP Man" },
                { "id": "1003", "type": "Revenge" }
            ],
        "comedy":
            [
                { "id": "2001", "type": "Iceman" },
                { "id": "2002", "type": "Pat & Mat" },
                { "id": "2003", "type": "Sugar" }
                 ],
        "animation":
            [
                { "id": "3001", "type": "Frozen" },
                { "id": "3002", "type": "Tangled" },
                { "id": "3003", "type": "Croods" }
                 ]
    
    };
    
    for (var i in data) {
      $('.nav-tabs').append('<li role="presentation" class=""><a href="#' + i + '" aria-controls="' + i + '" role="tab" data-toggle="tab">' + i + '</a></li>');
    
      var div = '<div role="tabpanel" class="tab-pane" id="' + i + '">';
      
      for (var j = 0; j < data[i].length; j++) {
        var obj = data[i][j];
        div += '<div id="' + obj.id + '">' + obj.type + '</div>';
     }
     $('.tab-content').append(div);
}

$('.nav-tabs li').eq(0).addClass('active');
$('.tab-content div').eq(0).addClass('active');
body{padding:30px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="container">
  <ul class="nav nav-tabs" role="tablist"></ul>
  <div class="tab-content"></div>
</div>

答案 1 :(得分:0)

var data = {
        "action":
            [
                { "id": "1001", "type": "Matrix" },
                { "id": "1002", "type": "IP Man" },
                { "id": "1003", "type": "Revenge" }
            ],
        "comedy":
            [
                { "id": "2001", "type": "Iceman" },
                { "id": "2002", "type": "Pat & Mat" },
                { "id": "2003", "type": "Sugar" }
                 ],
        "animation":
            [
                { "id": "3001", "type": "Frozen" },
                { "id": "3002", "type": "Tangled" },
                { "id": "3003", "type": "Croods" }
                 ]
    
    };
    
    for (var i in data) {
      $('.nav-tabs').append('<li role="presentation" class=""><a href="#' + i + '" aria-controls="' + i + '" role="tab" data-toggle="tab">' + i + '</a></li>');
    
      var div = '<div role="tabpanel" class="tab-pane" id="' + i + '">';
      
      for (var j = 0; j < data[i].length; j++) {
        var obj = data[i][j];
        div += '<div id="' + obj.id + '">' + obj.type + '</div>';
     }
     $('.tab-content').append(div);
}

$('.nav-tabs li').eq(0).addClass('active');
$('.tab-content div').eq(0).addClass('active');
body{padding:30px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="container">
  <ul class="nav nav-tabs" role="tablist"></ul>
  <div class="tab-content"></div>
</div>