接上篇:
PART C.
最后,再介绍一种带有checkbox功能效果的JSTree
$.ajaxSetup({cache:false});
$("#checktreeToshow").tree({
data : {
//内容同上,略过。
},
ui : {
//作者提供了checkbox效果的主题包,引入项目并指明包的位置
theme_path : "<%=request.getContextPath() %>/css/themes/",
//指出主题包的名字,如checkbox,或者是apple(苹果操作平台下的效果主题)
theme_name : "checkbox",
//理论上指定了主题包的位置和主题包的名字就可以使用带有checkbox功能的JSTree了,但我却并没有得到我想要的效果,所有的节点被点击时无法被勾选。似乎主题包内的change.js没有响应。因此我临时做了个比较糟糕的实现,就是写一个function checkChange(NODE, TREE_OBJ)函数,函数内容为checkbox主题包中change.js文件提供的onchange函数内容。自定义的checkChange函数即将你所操作的NODE节点的checkbox的勾选状态取反。因为我的onchange没有勾选效果,所以手工的添加了checkChange函数来实现。同理,我想要在节点的子节点加载进来后根据父节点是否被勾选来决定加载进来的子节点的勾选状态,于是onopen函数也做了调整,不过这里的调整并不完善,有许多细节的瑕疵,如果你是JSTree的高手,欢迎交流经验。
context:{visible : function (NODE, TREE_OBJ) {
return false;
}}
},
lang:{
loading:"目录加载中……"
},
callback:
{
onchange : function (NODE, TREE_OBJ) {
checkChange(NODE, TREE_OBJ);
},
onopen:function(NODE, TREE_OBJ){
var $this = $(NODE).is("li") ? $(NODE) : $(NODE).parent();
var status=($this.children("a").attr("class").substring(0,7));
var tree=$.tree_reference("checktreeToshow");
if($(NODE).attr("where")=="0")
{
if(status=="checked")
{
checkChange(NODE, TREE_OBJ);
checkChange(NODE, TREE_OBJ);
}
}
else
{
if(status=="checked")
{
//NODE=$(tree.parent(NODE));
$this = $(NODE).is("li") ? $(NODE) : $(NODE).parent();
status=($this.children("a").attr("class")).substring(0,7);
if(status=="checked")
{
checkChange(NODE, TREE_OBJ);
checkChange(NODE, TREE_OBJ);
}
}
}
}
}
});
}
下面是我自定义的checkChange函数,函数体为主题中change.js文件提供的函数内容:
function checkChange(NODE, TREE_OBJ)
{
var $this = $(NODE).is("li") ? $(NODE) : $(NODE).parent();
if($this.children("a.unchecked").size() == 0) {
TREE_OBJ.container.find("a").addClass("unchecked");
}
$this.children("a").removeClass("clicked");
if($this.children("a").hasClass("checked")) {
$this.find("li").andSelf().children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
var state = 0;
}
else {
$this.find("li").andSelf().children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
var state = 1;
}
$this.parents("li").each(function () {
if(state == 1) {
if($(this).find("a.unchecked, a.undetermined").size() - 1 > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
}
else {
if($(this).find("a.checked, a.undetermined").size() - 1 > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
}
});
}
以上为个人的一点小总结,可以给我作为备忘以便以后再使用。如果你也在使用JQuery的JSTree,希望能对你有些许帮助,同时它更多的内容我也在不断尝试中。
最后再说一下,JSTree下载后下载包中会自带JQuery的jquery.js文件,使用这个肯定没问题,但如果你的项目已经存在了jquery.js文件,有可能会出现
$("#"
+ this.container.attr("id") + " li").live is not a
function
tree_component.js (第 1028 行)
【注:
该异常捕获于FF浏览器,使用的JSTree为v0.9.6】,因为JSTree对JQuery的版本还是有依赖性的,作者对此异常的解释为:“It
is the jQuery version that is used. You need to use the supplied
jQuery (or the latest from
http://jquery.com)
. Version 1.2.6 does not support
live events (they are introduced in 1.3).”
JSTree下载地址:http://jstree.googlecode.com/files/jsTree.v.0.9.8.zip
分享到:
相关推荐
jQuery jsTree大集合,集合了jQuery的大量例子
jQuery的Tree控件 jstree
基于Jquery的JSTree实例,此笔记为学习笔记
jsTree 是基于jquery的树插件,支持拖放、复制、删除、快捷键、多选、自定义节点图标、自定义右键菜单、跨页面保存状态等等
jquery.jstree.rar jquery.jstree.rar jquery.jstree.rar jquery.jstree.rar jquery.jstree.rar jquery.jstree.rar jquery.jstree.rar
jstree SDK
jQueryzTree JSTree 数组大全
jquery.tree.js树形导航菜单插件
jsontree (jquery.treeview.js) jQuery插件版 treeview1.0jsontree (jquery.treeview.js) jQuery插件版 treeview1.0jsontree (jquery.treeview.js) jQuery插件版 treeview1.0jsontree (jquery.treeview.js) jQuery...
jquery.jstree.faster.js
jstree是一款非常实用的jQuery目录树插件。jsTree树插件易于扩展,可以配置主题,支持HTML和JSON格式的数据,还支持异步回调数据,支持多级树结构等。
十分漂亮的 js tree控件 同时也支持动态生成树,使用方便快捷。
jsTree是一个 基于jQuery的Tree控件。支持XML,JSON,Html三种数据源。提供创建,重命名,移动,删除,拖"放节点操作。可以自己自定义创建,删 除,嵌套,重命名,选择节点的规则。在这些操作上可以添加多种监听事件...
有关插件jstree的共享,一般的详细jstree更加强大。
jquery下jstree简单应用 - v1.0.docx
JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库
用jsTree+div模拟 js树形下拉菜单
关于jquery的tree控件,你可以轻松的使用!
很方便的jquery checktree
JSTree 大型树形菜单控件(基于jQuery),应用当然就非常广泛了,有采用XML的,有使用动态的. 本文档包含有近50种实例,是jsTree快速上手的最佳参考文档。