关于bootstrap-treeview数型结构的转化及使用、增删改等操作

来源:互联网 发布:苹果mac系统os 编辑:程序博客网 时间:2024/06/07 20:57

首先,先要引入treeview的一些包,例如:

 1. ` <link rel="stylesheet" type="text/css" href="bootstrap-3.3.7-dist/css/bootstrap.css"/>` 2. `<link rel="stylesheet" type="text/css" href="css/bootstrap-treeview.css"/>  ` 3. `<script src="bootstrap-3.3.7-dist/js/jquery-1.10.2/jquery.js" type="text/javascript" charset="utf-8"></script>`4.`<script src="bootstrap-3.3.7-dist/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>`5.`<script src="js/bootstrap-treeview.js" type="text/javascript" charset="utf-8"></script>` 

需要注意的就是,引入的方式最好是在bootstrap.js引入完成之后在引入treeview;
然后就是的开始正式的操作;
html页面只需要写一个放入的容器就可以了:例如:

<div id="Tree"></div>

然后将树引入到这个id为Tree中即可
开始上js代码:

    $.ajax({                  type:"get",                url:"IndexTreeNode.json",                success:function(requert){                    init(requert)                }            });    function init(dear){        $('#Tree').treeview({            data: dear,            levels:1 , //默认显示子级的数量            collapseIcon:" glyphicon glyphicon-folder-open",  //收缩节点的图标            expandIcon:"glyphicon glyphicon-folder-close",    //展开节点的图标            showIcon: false,//是否显示图标            showCheckbox:true//是否显示多选框            });        }
到这里只是使用树的一些基本操作,

但是需要注意:如果按照这种方式敲出来后正常的话应该是可以出来的,但是需要注意的是,你的json文件的树名如果不是下图这种名称为数据的话,那数据是出不来的,如下:

[    {        "Review":"Parent1",        "nodes":[            {                "text":"Parent2",                "Review":[                    {                        "text":"Parent3"                    },                    {                        "text":"Parent3"                    }                ]            },            {                "Review":"Parent2",                "nodes":[                    {                        "text":"Parent3"                    },                    {                        "text":"Parent3"                    }                ]            },            {                "Review":"Parent2"            }        ]           }]
显示文本的名称和下一级的名称一定要是这个,因为treeview树只认识这种格式的写法。

还需要说明一点的是:不管是本地的树文件还是数据库的树文件,一定要通过ajax进行获取才能使用,当初我就犯了一个错误直接将本地的树文件写在了data中,导致引入失败,哈哈,毕竟还是新手,见笑了,


如果大家觉得麻烦当然还有简便一点的做法,那就是将文件进行转化,
转化的过程如下所示:

    var loopLevel = 0;            $.ajax({                  type:"get",                url:"TreeNode.json",                success:function(requert){                    var columnStructure = [{text: "Review", nodes: "nodes"},                     {text: "Review", nodes: "nodes"},{text: "Review", nodes: "nodes"}];                     //外来数据转化为treeView数据的转化结构----------**这里需要注意的是columnStructure 里面的text值,是树结构要显示的文字名称,例如:我的树结构名字为 “ Review ” 那么我columnStructure中text对应的值就是 “ Review ”;**------------------------------------------------------------------------                    obj2treeview(requert,columnStructure);//将外来数据转化为treeview数据                     function obj2treeview(resp,structure){                        var nodeArray = new Array();                              var i = 0;                                  for(i= 0;i<resp.length;i++){                                     var treeViewNodeObj;                                      var textStr = structure[loopLevel].text;                                      var nodeStr = structure[loopLevel].nodes;                                      var subNode;                                      if(resp[i][nodeStr] != undefined){                                          loopLevel++;                                          subNode = obj2treeview(resp[i][nodeStr],structure);                                          loopLevel--;                                      }                                      if(subNode != undefined){                                          treeViewNodeObj = {                                              text: resp[i][textStr],                                              nodes: subNode                                          };                                      }else{                                          treeViewNodeObj = {                                              text: resp[i][textStr]                                          };                                      }                                      nodeArray.push(treeViewNodeObj);                                  }                            init(nodeArray)                        return nodeArray                    }                }            });    function init(data){        $('#Tree').treeview({            data: data,            levels:1 , //默认显示子级的数量            collapseIcon:" glyphicon glyphicon-folder-open",  //收缩节点的图标            expandIcon:"glyphicon glyphicon-folder-close",    //展开节点的图标            showIcon: false,//是否显示图标            showCheckbox:true//是否显示多选框        });    }
将数据转化完成后就可以显示成下面这个样子了。

这里写图片描述

以上部分是关于树的转化和一些简单使用;
下面的是一些增删改的功能实现:
因为只是一些小功能所以说,我没有把样式写的很好,大家将就看一下,知道如何使用就好。
首先会在页面写三个按钮 如:
这里写图片描述
防止大家不知道每个功能代码是什么意思,所以我就把html代码也写上了

<!--树-->        <div id="Tree">        </div>        <!--功能按钮-->        <span class="BtnNew btn btn-default">新增</span>        <span class="BtnRemove btn btn-danger">删除</span>        <span class="BtnModification btn btn-primary" >修改</span>        <!--新增-->        <div class="modal fade" id="myNew" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">            <div class="modal-dialog">                <div class="modal-content">                    <div class="modal-header">                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>                        <h4 class="modal-title" id="myModalLabel">新增</h4>                    </div>                    <div class="modal-body">                        <form action="">                            <div class="row">                                <div class="col-lg-12">                                    <div class="form-group">                                        <span class="col-lg-2 text-right" style="margin-top: 5px;">名称</span>                                    <div class="col-lg-10">                                        <input type="text" class="form-control TextInput" />                                    </div>                                    </div>                                </div>                            </div>                        </form>                    </div>                    <div class="modal-footer">                        <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>                        <button type="button" class="btn btn-primary NewDetermine">确定</button>                    </div>                </div>                <!-- /.modal-content -->            </div>            <!-- /.modal -->        </div>        <!--编辑-->        <div class="modal fade" id="myModification" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">            <div class="modal-dialog">                <div class="modal-content">                    <div class="modal-header">                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>                        <h4 class="modal-title" id="myModalLabel">新增</h4>                    </div>                    <div class="modal-body">                        <form action="">                            <div class="row">                                <div class="col-lg-12">                                    <div class="form-group">                                        <span class="col-lg-2 text-right" style="margin-top: 5px;">名称</span>                                    <div class="col-lg-10">                                        <input type="text" class="form-control ModificationInput" />                                    </div>                                    </div>                                </div>                            </div>                        </form>                    </div>                    <div class="modal-footer">                        <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>                        <button type="button" class="btn btn-primary ModificationDetermine">确定</button>                    </div>                </div>                <!-- /.modal-content -->            </div>            <!-- /.modal -->        </div>

*除了这三个按钮我还写了两个bootstrap的模态框用于新增和修改时获取相应的值;
然后开始先写新增按钮的功能,*

    //新增 事件    //事件注册         function BindEvent()         {             //保存-新增             $(".NewDetermine").click(function () {                $('#myNew').modal('hide')//关闭新增输入窗口                    //静态添加节点                    var parentNode = $('#Tree').treeview('getSelected');//选中的行                    var node = {                        text: $('.TextInput').val()//获取新增内容;                    };                    $('#Tree').treeview('addNode', [node, parentNode]);//添加新增内容                });            }        //显示-新增        $(".BtnNew").click(function(){            var node = $('#Tree').treeview('getSelected');//选中的行            if (node.length == 0) { //当没有选中时的操作                alert("请选择节点")            }else{                $('#TextInput').val('');//让input清空                $('#myNew').modal('show');//显示新增输入窗口            }        });

需要注意的是一定要在init事件后再去调用方法BindEvent,不然是无法做到新增的,至于为什么我就不多说了,大家应该都知道的!
接下来的就是编辑功能了:

     //编辑    $(".BtnModification").click(function(){        var node= $('#Tree').treeview('getSelected');//选中的当前行        if(node == 0){//判断是否有选中节点            alert("请选择节点")        }else{            $("#myModification").modal("show");//弹出编辑窗口        }    })    //保存-编辑    $('.ModificationDetermine').click(function(){        $("#myModification").modal("hide");//关闭编辑窗口        var node = $('#Tree').treeview('getSelected');//选中的当前行        var newNode={            text:$('.ModificationInput').val()//获取编辑的文本        };        $('#Tree').treeview('updateNode', [ node, newNode]);//修改当前选中行的文本    });

最后是删除功能:

//删除    $(".BtnRemove").click(function(){        var node = $('#Tree').treeview('getSelected');//选中的当前行        if(node == 0){            alert("请选择节点")        }else{            $('#Tree').treeview('removeNode', [ node, { silent: true } ]);//删除当前选中的节点        }    })

删除功能很简单,也就没什么可说的了。


因为刚开始使用这个treeview插件的时候,可是研究了有一段时间呢!虽然看到网上有很多的例子,但是不管怎么试就是不对,后来发现原来是版本的更新,让一些功能进行了更改,然后呢就想贴出来看看能不能对大家有所帮助,也方便自己以后可以回顾;
好了需要说的就这么多,以上仅是本人在使用过程中的一点心得,希望能帮助到大家
如还有不明确的可以查阅官方文档:https://github.com/jonmiles/bootstrap-treeview
也可私信我一起交流心得

阅读全文
1 0