动态JSON树形菜单

所属分类:导航-文件树

 18387  56  查看评论 (8)
动态JSON树形菜单 ie兼容7

该插件修改本站以前的文件树插件,地址:http://www.jq22.com/jquery-info432( 这个插件提供了收缩功能,但是不能根据JSON生成模型 )上进行修改 

下载下来只需要解压即可运行 .

Json 格式类似这样( 完全可以根据自己的需要改 ): 

var json = [{
    "name": "中科慈航",
    "code": "ZKCH",
    "icon": "icon-th",
    "child": [{
        "name": "广州中科慈航",
        "icon": "icon-minus-sign",
        "code": "GZZKCH",
        "parentCode": "ZKCH",
        "child": [{
            "name": "广州中科慈航天河区分行",
            "code": "GZZKCHTQFH",
            "icon": "",
            "parentCode": "GZZKCH",
            "child": []
        }]
    },
    {
        "name": "北京中科慈航",
        "icon": "",
        "code": "BJZKCH",
        "parentCode": "ZKCH",
        "child": [{
            "name": "北京中科慈航中城区分行",
            "code": "BJZKCHZCFH",
            "icon": "",
            "parentCode": "BJZKCH",
            "child": []
        }]
    }]
},
{
    "name": "中科科技",
    "code": "ZKKJ",
    "icon": "icon-th",
    "child": [{
        "name": "广州中科科技",
        "code": "GZZKKJ",
        "icon": "icon-minus-sign",
        "parentCode": "ZKKJ",
        "child": [{
            "name": "广州天河中科科技",
            "code": "GZTHZKKJ",
            "icon": "",
            "parentCode": "GZZKKJ",
            "child": []
        }]
    }]
}];

JS:

function tree(data) {
    for (var i = 0; i < data.length; i++) {
        var data2 = data[i];
        if (data[i].icon == "icon-th") {
            $("#rootUL").append("<li data-name='" + data[i].code + "'><span><i class='" + data[i].icon + "'></i> " + data[i].name + "</span></li>");
        } else {
            var children = $("li[data-name='" + data[i].parentCode + "']").children("ul");
            if (children.length == 0) {
                $("li[data-name='" + data[i].parentCode + "']").append("<ul></ul>")
            }
            $("li[data-name='" + data[i].parentCode + "'] > ul").append("<li data-name='" + data[i].code + "'>" + "<span>" + "<i class='" + data[i].icon + "'></i> " + data[i].name + "</span>" + "</li>")
        }
        for (var j = 0; j < data[i].child.length; j++) {
            var child = data[i].child[j];
            var children = $("li[data-name='" + child.parentCode + "']").children("ul");
            if (children.length == 0) {
                $("li[data-name='" + child.parentCode + "']").append("<ul></ul>")
            }
            $("li[data-name='" + child.parentCode + "'] > ul").append("<li data-name='" + child.code + "'>" + "<span>" + "<i class='" + child.icon + "'></i> " + child.name + "</span>" + "</li>") var child2 = data[i].child[j].child;
            tree(child2)
        }
        tree(data[i]);
    }
}
tree(json)

js和json只有 code 和 parentCode 是最重要的......是根据这两个属性来完成递归, 上面的方法也没有优化只是简单的实现 . 

这是搜索功能 : 

<script type="text/javascript">$(function() {
    $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', '关闭');
    $('.tree li.parent_li > span').on('click',
    function(e) {
      var children = $(this).parent('li.parent_li').find(' > ul > li');
      if (children.is(":visible")) {
        children.hide('fast');
        $(this).attr('title', '展开').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign');
      } else {
        children.show('fast');
        $(this).attr('title', '关闭').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign');
      }
      e.stopPropagation();
    });
  });</script>


相关插件-文件树

jQuery树型表格插件jQuery treetable

jQuery-treetable是一个jQuery插件。有了这个插件,你可以在一个HTML表格中显示树,即目录结构或嵌套列表。它使你的HTML文件干净的,展现出树状表格插件,你只需要每一行数据添加特定的数据属性。
  文件树
 5828  15

dtree权限控制复选框插件

dtree权限控制复选框插件
  文件树
 23797  130

jQuery文件树插件SimpleTree.js

jQuery文件树插件SimpleTree.js,代码少使用方便。
  文件树
 14077  41

树控件

非常简单的树控件,代码中注释说明很详细,方便大家修改。
  文件树
 19815  37

讨论这个项目(8)回答他人问题或分享插件使用方法奖励jQ币

    hl540 0
    2017/7/3 19:23:29

    数据大了怎么办,还是动态加载好

    ,这个需要优化

    回复
    信念 0
    2017/7/1 15:40:11
    怎么默认全部节点都关闭 回复
    isl8 0
    2016/12/1 14:12:27
    四层就不好使了 ```
        ┮未知0
        2017/7/1 12:57:57

        尴尬症发作。。。哈哈。试了一下直接加child,的确是不好使。

        bloodyrabbit0
        2017/9/26 11:15:55

        试了下能用啊  改一下parentCode里的参数

        落幕的繁华0
        2017/11/19 13:09:35

        怎么改啊

    回复
    小海豚悲催的死去 0
    2016/10/4 16:10:00
    function tree(data, dom) {
        for (var i = 0; i < data.length; i++) {
            var li = $("<li></li>");
            var span = $("<div> <i class='fa fa-minus-square'></i>  " +
                data[i].name + "</div>");
            if (data[i].children.length == 0) {
                span = $("<div>" + data[i].name + "</div>");
            }
            dom.append(li);
            $(li).append(span);
            var ul = $("<ul></ul>");
            $(li).append(ul);
            tree(data[i].children, $(ul));
        }
    };
        微风浮尘0
        2016/12/6 11:12:01
        dom是什么参数
    回复
取消回复