bootstrap-treeview


1,网址

  文档说明: https://www.npmjs.com/package/bootstrap-treeview

  Github  :  https://github.com/jonmiles/bootstrap-treeview

2,使用 


<link href="bootstrap.css" rel="stylesheet">
 

<script src="jquery.js">script>
<script src="bootstrap-treeview.js">script>

3,容器

<div id="categoryTree">div>

实例效果图

实例代码

var expandedNode=null;

$(function() {
    //
    searchCategoryNodes("");
});

function loadNode(data){
    var nodes = getNodeArray(data);
    for(var i = 0 ; i < nodes.length ; i++){
        $("#categoryTree").treeview("addNode", [expandedNode.nodeId, { node: nodes[i]}]);
    }
}

function initCategoryTree(data){
    var me = this;
    $('#categoryTree').treeview({
        levels : 1,
        color : "#515151",
        showBorder: false,
        data : getNodeArray(data),
        onhoverColor:"#EDEDED",
        onNodeSelected:function(event,data){
            
        },
        onNodeExpanded:function(event,data){

            if(data.nodes.length>0){ // 如果存在子节点,删除重新查询
                $("#categoryTree").treeview("deleteChildrenNode", data.nodeId);
            }
            me.expandedNode = data;
            var nodeId = data.nodeRef.replace("workspace://SpacesStore/","");
            alert(data.path);
            me.searchCategoryNodes(data.path);
        },
        onNodeCollapsed:function(event,data){
            
        }
    });
}

function searchCategoryNodes(path){
    
    var me = this;
    $.ajax({
        url:getBasePath()+"/file/searchCategoryNodes",
        type:'POST', //GET
        //async:true,    //或false,是否异步
        data:{
            path:path
        },
        //contentType: "application/json",
        dataType:'json',    //返回的数据格式:json/xml/html/script/jsonp/text
        success:function(data,textStatus,jqXHR){
            if(path == ""){
                initCategoryTree(data);
            }else{
                loadNode(data);
            }
        },
        error:function(xhr,textStatus){
            //error
        },
    });    
}

function getNodePath(nodeName){
    var path = "";
    if (this.expandedNode != null) {
        path = this.expandedNode.path +"/"+nodeName;
    }else{
        path = nodeName;
    }
    return path;
}
function getNodeArray(data){
    
    var array = new Array(),node;
    for (var i = 0; i < data.length; i++) {
        
        var path = getNodePath(data[i].path);
        
        node = {
            nodeRef:data[i].nodeRef,
            text : data[i].name,
            path :getNodePath(data[i].name),
            expandIcon:"glyphicon glyphicon-plus",
            collapseIcon:"glyphicon glyphicon-minus",
            /*"color":"red"*/
            nodes:[] //默认使节点都显示可expandicon,不设置为空。没有子节点不显示expandicon
            
        };
        array.push(node);
    }
    return array;
}
function getBasePath() {
    var location = (window.location + '').split('/');
    var basePath = location[0] + '//' + location[2] + '/' + location[3];
    return basePath;
}

bootstrap-treeview.js自定义addNode和deleteChildrenNode方法

1,Tree主函数return添加以下代码;

// add and delete Children Node
addNode : $.proxy(this.addNode, this),
deleteChildrenNode : $.proxy(this.deleteChildrenNode, this),

2,添加Tree的prototype方法

/**
 * 给节点添加子节点
 * 
 * @param {Object|Number}
 *            identifiers - A valid node, node id or array of node
 *            identifiers
 * @param {optional
 *            Object} options.node;
 */
Tree.prototype.addNode = function(identifiers, options) {

    this.forEachIdentifier(identifiers, options, $.proxy(
            function(node, options) {
                this.setAddNode(node, options);
            }, this));
    this.nodes = [];//重置nodes为空,避免重复数据添加。
    this.setInitialStates({
        nodes : this.tree
    }, 0);
    this.render();
}

/**
 * 添加子节点
 */
Tree.prototype.setAddNode = function(node, options) {
    if (node.nodes == null)
        node.nodes = [];
    if (options.node) {
        node.nodes.push(options.node);
    }
    ;
};

/**
 * 删除子节点 置空子节点 刷新节点
 * 
 * @param node
 * @param options
 */
Tree.prototype.deleteChildrenNode = function(identifiers, options) {
    this.forEachIdentifier(identifiers, options, $.proxy(
            function(node, options) {
                if (node.nodes != null) {
                    node.nodes = null;
                    this.setInitialStates({
                        nodes : this.tree
                    }, 0);
                    this.render();
                }
            }, this));
};