`
ihibernate
  • 浏览: 152626 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jstree 简单解决方案之节点换肤

阅读更多


jstree王者归来: QQqun 105564508  希望能与各位在线交流探讨



写在前面
前一篇文章jstree 简单解决方案,主要讲了jstree的一些基本用法,在这里讨论一下jstree的节点换皮肤。
当然本文还是基于 jstree 0.99a 版本和 jquery-1.3.2.js为基础写的。


<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript" src="jquery.tree.js"></script>
<script type="text/javascript" language="javascript">
  <!--  
    	$(function () { 
    		$.ajaxSetup({cache:false});//ajax调用不使用缓存
    		$("#vcsTree").tree({//创建树开始
    			  data : { 
    				type : "json",//类型为json
    				async : true,//动态操作
    				opts : {
    					method : "get", 
    					url : "async_json_data2.json"
    				}
    			 },//end data
    			 ui:{
    				 theme_name : "classic"
    			 },
    			 lang:{   
				 loading : "目录加载中……"  
			 }, 
			 rules : {
			 	type_attr	: "rel",     //设置节点类型
				valid_children : "root"  // 只有root节点才能作为顶级结点
			},
    			 types :{
    			 	"default" : {
    			 		clickable : true,
    			 		draggable : false    //设置节点不可拖拽
    			 	},
     			"root" : {
					valid_children : "folder", //设置下级节点类型,可是数组
					icon : { 
						image : "root.png"//设置当前节点icon图片,路径自己决定
					}
			 	},
			   "folder" : {
					valid_children : "leaf",
					icon : { 
						image : "folder.png"
					}
				},
				"leaf" : {
					valid_children : "none",
					icon : { 
						image : "leaf.png"
					}
				}
    			 }	    
    		});
    	});
   //-->
</script>
<div id="container"> 
		<h2 class="title">JsTree</h2>
		<div id="vcsTree"></div>			
</div>



特别提示

jstree0.99a的 换肤固然简单,但是还是存在bug的,不支持IE6,7系列浏览器,但对firefox,和chrome浏览完全兼容,具体bug修正jstree作者已在最新版jstree1.0进行修正。
如果有已经解决此bug的兄弟,希望能告知一下各位兄弟,把代码贴出来大家学习一下。


写在最后:

这里是国外的一位哥们对此bug的修正,他并未修改jstree的源代码,只是在jstree初始化代码后添加了一段代码。
根据他的改写,在IE上不同节点还是不能显示不同的图标,所以感觉 自己 水平有限 ,希望能和各位探讨学习。  

仅需修改两处代码:
1. 如注释1处所写,放在tree初始化代码后。
2. 如注释2, 添加在style.css文件内


Already fixed it with some jquery code:

instead of 
//jstree的types设置 ,和上面的代码并无多大区别,只是图片方式和jstree的提取方式是一样的,从一张png图片分割出自己想要的部分(个人说法)。
types : {
	"default" : { icon : { image : 'icon.png', position : '0 0' } }
	"root" : { icon : { image : 'icon.png', position : '-16px 0' } }
	"folder" : { icon : { image : 'icon.png', position : '-32px 0' } }
	"page" : { icon : { image : 'icon.png', position : '-32px 0' } }
}

//注释1 ,放在tree初始化代码后
I wrote (after initilization tree)
$("li[rel='root'] > a ins").addClass("root");
$("li[rel='folder'] > a ins").addClass("folder");
$("li[rel='page'] > a ins").addClass("page");

//注释2 ,添加在style.css文件内
and in style.css
.tree-classic li.open a ins.root, .tree-classic li.open a ins.folder, .tree-classic
li.open a ins.page
{background-image:url('icons.png');}
.tree-classic li.open a ins.root{background-position:0 -48px;}
.tree-classic li.open a ins.folder{background-position:0 0;}
.tree-classic li.open a ins.page{background-position:-16px 0;}



在firefox上效果:


本代码见附件: themes.rar    请下载使用后记得留言您的更正结果,期待各位的答复
  • 大小: 3.3 KB
  • 大小: 18.4 KB
分享到:
评论
7 楼 ecustz 2010-08-13  
以前不怎么明白,现在感觉jstree真不错啊,收藏一下
6 楼 tangyuanjian 2010-07-13  
你就给一个正确的嘛,方正你说的三个方法都试了,还是不行!
5 楼 ihibernate 2010-07-13  
tangyuanjian 写道
你的例子在IE6下看没有成功!

请仔细看3楼的回复,那里有测试成功的范例
4 楼 tangyuanjian 2010-07-13  
你的例子在IE6下看没有成功!
3 楼 ihibernate 2010-07-01  
嘿嘿,节点换肤问题终于解决了,问题并没有想象的那么复杂,只是在json串里,添加节点的图标即可,其原理就是给节点添加css,替换掉原始节点的背景图片。
之前1楼中写在最后的代码也是添加样式,然后让样式生效,只是我一直没有使用出来效果。
1楼中代码里的types里的root,folder,leaf代码就可以去掉了。

在json里添加如此代码:    在data属性添加   icon:"root.png",
json代码格式应为:
[
{attributes: {id : "rootnode",rel: "root"},
data : {title: "rootnode",icon:"root.png"},
state: "closed"
]


原理如图示:
2 楼 ihibernate 2010-06-30  
本段 js代码 是添加一楼.tree()方法后面的一段代码:
功能:  在对应节点图标添加 css类,增加对 IE 浏览器的 支持 。
 $("li[rel='root'] a:first-child ins").addClass('root');
 $("li[rel='folder'] a:first-child ins").addClass('folder');
 $("li[rel='leaf'] a:first-child ins").addClass('leaf');


本段 css代码 是添加在jstree  classic 皮肤包的style.css文件里:
功能: 添加 在IE 显示对应节点图标 的样式
/* NODE ICONS  ADD BY GAOJC*/
.tree-classic li.open a ins.root { background:url("root.png") no-repeat; }
.tree-classic li.open a ins.folder { background:url("folder.png") no-repeat; }
.tree-classic li.open a ins.leaf { background:url("leaf.png") no-repeat; }



但结果令人失望,IE还是不支持节点换肤,哪位能解决此处问题的回复一下。谢谢


1 楼 ihibernate 2010-06-30  
测试过的兄弟,赶紧回个帖啊,大家探讨一下

相关推荐

    JSTree(js写的树形菜单,支持加载10000节点以上)

    JSTree作为一个强大且灵活的JavaScript树形菜单组件,为开发者提供了解决大数据量加载问题的有效工具。其高效、易用和可扩展的特性,使其在各种Web应用中广泛应用,无论是企业级后台管理界面,还是用户友好的前端...

    jsTree 很好用的动态加载数

    动态加载是 jsTree 的核心特性之一,它允许在用户滚动或展开树节点时按需加载数据,而不是一次性加载所有数据。这种机制对于处理大量数据特别有用,因为它减少了初始页面加载时间,提高了用户体验。通过设置适当的...

    jsTree中文文档

    jsTree 有多种事件可以监听,比如 `ready.jstree`(初始化完成)、`select_node.jstree`(节点被选中)和 `rename_node.jstree`(节点重命名)。以下是一个监听节点被选中的例子: ```javascript $('#jstree_demo_...

    jsTree中文api

    总结来说,jsTree提供了全面的API来处理树形数据,无论是在基本的操作,如添加、删除和移动节点,还是更复杂的事件处理和动态加载数据,都具有灵活的接口。结合jsTree的中文API文档,开发者可以轻松地在项目中集成和...

    jstree目录树控件

    这个示例展示了如何在网页上创建一个简单的jsTree实例,包含了两个顶层节点。 总结来说,jsTree是一个功能强大的JavaScript目录树控件,适用于各种需要展示层级关系的场景。其动态加载、丰富的插件支持和高度的...

    jsTree.v.1.0中文文档

    - **事件**:jsTree提供了丰富的事件,如`select_node.jstree`在节点被选中时触发,`create_node.jstree`在新节点创建后触发,开发者可以监听并处理这些事件。 4. **插件介绍** - **checkbox插件**:允许用户通过...

    bootstrap-JsTree简单dome

    这个简单Dome提供了一个快速入门的例子,展示了如何在网页中集成JsTree,并实现多选、单选、添加和删除节点等功能。下面将详细介绍JsTree的核心特性以及如何与Bootstrap结合使用。 首先,JsTree是一个基于jQuery的...

    JsTree 最详细教程及完整实例

    以下是一个简单的 JsTree 实例,展示如何初始化和配置 JsTree: ```html &lt;!DOCTYPE html&gt; &lt;link rel="stylesheet" href="jstree/dist/themes/default/style.css" /&gt; &lt;script src="jstree/dist/jstree.min.js"&gt; ...

    JS实现treeview中选中父节点,子节点也选中,如果子节点全部选中,自动选中父节点

    //JS实现treeview中选中父节点,子节点也选中,如果子节点全部选中,自动选中父节点 //仅支持TreeView //调用方法 TreeView.Attributes.Add("onclick", "OnTreeNodeChecked()");

    jsTree树形菜单

    **jsTree树形菜单详解** jsTree是一款基于JavaScript的开源库,用于在Web页面中创建交互式的树形结构。它提供了丰富的API、多种主题和插件,使得开发者...无论是简单的导航菜单还是复杂的业务逻辑,jsTree都能胜任。

    jsTree动态tree

    jsTree提供丰富的事件,如`select_node.jstree`(节点选择)、`open_node.jstree`(节点展开)等,可以监听这些事件来执行自定义操作。 ```javascript $('#jstree').on('select_node.jstree', function (e, data) {...

    JStree 需要包含的资源

    它提供了一套完整的解决方案,帮助开发者轻松构建交互式的树形数据视图,广泛应用于文件系统、组织结构、菜单系统等领域。在本项目中,我们需要关注的核心资源包括`jstree.min.js`、`jstree.js`以及相关的样式文件。...

    jsTree大集合

    3. **丰富的API**:jsTree提供了详尽的API,包括事件监听、节点操作、状态管理等,使得在JavaScript中对树结构的操作变得简单易行。 4. **多主题支持**:jsTree内置了多种预设主题,同时也允许开发者自定义主题,以...

    JsTree静态例子

    $('#jstree_demo_div').jstree('select_node', '节点1'); ``` 尽管这是一个静态示例,但了解JsTree的基础配置和API对于进一步学习动态数据加载和交互式操作至关重要。随着对JsTree理解的深入,你可以实现动态加载...

    jsTree操作 jsTree插件简介

    jsTree 支持多种功能,包括动态加载、异步数据获取、节点的增删改查、搜索、拖放操作以及自定义主题和类型。 **初始化 jsTree** 在使用 jsTree 时,首先需要对元素进行初始化。以下是一个简单的初始化示例: ```...

    手机端js tree

    在移动设备上,为了有效地展示层次结构数据,如文件系统、组织架构或导航菜单,"手机端js tree"成为了一种实用的解决方案。这个技术基于JavaScript,专为智能手机和平板电脑等移动端设备设计,提供了可自定义的树形...

    JStree(最全)

    **JStree 全面解析** ...无论是简单的静态树还是复杂的动态加载,JStree 都能轻松应对,是开发中实现树形结构的理想选择。通过深入理解和实践,我们可以充分利用 JStree 构建出用户友好的交互式界面。

    jsTree JAVA例子

    jsTree 支持多种插件来扩展其功能,如 `checkbox` 插件实现复选框选择,`contextmenu` 插件添加右键菜单,`types` 插件定义不同类型的节点样式等。例如,启用 `checkbox` 插件: ```javascript $('#jstree').jstree...

    jsTree v.1.0中文文档

    1. **API方法**:如`jstree('create_node')`用于创建新节点,`jstree('rename_node')`用于重命名节点,`jstree('delete_node')`用于删除节点等。 2. **事件**:jsTree触发一系列事件,如`create_node.jstree`在创建...

    JsTree 实例使用

    JsTree 提供了丰富的功能,如动态加载、节点重命名、拖放操作等,而且易于集成和自定义,使得开发者能够轻松地创建具有专业外观和功能的树形界面。 **一、安装与引入** JsTree 的使用首先需要下载相应的文件。在...

Global site tag (gtag.js) - Google Analytics