jstree-demo 单选,拖拽/获取节点路径/获取父节点id/搜索以及默认选中指定节点
官网地址:
https://www.jstree.com
/* 如果想在jstree渲染前修改数据请使用ajax原生dataFilter方法
注意此方法data返回字符串格式,使用时需转为可解析模式并在return时回转
例如: */
$('xx').jstree({
data:{
dataFilter:function(d){
d=$.parseJSON(d);
$.each(d,function(i,n){
n.state={selected: true}
})
return JSON.stringify(d);
}
}
})
//常用组件 :
"plugins" : [
"checkbox",//多选框
"contextmenu",//右键菜单
"dnd", //拖拽
"search", //搜索
"types", //设置节点类型
]
//详情请参照https://www.jstree.com/plugins/组件参考地址
//checkbox复选框插件:
$('#jstree').jstree({
"checkbox" : {
"three_state":false,
"cascade":'undetermined'
}
"plugins" : [ "checkbox" ]//启用多选框组件
})
/*
three_state 此属性选择是否级联,默认为true。
cascade 多个值,分别为:
undetermined 待定:当前节点选中时父节点为待定状态
up 向上级连: 当前节点选中时所有父节点为选中状态
down 向下级连: 当前节点作为父节点并且被选中时子节点全部选中
此处可关联使用 例如 "cascade":'up down undetermined'
*/
//contextmenu右键菜单插件:
$("#jstree").jstree({
"core" : {
"check_callback" : true //允许修改节点
},
"plugins" : [ "contextmenu" ]
});
//dnd拖拽组件:
$("#jstree").jstree({
"core" : {
"check_callback" : true //允许修改节点
},
"plugins" : [ "dnd" ]
});
//search搜索组件:
$("#plugins4").jstree({
"plugins" : [ "search" ]
});
var to = false;
$('搜索输入框').keyup(function () {
if(to) { clearTimeout(to); }
to = setTimeout(function () {
var v = $('#plugins4_q').val();
$('#jstree').jstree(true).search(v);
}, 250);
});
// types"设置节点类型
$("#jstree").jstree({
"types" : {
"default" : {
"icon" : "glyphicon glyphicon-flash"
},
"demo" : {
"icon" : "glyphicon glyphicon-ok"
}
},
"plugins" : [ "types" ]
});
<div id="jstree2" class="all_box">
<ul>
<li id="01" class="jstree-open">Admin theme
<ul>
<li id="a12" data-jstree='{"icon":"tedufont tedu-icon81"}'>css
<ul>
<li id="a121" data-jstree='{"icon":"tedufont tedu-icon81"}'>
animate.css
</li>
<li id="0a2" data-jstree='{"icon":"tedufont tedu-icon81"}'>
bootstrap.css
</li>
<li id="0a3" data-jstree='{"icon":"tedufont tedu-icon81"}'>
style.css
</li>
</ul>
</li>
<li id="0b" data-jstree='{"icon":"tedufont tedu-icon81"}'>email-templates
<ul>
<li id="0b1" data-jstree='{"icon":"tedufont tedu-icon81"}'>action.html</li>
<li id="0b2" data-jstree='{"icon":"tedufont tedu-icon81"}'>alert.html</li>
<li id="0b3" data-jstree='{"icon":"tedufont tedu-icon81"}'>billing.html</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<script src="js/jquery-2.1.1.js"></script>
<script src="js/jstree.min.js"></script>
$('#jstree1').jstree()//初始化组件
.on("ready.jstree", function () {//组件初始化完成事件
var ref = $('#jstree1').jstree(true);
ref.select_node(['a1'],true,false);//tree加载完之后让id为a1节点选中
});
/*
select_node(obj, boolean, boolean)
obj 数组,可选多个节点['a1','a2'],
supress_event Boolean TRUE;不会触发`changed.jstree`事件
prevent_open Boolean true'选定节点的的父节点不会打开
*/
组件 <link href="../css/plugins/jsTree/style.min.css" rel="stylesheet">
<div id="jstree2">
<ul>
<li id="q" class="jstree-open">Admin theme
<ul>
<li id="q0" data-jstree='{"icon":"tedufont tedu-icon81"}'>css
<ul>
<li id="q00" data-jstree='{"icon":"tedufont tedu-icon81"}'>
animate.css
</li>
<li id="q01" data-jstree='{"icon":"tedufont tedu-icon81"}'>
bootstrap.css
</li>
<li id="q02" data-jstree='{"icon":"tedufont tedu-icon81"}'>
style.css
</li>
</ul>
</li>
<li id="q1" data-jstree='{"icon":"tedufont tedu-icon81"}'>email-templates
<ul>
<li id="q10" data-jstree='{"icon":"tedufont tedu-icon81"}'>action.html</li>
<li id="q11" data-jstree='{"icon":"tedufont tedu-icon81"}'>alert.html</li>
<li id="q12" data-jstree='{"icon":"tedufont tedu-icon81"}'>billing.html</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
//初始化完成指定选择节点 数据回显 模拟后台返回数据,需要此格式
var id_list =[
{
id:'q02',
pid:'q0'
},
{
id:'q0',
pid:'q'
},
{
id:'q',
pid:'#'
},
{
id:'q10',
pid:'q1'
},
{
id:'q11',
pid:'q1'
},
{
id:'q12',
pid:'q1'
},
{
id:'q1',
pid:'q'
},
{
id:'q',
pid:'#'
}
];
//通过此方法挑选需要的子类id
var pid_=[], id_=[];
$.each(id_list,function(i,n){
if($.inArray(n['pid'],pid_)==-1){
pid_.push(n['pid']);
}
});
$.each(id_list,function(i,n){
if($.inArray(n['id'],pid_)==-1){
id_.push(n['id']);
}
});
$('#jstree2').jstree({
"checkbox" : {
"three_state":true,//此属性选择是否级联,默认为true。
// "cascade":'down'//级联的方向 up down three_state设置为false可修改
},
"search":{
show_only_matches:true,//只显示搜索到的数据
show_only_matches_children:true, //是否可显示搜索到节点的子节点,默认为false不可显示
},
'plugins': ['checkbox', "search"]//search:搜索组件,checkbox:多选框
}).on("ready.jstree", function () {
var ref = $('#jstree2').jstree(true);
ref.select_node(id_, false, false);//tree加载完之后让id为a1节点选中,
});
$('#search_tree').click(function () {
if (to) {
clearTimeout(to);
}
to = setTimeout(function () {
var v = $('#plugins4_q').val();
$('#jstree2').jstree(true).search(v); //搜索
}, 250);
});
$('#get').click(function () {
var ref = $('#jstree2').jstree(true);
var sel = ref.get_selected(true);//获取选中的节点
$.each(sel, function (i,n) {
var path = [n.id].concat(n.parents);
alert("节点路径:" + path)
})
});
<link href="../css/plugins/jsTree/style.min.css" rel="stylesheet">
<div id="jstree3">
<ul>
<li id="z" class="jstree-open">Admin theme
<ul>
<li id="z1" data-jstree='{"icon":"tedufont tedu-icon81"}'>css
<ul>
<li id="z11" data-jstree='{"icon":"tedufont tedu-icon81"}'>
animate.css
</li>
<li id="z12" data-jstree='{"icon":"tedufont tedu-icon81"}'>
bootstrap.css
</li>
<li id="z13" data-jstree='{"icon":"tedufont tedu-icon81"}'>
style.css
</li>
</ul>
</li>
<li id="z2" data-jstree='{"icon":"tedufont tedu-icon81"}'>email-templates
<ul>
<li id="z21" data-jstree='{"icon":"tedufont tedu-icon81"}'>action.html</li>
<li id="z22" data-jstree='{"icon":"tedufont tedu-icon81"}'>alert.html</li>
<li id="z23" data-jstree='{"icon":"tedufont tedu-icon81"}'>billing.html</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
$(function () {
var i1, sel, ref;
function saveFun(obj, editNum) {
if (editNum == 0) {
ref.create_node(sel, {"icon": obj['icon'], "text": obj['text']});//创建节点
if (sel) {
ref.open_node(sel);
}
} else if (editNum == 1) {
ref.set_icon(sel, obj['icon']);//更改节点icon
ref.set_text(sel, obj['text']);//更改节点内容
}
}
var treeObjList = {
editFunc:function (tit, url_) {//重命名节点 tit:弹框标题,url,弹框路径.此处需要url透传数据
i1 = cumParentWinModal(tit, url_, {
"type": 2,
'area': ['380px', '240px']
})
},
create: function () {
sel = ref.get_selected(); //获取选中的节点ID;get_selected(true),获取选中的节点对象,返回OBJ(id,text...)
if (!sel.length) {
COM_TOOLS.alert(TEDU_MESSAGE.get('JTsel_node'));//请选择节点!
return false;
}
sel = sel[0];
treeObjList.editFunc(TEDU_MESSAGE.get('JTmo_tit'), ['add-icon.html?edit=0'])
},//'JTmo_tit':请输入图标及内容!
rename: function () {
sel = ref.get_selected();
if (!sel.length) {
COM_TOOLS.alert(TEDU_MESSAGE.get('JTsel_node'));//请选择节点!
return false;
}
sel = sel[0];
var iconRename = encodeURI($.trim(ref.get_icon(sel)));
var textRename = encodeURI($.trim(ref.get_text(sel)));
treeObjList.editFunc(TEDU_MESSAGE.get('JTr_tit'), ['add-icon.html?edit=1&nodeName=' + textRename + '&iconRename=' + iconRename])
},//'JTr_tit' 请修改图标及内容!
del: function () {
sel = ref.get_selected(true);
if (!sel.length) {
COM_TOOLS.alert(TEDU_MESSAGE.get('JTsel_node'));//请选择节点!
return false;
}
COM_TOOLS.confirm(TEDU_MESSAGE.get('delConfirm'), function(index){
cumCloseWin(index);
ref.delete_node(sel);
});
}
};
$('#jstree3').jstree({
'plugins': [''],//search:搜索组件,checkbox:多选框
'core': {
"multiple": false,//是否启用多选
'check_callback': true//是否允许修改节点
}
}).on('ready.jstree',function () {
ref = $('#jstree3').jstree(true);
});
$('#add').click(function () {
treeObjList.create()
});
$('#rename').click(function () {
treeObjList.rename()
});
$('#delete').click(function () {
treeObjList.del()
});
COM_TOOLS.private_obj_.saveFun = saveFun;
});
<link href="../css/plugins/jsTree/style.min.css" rel="stylesheet">
<div id="jstree4"> </div>
<script src="js/jquery-2.1.1.js"></script>
<script src="js/jstree.min.js"></script>
$(function () {
$('#jstree4').jstree({
"checkbox" : {
"three_state":false,//此属性选择是否级联,默认为true。
"cascade":'undetermined'//级联的方向 up 上级连 down下级联 undetermined 父节点待定状态
},
'core' : {
'data' : {
'url' : '/jstree6/api',
'data' : function (node) {
return { 'id' : node.id };
}
}
},
'plugins' : ['checkbox','wholerow']
});
});
<link href="../css/plugins/jsTree/style.min.css" rel="stylesheet">
// AJAX
$('#tree').jstree({
'core' : {
'data' : {
'url' : '/get/children/',
'data' : function (node) {
return { 'id' : node.id };
}
}
});
### ps
[
{ "text" : "ajax-Child 1","icon":"tedu tedu-icon85","children" : true},
{ "text" : "state-Child 2","icon":"tedu tedu-icon85", "children" : ["One more"] }
]
//静态 data #1:
$('#using_json').jstree({
'core' : {
'data' : [
{
'id' : 'node_2',
'text' : 'Root node with options',
'state' : { 'opened' : true, 'selected' : true },
'children' : [ { 'text' : 'Child 1' }, 'Child 2']
}
]
}
});
### PS:
{
id : "string" // will be autogenerated if omitted
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
children : [] // array of strings or objects
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
//静态 data #2:list child=> parent
$('#using_json_2').jstree({ 'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Simple root node" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
} });
### PS:
{
id : "string" // required
parent : "string" // required
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
<div id="jstree5"> </div>
<script src="js/jquery-2.1.1.js"></script>
<script src="js/jstree.min.js"></script>
$(function () {
var i1, ref,node_;
function saveFun(obj, editNum) {
$.ajax({
url:'jstree-demo.html',//后台保存数据路径
data:{icon:obj['icon'],text:obj['text']},
success:function (d) {
//...执行创建
//ref.refresh();//正式环境ajax返回成功后可直接刷新jstree 无需以下操作
if(d){
if (obj.editNum == 0) {
ref.create_node(node_, {"icon": obj['icon'], "text": obj['text']});
ref.open_node(node_);
} else if (obj.editNum == 1) {
ref.set_icon(node_, obj['icon']);//更改节点icon
ref.set_text(node_, obj['text']);//更改节点内容
}
}
}
})
}
var treeObjList = {
editFunc: function (tit, url_) {//重命名节点 tit:弹框标题,url,弹框路径.此处需要url透传数据
i1 = cumParentWinModal(tit, url_, {
"type": 2,
'area': ['380px', '240px']
})
},
create: function () {
if (!node_.length) {
COM_TOOLS.alert(TEDU_MESSAGE.get('JTsel_node'));
return false;
}
treeObjList.editFunc(TEDU_MESSAGE.get('JTmo_tit'), ['add-icon.html?edit=0'])
},
rename: function () {
if (!node_.length) {
COM_TOOLS.alert(TEDU_MESSAGE.get('JTsel_node'));
return false;
}
var iconRename = encodeURI($.trim(ref.get_icon(node_)));
var textRename = encodeURI($.trim(ref.get_text(node_)));
treeObjList.editFunc(TEDU_MESSAGE.get('JTr_tit'), ['add-icon.html?edit=1&nodeName=' + textRename + '&iconRename=' + iconRename])
},
del: function () {
if (!node_.length) {
COM_TOOLS.alert(TEDU_MESSAGE.get('JTsel_node'));
return false;
}
COM_TOOLS.confirm(TEDU_MESSAGE.get('delConfirm'), function (index) {
cumCloseWin(index);
ref.delete_node(node_);
});
}
};
$('#jstree5').jstree({
'core': {
"check_callback": true,
'data': {
'url' : '/jstree6/api',
'data': function (node) {
return {'id': node.id};
}
}
}, 'contextmenu': {
show_at_node: false,//指示菜单是否应该与节点对齐。默认为true,否则使用鼠标坐标
items: function (node) {
var temp = {
"add_c": {
"icon": 'glyphicon glyphicon-asterisk',
"label": TEDU_MESSAGE.get('JTaddn_node'),
"separator_after": true,//表示在此项之后是否应该有分隔符
"action": function (data) {
var pathL = node.parents.length;
alert("我是" + pathL + "级节点");
ref = $('#jstree5').jstree(true);
node_ = node.id;
treeObjList.create();
}
},
"add_b": {
"icon": 'glyphicon glyphicon-asterisk',
"label": TEDU_MESSAGE.get('JTaddb_node'),
"separator_after": true,//表示在此项之后是否应该有分隔符
"action": function (data) {
ref = $('#jstree5').jstree(true);
node_ = node.parents[0];
treeObjList.create();
}
},
"rename": {
"icon": 'glyphicon glyphicon-pencil',
"label": TEDU_MESSAGE.get('JTrename_node'),
"separator_after": true,//表示在此项之后是否应该有分隔符
"action": function (data) {
ref = $('#jstree5').jstree(true);
node_ = node.id;
treeObjList.rename();
}
},
"del": {
"icon": 'glyphicon glyphicon-remove',
"label": TEDU_MESSAGE.get('JTdel_node'),
"separator_after": true,//表示在此项之后是否应该有分隔符
"action": function (data) {
var typeid_ = node.li_attr.typeid;
var pathL = node.parents.length;
if (pathL < 2 || typeid_) {
COM_TOOLS.alert(TEDU_MESSAGE.get('JTr_notdel'));
return false;
}
ref = $('#jstree5').jstree(true);
node_ = node.id;
treeObjList.del();
}
}
}
return temp;
}
},
'plugins': ['wholerow', 'contextmenu', "search"]
});
var to_ = false;
$('#search2_tree').click(function () {
if (to_) {
clearTimeout(to_);
}
to_ = setTimeout(function () {
var v = $('#plugins4_q1').val();
$('#jstree5').jstree(true).search(v); //搜索
}, 250);
});
COM_TOOLS.private_obj_.saveFun = saveFun;
})
<link href="../css/plugins/jsTree/style.min.css" rel="stylesheet">
// AJAX
$('#tree').jstree({
'core' : {
'data' : {
'url' : '/get/children/',
'data' : function (node) {
return { 'id' : node.id };
}
}
});
### ps
[
{ "text" : "ajax-Child 1","icon":"tedu tedu-icon85","children" : true},
{ "text" : "state-Child 2","icon":"tedu tedu-icon85", "children" : ["One more"] }
]
//静态 data #1:
$('#using_json').jstree({
'core' : {
'data' : [
{
'id' : 'node_2',
'text' : 'Root node with options',
'state' : { 'opened' : true, 'selected' : true },
'children' : [ { 'text' : 'Child 1' }, 'Child 2']
}
]
}
});
### PS:
{
id : "string" // will be autogenerated if omitted
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
children : [] // array of strings or objects
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
//静态 data #2:list child=> parent
$('#using_json_2').jstree({ 'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Simple root node" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
} });
### PS:
{
id : "string" // required
parent : "string" // required
text : "string" // node text
icon : "string" // string for custom
state : {
opened : boolean // is the node open
disabled : boolean // is the node disabled
selected : boolean // is the node selected
},
li_attr : {} // attributes for the generated LI node
a_attr : {} // attributes for the generated A node
}
<div id="jstree6"> </div>
<script src="js/jquery-2.1.1.js"></script>
<script src="js/jstree.min.js"></script>
$(function(){
/*回显全路径数据*/
var IDS_ = [
['0_1','0_1_2','0_1_2_1','0_1_2_1_2'],
['0_1','0_1_2','0_1_2_1'],
['0_2','0_2_2','0_2_2_1']
];
$('#jstree6').jstree({
"checkbox": {
"three_state": false//此属性选择是否级联,默认为true。
},
'core': {
"check_callback": true,
'data':{
'url' : '/jstree6/api',
'data': function (node) {
return {'id': node.id};
}
}
},
"search":{
show_only_matches:true,//只显示搜索到的数据
show_only_matches_children:true, //是否可显示搜索到节点的子节点,默认为false不可显示
ajax:{
url:"/jstree6/searchapi"
}
},
debug:true,
'plugins': ['checkbox','search']//search:搜索组件,checkbox:多选框
}).on("ready.jstree", function (){
var ref = $(this).jstree(true);
var path_ids=[],
open_ids=[];
$.each(IDS_,function(i,n){
open_ids = open_ids.concat(n.slice(-1));
if(n.length>1){
path_ids = path_ids.concat(n.slice(0,-1));
}
});
ref.load_node(COM_TOOLS.arrayUniqueFn(path_ids),function(){
ref.select_node(COM_TOOLS.arrayUniqueFn(open_ids), true, false);
});
});
$('#demo6-inp1').keypress(function(){
$('#jstree6').jstree(true).search($(this).val());
});
});
<link href="../css/plugins/jsTree/style.min.css" rel="stylesheet">