动态嵌套标签创建

时间:2018-04-05 13:32:05

标签: javascript jquery jquery-ui tabs

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

$(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>

OUTPUT enter image description here

我无法理解我在做什么。“财务”标签只有像Finance1这样的金融子,财务和销售标签只有SALE子标签。任何人都可以帮我确定我做错的问题。

2 个答案:

答案 0 :(得分:1)

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

您使用了错误的参数来比较Traceback (most recent call last): File "C:/collect_games.py", line 84, in <module> date_obj = datetime.strptime(loop_date, '%Y-%-m-%d') File "E:\Anaconda3\lib\_strptime.py", line 565, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "E:\Anaconda3\lib\_strptime.py", line 354, in _strptime (bad_directive, format)) from None ValueError: '#' is a bad directive in format '%Y-%#m#%d' 而不是data1[i]。这也会造成错误的href

您需要将所有数据附加到data1[i][0]。不要使用dyn_div,这将获得附加项而不是当前项。

$(.p).append

答案 1 :(得分:0)

虽然这可能不是100%有效的解决方案,但我相信您的主要错误是$(".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");