1 核心文件
核心文件:
核心包 ( jquery.ztree.core-3.x.js )
两个扩展包:
复选框功能包 ( jquery.ztree.excheck-3.x.js )
编辑功能包 ( jquery.ztree.exedit-3.x.js )
合并包= 核心包 + 两个扩展包(jquery.ztree.all-3.x.js)
使用 zTree v3.x 时,核心包必须加载,扩展包根据需要进行加载;这种结构有利于今后不断开发 zTree 的各种辅助功能或工具,而不影响基本功能。
2 css文件
zTree v3.x 只使用一个 zTreeStyle.css 文件,为了尽量避免样式冲突,将 zTree 容器的 className 设置为 'ztree'
v3.x 中对于主要 DOM ( li、ul、+/-图标、a ) 的 className 增加了 level 输出,可以针对不同等级的节点设定独立的样式
3 img 图片
zTree v3.x 将主要图标都合并为一个图片,利用图片切割方式显示图标
4 zTree 数据
参考API treeNode对象的定义;
5 编写html页面
1) "" 是必需的!
2) zTree 的容器 className 别忘了设置为 "ztree"
3) 入门成功后,就可以按照顺序去看 Demo 了,直接看看源码,应该能看懂的
示例如下:
6 zTree 对 jQuery 的版本有要求吗?
基本来说没有要求,zTree 在开发中使用 jQuery 1.4.4;目前简单测试过 jQuery 1.3 ~ 1.6.1 应该都能正常使用,如果发现和 jQuery 的兼容问题,还请及时 Email: [email protected] 通知我。
如果希望有更好的动画效果,更高的运行效率,可以选择 jQuery 1.6.x;如果希望能有减少 js 代码,使用基本功能,那么可以选择 mini 版较低版本的jQuery,大家就各取所需吧。
zTree 中提供的是未经压缩的 jQuery 1.4.4,主要是开发时便于调试。
* 如需自行下载 jQuery,请访问:http://docs.jquery.com/Downloading_jQuery
7 css 样式异常怎么办?
产生样式冲突的可能性很多,在这次 v3.0 的制作过程中,又更加深入了这方面的了解,大概总结如下:
1、异常原因:
页面上自定义的 css 与 zTree 的 css 产生冲突
页面上使用其他插件的 css 与 zTree 的 css 产生冲突
修改 zTree 的 css 错误影响了 zTree
2、解决方案:
由于 css 冲突的可能性太多,与其说是解决方案,不如说是处理建议。
A、避免针对 id 进行样式设定,尽量采用 class 设置。 因为针对 id 设定的样式等级太高,zTree 的样式肯定会被覆盖。
B、zTree 默认的样式不可能将全部 css 定义都重新设置一遍,所以难免有遗漏,如果被遗漏的样式影响了效果,那么请在 zTreeStyle 内增加上对应的设置内容,而且一旦出现这种情况,也希望你能通知我,谢谢。
C、如果以上都不能解决,那么再看看是否有命名规则冲突,导致了样式冲突
D、最后再看看是否自己修改的 zTree 样式出现了错误
E、以上答案均无效,那么就请与我联系吧。
8 对象结构
将以下源码转化为类图如下:
// 1 原型$.fn.zTree
$.fn.zTree = {
consts // 常量对象;
_z // zTree v3.x 内部的全部方法都可以通过 $.fn.zTree._z对象进行调用
getZTreeObj(treeId) // 根据treeId获取zTreeObj
destroy(treeId) // 根据treeId销毁tree
init: function(obj, zSetting, zNodes) { // 初始化方法,返回zTreeObj对象;
...
var zTreeTools = { // 参考API的zTreeObj对象说明,是指API的zTreeObj对象;
setting : setting, // zTree 对象使用的 setting 配置数据,详细请参考 “setting 配置详解”中的各个属性详细说明
addNodes : function(parentNode, newNodes, isSilent) { // 添加节点。
...
},
cancelSelectedNode : function(node) { // 取消节点的选中状态。
view.cancelPreSelectedNode(setting, node);
},
destroy : function() { // 1、用此方法可以销毁 zTreeObj 代表的 zTree。
// 2、销毁当前页面全部的 zTree,也可以使用 $.fn.zTree.destroy() 方法。
// 3、重新使用已经被销毁的树,必须要使用 init 方法进行初始化。
view.destroy(setting);
},
expandAll : function(expandFlag) { // 展开 / 折叠 全部节点
expandFlag = !!expandFlag;
view.expandCollapseSonNode(setting, null, expandFlag, true);
return expandFlag;
},
expandNode : function(node, expandFlag, sonSign, focus, callbackFlag) { // 展开 / 折叠 指定的节点
...
},
getNodes : function() { // 获取 zTree 的全部节点数据
return data.getNodes(setting);
},
getNodeByParam : function(key, value, parentNode) { // 根据节点数据的属性搜索,获取条件完全匹配的节点数据 JSON 对象集合
if (!key) return null;
return data.getNodeByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);
},
getNodeByTId : function(tId) { // 根据 zTree 的唯一标识 tId 快速获取节点 JSON 数据对象
return data.getNodeCache(setting, tId);
},
getNodesByParam : function(key, value, parentNode) { // 根据节点数据的属性搜索,获取条件完全匹配的节点数据 JSON 对象集合
if (!key) return null;
return data.getNodesByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);
},
getNodesByParamFuzzy : function(key, value, parentNode) { // 根据节点数据的属性搜索,获取条件模糊匹配的节点数据 JSON 对象集合
if (!key) return null;
return data.getNodesByParamFuzzy(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);
},
getNodesByFilter: function(filter, isSingle, parentNode, invokeParam) { // 根据自定义规则搜索节点数据 JSON 对象集合 或 单个节点数据
isSingle = !!isSingle;
if (!filter || (typeof filter != "function")) return (isSingle ? null : []);
return data.getNodesByFilter(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), filter, isSingle, invokeParam);
},
getNodeIndex : function(node) { // 获取某节点在同级节点中的序号(从0开始)
if (!node) return null;
var childKey = setting.data.key.children,
parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
for (var i=0, l = parentNode[childKey].length; i < l; i++) {
if (parentNode[childKey][i] == node) return i;
}
return -1;
},
getSelectedNodes : function() { // 获取 zTree 当前被选中的节点数据集合
var r = [], list = data.getRoot(setting).curSelectedList;
for (var i=0, l=list.length; i
}
return r;
},
isSelectedNode : function(node) { // 是否选中的节点
return data.isSelectedNode(setting, node);
},
reAsyncChildNodes : function(parentNode, reloadType, isSilent) { // 强行异步加载父节点的子节点。[setting.async.enable = true 时有效]已经加载过的父节点可反复使用此方法重新加载。请通过 zTree 对象执行此方法。
...
},
refresh : function() { // 刷新 zTree
...
},
removeChildNodes : function(node) { // 清空某父节点的子节点。
...
},
removeNode : function(node, callbackFlag) { // 删除节点。
...
},
selectNode : function(node, addFlag) { // 选中指定节点
...
},
transformTozTreeNodes : function(simpleNodes) { // 将简单 Array 格式数据转换为 zTree 使用的标准 JSON 嵌套数据格式。
return data.transformTozTreeFormat(setting, simpleNodes);
},
transformToArray : function(nodes) { // 将 zTree 使用的标准 JSON 嵌套格式的数据转换为简单 Array 格式。(免去用户自行编写递归遍历全部节点的麻烦)
return data.transformToArrayFormat(setting, nodes);
},
updateNode : function(node, checkTypeFlag) { // 更新某节点数据,主要用于该节点显示属性的更新。
...
}
}
root.treeTools = zTreeTools;
data.setZTreeTools(setting, zTreeTools);
if (root[childKey] && root[childKey].length > 0) {
view.createNodes(setting, 0, root[childKey]);
} else if (setting.async.enable && setting.async.url && setting.async.url !== '') {
view.asyncNode(setting);
}
return zTreeTools;
}
};
// 2 配置对象setting
_setting = { // 默认的setting
treeId: "", // zTree 的唯一标识,初始化后,等于 用户定义的 zTree 容器的 id 属性值。
treeObj: null, // zTree 容器的 jQuery 对象,主要功能:便于操作。
view: { // 显示设置
addDiyDom: null,
autoCancelSelected: true,
dblClickExpand: true,
expandSpeed: "fast",
fontCss: {},
nameIsHTML: false,
selectedMulti: true,
showIcon: true,
showLine: true,
showTitle: true,
txtSelectedEnable: false
},
data: { // 配置设置
key: {
children: "children",
name: "name",
title: "",
url: "url"
},
simpleData: {
enable: false,
idKey: "id",
pIdKey: "pId",
rootPId: null
},
keep: {
parent: false,
leaf: false
}
},
async: { // 异步加载配置
enable: false,
contentType: "application/x-www-form-urlencoded",
type: "post",
dataType: "text",
url: "",
autoParam: [],
otherParam: [],
dataFilter: null
},
callback: { // 回调配置
beforeAsync:null,
beforeClick:null,
beforeDblClick:null,
beforeRightClick:null,
beforeMouseDown:null,
beforeMouseUp:null,
beforeExpand:null,
beforeCollapse:null,
beforeRemove:null,
onAsyncError:null,
onAsyncSuccess:null,
onNodeCreated:null,
onClick:null,
onDblClick:null,
onRightClick:null,
onMouseDown:null,
onMouseUp:null,
onExpand:null,
onCollapse:null,
onRemove:null
}
}