Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Json:如果类别id与父类别号匹配,则将类别置于第二个父类别下_Javascript_Jquery_Json - Fatal编程技术网

Javascript Json:如果类别id与父类别号匹配,则将类别置于第二个父类别下

Javascript Json:如果类别id与父类别号匹配,则将类别置于第二个父类别下,javascript,jquery,json,Javascript,Jquery,Json,我想将子类别放在父类别下,如果父类别id与父类别匹配,我想显示在父类别下。如果您在下面查看,您将看到类别id#1是父类别,子类别的值为“parent:1”。我希望这是有意义的,如果你需要我让我知道 jquery代码: // get categories lists function listCategories(data) { "use strict"; var output = '<ul data-role="listview" data-inset="true" >';

我想将子类别放在父类别下,如果父类别id与父类别匹配,我想显示在父类别下。如果您在下面查看,您将看到类别id#1是父类别,子类别的值为“parent:1”。我希望这是有意义的,如果你需要我让我知道

jquery代码:

// get categories lists
function listCategories(data) {
  "use strict";
  var output = '<ul data-role="listview"  data-inset="true" >';
  $.each(data.categories, function(key, val) {
    if (val.id == val.parent) {

        output += '<li><a href="#'+ val.slug + '">' + val.title + '+</a></li>';
    }else if (val.id !== val.parent) {

  output += '<li><a href="#'+ val.slug + '">' + val.title + '-</a></li>';
    }

  }); //go through each list item
  output += '</ul>';
  $('#postlist').html(output);

}

一个简单的方法是在将
li
元素添加到dom之后对它们重新排序

//获取类别列表
函数列表类别(数据){
“严格使用”;
变量输出='
    ; $.each(数据、类别、功能(键、值){ 输出+='
  • ; });//浏览每个列表项 输出+='
'; var$ul=$(输出); $ul.children(){ var parent=$(this.data('parent'); var$li=$ul.find('li[data id=“”+parent+“]”); 如果($li.长度){ var$cul=$li.find('ul'); 如果(!$cul.length){ $cul=$('
    ')。附录($li); } $cul.append(本) } }); $ul.find('li:has(ul)>a').contents().unwrap(); $('#postlist').html($ul); } 风险值数据={ “状态”:“确定”, “计数”:7, “类别”:[{ “id”:4, “slug”:“所有符合条件的退休计划”, “标题”:“所有合格退休计划”, “说明”:“, “家长”:1, “后计数”:4 }, { “id”:5, “slug”:“固定收益db计划”, “标题”:“固定收益(DB)计划”, “说明”:“, “家长”:1, “post_count”:2 }, { “id”:6, “slug”:“固定缴款和混合计划”, “标题”:“固定缴款和混合计划”, “说明”:“, “家长”:1, “后计数”:6 }, { “id”:7, “slug”:“fica ss医疗保险税”, “标题”:“FICA-党卫军和医疗保险税”, “说明”:“, “父项”:0, “后计数”:4 }, { “id”:2, “slug”:“医疗保健计划”, “标题”:“医疗保健计划”, “说明”:“, “父项”:0, “后计数”:5 }, { “id”:3, “slug”:“其他好处”, “职务”:“其他福利”, “说明”:“, “父项”:0, “后计数”:3 }, { “id”:1, “slug”:“退休计划”, “标题”:“退休计划”, “说明”:“, “父项”:0, “后计数”:13 }] }; 列表类别(数据)

我能想到的最干净的方法是():

首先映射父子关系。然后以递归方式打印要显示的树。这甚至可以在树中启用更多级别。它不会添加超过需要的DOM操作

function listCategories(data) {
  "use strict";
  var output = '<ul data-role="listview"  data-inset="true" >';
  var children = {};
  var dataById = {};

  // Map parent-children relations
  $.each(data.categories, function(key, val) {
    (children[val.parent] = children[val.parent] || []).push(val.id);
    dataById[val.id] = val;
  });

  // Work recursive through the tree 
  var printRecursive = function(id) {
    var subs = "";
    $.each(children[id] || [], function(key, val) {
      subs += printRecursive(val);
    });
    if (dataById[id]) {
      var hasChildren = subs != "";
      var result = "<li>"
      if(hasChildren) {
        result += dataById[id].title;
        result += "<ul>" + subs + "</ul>";
      } else {
        result += '<a href="#' + dataById[id].slug + '">' + dataById[id].title + '</a>';
      }
      result += "</li>";
      return result;
    }

    return subs;
  };
  // Print tree with root 'id=0'
  $('#postlist').html('<ul data-role="listview"  data-inset="true" >' + printRecursive(0, 0) + '</ul');
}
函数列表类别(数据){
“严格使用”;
变量输出='
    ; var children={}; var-dataById={}; //映射父子关系 $.each(数据、类别、功能(键、值){ (children[val.parent]=children[val.parent]| |[]).push(val.id); dataById[val.id]=val; }); //在树中递归工作 var printRecursive=函数(id){ var subs=“”; $.each(子项[id]| |[],函数(键,val){ subs+=printRecursive(val); }); 如果(数据id[id]){ var haschilds=subs!=“”; var result=“
  • ” 如果(有孩子){ 结果+=dataById[id]。标题; 结果+=“
      ”+subs+“
    ”; }否则{ 结果+=''; } 结果+=“
  • ”; 返回结果; } 返回潜艇; }; //打印根为“id=0”的树
    $('#postlist').html('
      '+printRecursive(0,0)+'ReferenceError:找不到变量:getthis works,但有没有办法禁用它是否有子类别?如果它有子类别,则禁用父级This works,但如果它有子类别,则需要禁用标记categories@velvetInk禁用是什么意思?@velvetInk是否不希望在子类别中包含锚元素?如果父级具有子类别,则禁用该父级
      function listCategories(data) {
        "use strict";
        var output = '<ul data-role="listview"  data-inset="true" >';
        var children = {};
        var dataById = {};
      
        // Map parent-children relations
        $.each(data.categories, function(key, val) {
          (children[val.parent] = children[val.parent] || []).push(val.id);
          dataById[val.id] = val;
        });
      
        // Work recursive through the tree 
        var printRecursive = function(id) {
          var subs = "";
          $.each(children[id] || [], function(key, val) {
            subs += printRecursive(val);
          });
          if (dataById[id]) {
            var hasChildren = subs != "";
            var result = "<li>"
            if(hasChildren) {
              result += dataById[id].title;
              result += "<ul>" + subs + "</ul>";
            } else {
              result += '<a href="#' + dataById[id].slug + '">' + dataById[id].title + '</a>';
            }
            result += "</li>";
            return result;
          }
      
          return subs;
        };
        // Print tree with root 'id=0'
        $('#postlist').html('<ul data-role="listview"  data-inset="true" >' + printRecursive(0, 0) + '</ul');
      }