代码之家  ›  专栏  ›  技术社区  ›  monu

动态嵌套选项卡创建

  •  0
  • monu  · 技术社区  · 7 年前

    我正在尝试基于我的数据集实现动态嵌套选项卡。我能够成功实现父选项卡,但子选项卡有问题。 密码

    $(document).ready(function() {
    var data1 = [["FINANCE"],["SALE"],["SALE3"]];
    var data2=[["FINANCE","FINANCE1"],["FINANCE","FINANCE2"],["SALE","SALE1"],["SALE","SALE2"],["SALE","SALE3"],["SALE","SALE4"],["SALE3","NOSALE"]]
     var stringData = "";
    var dyn_div="";
    var dyn_ul="";
    var dyn_li='';
    for (var i = 0; i < data1.length; i++) {
      stringData = "<li><a data-toggle='tab'  href=#"+data1[i]+">"+data1[i]+"</a></li>"
      $(".list").append(stringData);
      $(".list li:first-child").addClass("active");
      dyn_div="<div class='tab-pane fade' id="+data1[i]+">'<ul class='p nav nav-tabs'>";
    for(var j=i;j< data2.length;j++)
    {    
          if(data2[j][0]==data1[i]){
    
            dyn_li= "<li><a data-toggle='tab'  href=#"+data2[j][1]+">"+data2[j][1]+"</a></li>" 
             $(".p").append(dyn_li);
           dyn_div +='</ul></div>';
              $(".tab-content").append(dyn_div);
              }
              else
              {
              dyn_li=''
               $(".p").append('');
              }
    
                 } 
     }
     $(".p li:first-child").addClass("active");
     $(".tab-content div.tab-pane:first-child").addClass("active in");
     })
    

    HTML代码

    <ul class="list nav nav-tabs"></ul>
    <div class="tab-content"></div>
    

    输出 enter image description here

    我无法理解我在做什么。“财务”选项卡只有“财务”子选项卡,如“财务1”,“财务和销售”选项卡只有“销售”子选项卡。有人能帮我找出我做错的地方吗。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Tan Duong    7 年前

    您需要格式化代码以便于阅读

    您使用了错误的参数进行比较 data1[i] 而不是 data1[i][0] 。犯错误的href也

    您需要将所有输入数据附加到 dyn_div 。不使用 $(.p).append ,将获取附加项而不是当前项。

    $(document).ready(function () {
        var data1 = [
            ["FINANCE"],
            ["SALE"],
            ["SALE3"]
        ];
        var data2 = [
            ["FINANCE", "FINANCE1"],
            ["FINANCE", "FINANCE2"],
            ["SALE", "SALE1"],
            ["SALE", "SALE2"],
            ["SALE", "SALE3"],
            ["SALE", "SALE4"],
            ["SALE3", "NOSALE"]
        ]
        var stringData = "";
        var dyn_ul = "";
        var dyn_li = '';
        var dyn_div = '';
        for (var i = 0; i < data1.length; i++) {
            stringData = $("<li><a data-toggle='tab'  href=#" + data1[i][0] + ">" + data1[i][0] + "</a></li>");
            $(".list").append(stringData);
            $(".list li:first-child").addClass("active");
            dyn_div = "<div class='tab-pane fade' id=" + data1[i][0] + "><ul class='p nav nav-tabs'>";
            for (var j = 0; j < data2.length; j++) {
                if (data2[j][0] === data1[i][0]) {
                    dyn_div += "<li><a data-toggle='tab'  href=#" + data2[j][1] + ">" + data2[j][1] + "</a></li>";
                }
            }
            dyn_div += '</ul></div>';
            $(".tab-content").append(dyn_div);
        }
        $(".p li:first-child").addClass("active");
        $(".tab-content div.tab-pane:first-child").addClass("active in");
    })
    
        2
  •  0
  •   Edwin Krause    7 年前

    虽然这可能不是一个百分之百有效的解决方案,但我相信您的主要错误是 $(".p").append(dyn_li); 因为在某些情况下,有多个元素具有类 p 这将使一切加倍。

    下面是我未经验证的粗略建议:

        var data1 = [["FINANCE"],["SALE"],["SALE3"]];
        var data2=[["FINANCE","FINANCE1"],["FINANCE","FINANCE2"],["SALE","SALE1"],["SALE","SALE2"],["SALE","SALE3"],["SALE","SALE4"],["SALE3","NOSALE"]]
        var stringData = "";
        var dyn_div="";
        var dyn_ul="";
        var dyn_li='';
        for (var i = 0; i < data1.length; i++) {
    
            stringData = "<li><a data-toggle='tab' href=#"+data1[i]+">"+data1[i]+"</a></li>"
            $(".list").append(stringData); // this element should also be addressed by an unique ID, but if there is only one element with that class, it's fine
            dyn_div="<div class='tab-pane fade' id="+data1[i]+">'<ul class='p nav nav-tabs'>";
            for(var j=i;j< data2.length;j++){    
              if(data2[j][0]==data1[i]){
                    dyn_li= "<li><a data-toggle='tab'  href=#"+data2[j][1]+">"+data2[j][1]+"</a></li>" 
                    $("#"+data1[i]).find('.p').first().append(dyn_li); // Here big change
                    dyn_div +='</ul></div>';
                    $(".tab-content").append(dyn_div); // this also needs to be a unique DOM element
                }
            } 
         }
         $(".p li:first-child").addClass("active");
         $(".tab-content div.tab-pane:first-child").addClass("active in");