当前位置: 代码迷 >> Web前端 >> JQuery Tree插件――zTree v3.4 正式版 公布
  详细解决方案

JQuery Tree插件――zTree v3.4 正式版 公布

热度:788   发布时间:2012-11-23 22:54:33.0
JQuery Tree插件――zTree v3.4 正式版 发布

?

? 这次 v3.4 主要还是修改一些细节 bug,同时新增了 destroy 方法用于一些特殊需求中执行树的销毁操作,并且这次在制作 destroy 方法的时候无意间发现了 IE9 的内存泄漏问题,并且针对这个问题对 zTree 内部的 zId 和 节点cache的存储方式 进行了适当修改,以减少 IE9 的内存泄漏问题。


? 请注意:jquery.ztree.all 文件中 仅仅包含 core、excheck、exedit 这三个 js 包; 对于 exhide 以及以后推出的 扩展包都不会包含在 jquery.ztree.all 文件中。

? 如果需要使用,请自行添加。

?

?

? 在线操作演示:http://www.ztree.me/v3/demo.php#_101

? 快速下载地址:http://code.google.com/p/jquerytree/downloads/list



下面是 v3.4 的修改记录:


? ?* 【增加】Demo ―― OutLook 样式的左侧菜单 (http://www.ztree.me/v3/demo.php#_513)

? ?* 【增加】清空 zTree 的方法 $.fn.zTree.destory(treeId) & zTree.destory()


? ?* 【修改】core核心文件内 _eventProxy 方法中获取 tId 的方法,提高 DOM 的灵活性

? ?* 【修改】初始化时 多层父节点的 checkbox 半选状态计算错误的 bug

? ?* 【修改】同时选中父、子节点后,利用 getSelectedNodes 获取选中节点并利用 removeNode 删除时报错的 bug

? ?* 【修改】treeNode.chkDisabled / nocheck 属性,支持字符串格式的 "false"/"true"

? ?* 【修改】异步加载模式下无法利用 server 返回 xml 并且 在 dataFilter 中继续处理的 bug

? ?* 【修改】title 只允许设置为 string 类型值的问题。 修正后允许设置为 number 类型的值

? ?* 【修改】zId 计数规则 & Cache 保存,减少 IE9 的 bug 造成的内存泄漏

? ?* 【修改】API 页面搜索功能导致 IE 崩溃的 bug

?

21 楼 cngolon 2012-09-20  
请教个问题:
火狐报:TypeError: $.fn.zTree is undefined [在此错误处中断]
$.fn.zTree.init($("#tree"), setting, zNodes);//初始化树对象
在IE上提示:$.fn.zTree为空或不是对象,
js的加载顺序:zTreeStyle.css,jquery-1.7.2.min.js,jquery.ztree.core-3.4.js
请指点一下
**********************************************************
$(function(){
//单位树
var setting;
var zNodes =[
{name:"知识帮助导航栏", id:"-1", isParent:true} //初始化一个顶层默认节点
];
setting = {
async: { //异步加载
enable: true,
url: "${path}/callcenter/listNextKN.html",//异步加载URL
autoParam: ["id=0"]//需要传递的参数
},
expandSpeed: ""
};
$.fn.zTree.init($("#tree"), setting, zNodes);//初始化树对象
})
22 楼 zTreeAPI 2012-09-25  
cngolon 写道
请教个问题:
火狐报:TypeError: $.fn.zTree is undefined [在此错误处中断]
...
请对照 demo 的初始化方式查找错误,调整代码
23 楼 落落的月 2012-09-28  
请问怎么指定加载菜单的层级?比如菜单json一共三层,我只需要显示一级、二级,不需要三级的,该怎么做啊?
24 楼 zTreeAPI 2012-09-28  
落落的月 写道
请问怎么指定加载菜单的层级?比如菜单json一共三层,我只需要显示一级、二级,不需要三级的,该怎么做啊?

你说的不需要是什么意思? 完全不显示吗? 那么只需要不要生成3级的数据就是了
25 楼 jackyrong 2012-09-28  
请教下一个ztree中,checkbox的问题,比如想实现如下效果:
开发部这个结点下,有A,B,C三个人,A,B,C三个人前都有checkbox,当
分别勾选a,b,c三个人的后,并且点保存,这时候,因为全选了开发部下的三个人了,所以这个时候,要返回值是“开发部”这个值,但如果只选a,b两个人,则不用返回
开发部这个值,因为不是全选;我的思路是这样,但发现有问题:

1) 在开发部前面加一个全选的checkbox,当点这个checkbox后,则自然全选了下面的,A,B,C三个人了,这个时候很好办;但问题是,好像加入全选后,假如用户又去掉b的这个人前面的checkbox,则开发部这个前面的checkbox好像不会自动去掉。


2) 我目前是在oncheck事件中判断的,问题化归为:如果判断某个结点下的所有子结点已经勾选?如果都勾选,则返回其父结点的值。如果用javascript+ztree本身的API去实现,有什么思路么?
26 楼 zTreeAPI 2012-09-29  
jackyrong 写道
请教下一个ztree中,checkbox的问题,比如想实现如下效果:
开发部这个结点下,有A,B,C三个人,A,B,C三个人前都有checkbox,当
分别勾选a,b,c三个人的后,并且点保存,这时候,因为全选了开发部下的三个人了,所以这个时候,要返回值是“开发部”这个值,但如果只选a,b两个人,则不用返回
开发部这个值,因为不是全选;我的思路是这样,但发现有问题:

1) 在开发部前面加一个全选的checkbox,当点这个checkbox后,则自然全选了下面的,A,B,C三个人了,这个时候很好办;但问题是,好像加入全选后,假如用户又去掉b的这个人前面的checkbox,则开发部这个前面的checkbox好像不会自动去掉。


2) 我目前是在oncheck事件中判断的,问题化归为:如果判断某个结点下的所有子结点已经勾选?如果都勾选,则返回其父结点的值。如果用javascript+ztree本身的API去实现,有什么思路么?


首先你可以利用 半勾选状态去判断,默认情况下只有子节点全部取消勾选后才会自动取消父节点的勾选。 参考:treeNode.getCheckStatus
27 楼 jackyrong 2012-09-29  
是的,我后来发现了!谢谢,处理办法为,根据
check_count.html(demo中的例子)



	function onCheck(e, treeId, treeNode) {
			count();
				//获得当前结点的父结点
		var halfCheck = treeNode.getParentNode().getCheckStatus();
   

	//alert(halfCheck.half);
	   var fullCheck=treeNode.getParentNode().checked;
		if (halfCheck.half==false&&halfCheck.checked==true)
		{
		alert("父亲结点被勾选"+treeNode.getParentNode().name);
		}
			
		}

28 楼 jackyrong 2012-10-11  
HI,想问下,加入用simpledata的形式,不用json的话,
能否实现如下的结构:

attachment:"
{attachmentId:1,attachmentname:"f6e71004-8487-41f7-ac18-b6fac9860753.pdf"},

{attachmentId:2,attachmentname:"1e40868d-0d7a-41f4-8018-9c2f29ad716c.pdf"}

"

?就是一个结点中,嵌套了多个?
29 楼 zTreeAPI 2012-10-12  
jackyrong 写道
HI,想问下,加入用simpledata的形式,不用json的话,
能否实现如下的结构:

attachment:"
{attachmentId:1,attachmentname:"f6e71004-8487-41f7-ac18-b6fac9860753.pdf"},

{attachmentId:2,attachmentname:"1e40868d-0d7a-41f4-8018-9c2f29ad716c.pdf"}

"

?就是一个结点中,嵌套了多个?

zTree 内部就是嵌套格式的, 提供简单数据模式主要是为了方便用户生成; 如果你直接提供嵌套格式的数据完全没有问题!!!!

只不过如果你不想使用zTree 默认的属性,请参考 setting.data.key 下面的属性定义
30 楼 jackyrong 2012-10-12  
zTreeAPI 写道
jackyrong 写道
HI,想问下,加入用simpledata的形式,不用json的话,
能否实现如下的结构:

attachment:"
{attachmentId:1,attachmentname:"f6e71004-8487-41f7-ac18-b6fac9860753.pdf"},

{attachmentId:2,attachmentname:"1e40868d-0d7a-41f4-8018-9c2f29ad716c.pdf"}

"

?就是一个结点中,嵌套了多个?

zTree 内部就是嵌套格式的, 提供简单数据模式主要是为了方便用户生成; 如果你直接提供嵌套格式的数据完全没有问题!!!!

只不过如果你不想使用zTree 默认的属性,请参考 setting.data.key 下面的属性定义

THX,已经顺利解决,把上面的取出来,手工转多一次为json就可以了
31 楼 xfei6868 2012-10-30  
楼主帮忙看一下我提出的问题, http://tieba.baidu.com/p/1952303003

并发了邮件给你。
32 楼 nw_lvjuntao 2012-11-05  
你好,我用的3.4,添加了双击事件,此节点没有选中的时候,直接双击没问题,但是在某个节点选中后(点击后),在双击就不作用了,请问是我使用的问题,还是框架本身有问题,谢谢
33 楼 nw_lvjuntao 2012-11-05  
你好,我用的3.4,添加了双击事件,此节点没有选中的时候,直接双击没问题,但是在某个节点选中后(点击后),在双击就不作用了,请问是我使用的问题,还是框架本身有问题,谢谢

我在标题哪里加了一层标签,如下:

if (selectFlag) {
map.put("name", "<span class='select_yes'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(可选)" + rs.getString("fullname"));
} else {
map.put("name", "<span class='select_not'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(不可选)" + rs.getString("fullname"));
}
34 楼 nw_lvjuntao 2012-11-05  
nw_lvjuntao 写道
你好,我用的3.4,添加了双击事件,此节点没有选中的时候,直接双击没问题,但是在某个节点选中后(点击后),在双击就不作用了,请问是我使用的问题,还是框架本身有问题,谢谢

我在标题哪里加了一层标签,如下:

if (selectFlag) {
map.put("name", "<span class='select_yes'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(可选)" + rs.getString("fullname"));
} else {
map.put("name", "<span class='select_not'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(不可选)" + rs.getString("fullname"));
}




去掉我加这层标签后就没问题了,请问怎么处理?
35 楼 xing_kenny 2012-11-07  
Dome里面,ztree\demo\cn\index.html

<TD width=770px align=left valign=top><IFRAME ID="testIframe" Name="testIframe" FRAMEBORDER=0
SCROLLING=AUTO width=100%  height=600px SRC="core/standardData.html" onload="loadReady();" ></IFRAME></TD>

此处 onload="loadReady();" 是不需要的吧?
因为上面
demoIframe = $("#testIframe");
demoIframe.bind("load", loadReady);
36 楼 zTreeAPI 2012-11-07  
xfei6868 写道
楼主帮忙看一下我提出的问题, http://tieba.baidu.com/p/1952303003

并发了邮件给你。


已经回复了, 最近实在太忙,不能及时回复,请见谅
37 楼 zTreeAPI 2012-11-07  
nw_lvjuntao 写道
nw_lvjuntao 写道
你好,我用的3.4,添加了双击事件,此节点没有选中的时候,直接双击没问题,但是在某个节点选中后(点击后),在双击就不作用了,请问是我使用的问题,还是框架本身有问题,谢谢

我在标题哪里加了一层标签,如下:

if (selectFlag) {
map.put("name", "<span class='select_yes'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(可选)" + rs.getString("fullname"));
} else {
map.put("name", "<span class='select_not'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(不可选)" + rs.getString("fullname"));
}




去掉我加这层标签后就没问题了,请问怎么处理?

关键是你这里面的 map 是做什么用的? 是 节点的数据吗? 出现问题时,是否页面有报错信息??
38 楼 zTreeAPI 2012-11-07  
xing_kenny 写道
Dome里面,ztree\demo\cn\index.html

<TD width=770px align=left valign=top><IFRAME ID="testIframe" Name="testIframe" FRAMEBORDER=0
SCROLLING=AUTO width=100%  height=600px SRC="core/standardData.html" onload="loadReady();" ></IFRAME></TD>

此处 onload="loadReady();" 是不需要的吧?
因为上面
demoIframe = $("#testIframe");
demoIframe.bind("load", loadReady);

这个。。。应该是疏忽了。。。感谢你的细心。
39 楼 nw_lvjuntao 2012-11-08  
zTreeAPI 写道
nw_lvjuntao 写道
nw_lvjuntao 写道
你好,我用的3.4,添加了双击事件,此节点没有选中的时候,直接双击没问题,但是在某个节点选中后(点击后),在双击就不作用了,请问是我使用的问题,还是框架本身有问题,谢谢

我在标题哪里加了一层标签,如下:

if (selectFlag) {
map.put("name", "<span class='select_yes'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(可选)" + rs.getString("fullname"));
} else {
map.put("name", "<span class='select_not'>&nbsp;&nbsp;&nbsp;&nbsp;" + map.get("name") + "</span>");
map.put("title", "(不可选)" + rs.getString("fullname"));
}




去掉我加这层标签后就没问题了,请问怎么处理?

关键是你这里面的 map 是做什么用的? 是 节点的数据吗? 出现问题时,是否页面有报错信息??



你好,map就是为了生成json格式数据而已,没有报错,在源码里调试了,节点选中后,不会在触发双击事件了
40 楼 zTreeAPI 2012-11-08  
nw_lvjuntao 写道
....
你好,map就是为了生成json格式数据而已,没有报错,在源码里调试了,节点选中后,不会在触发双击事件了


非常感谢,测试了一下,这个应该属于bug,我会跟随下个版本发布时修正的。
  相关解决方案