- 浏览: 106609 次
- 性别:
- 来自: 上海
最新评论
-
zhexiaode:
感谢了 学习了
基于jQuery开发的javascript模板引擎-jTemplates -
osacar:
难道就是GT-GRID??两者是什么关系啊?
Sigma Grid 研究及使用 -
osacar:
这个跟GT-GRID很像啊。
Sigma Grid 研究及使用 -
fxiaozj:
怎么打印功能没用了
Sigma Grid 研究及使用 -
www_whq:
不是很了解,谢谢分享
Sigma Grid 研究及使用
[b][/b]KvaTree 的官方站点:http://www.kvaq.sk/en/kvatree-jquery-plugin.html
Version:
Jquery.js – jQuery library v1.2.6 (full, not packed)
Jquery-ui-personalized-1.5.3.min.js – jQuery UI v1.5.3 (ui.core,ui.draggable,ui.droppable)
kvaTree.js – kvaTree js file (full, not packed)
kvaTree.min.js – kvaTree js file packed
kvaTree核心库kvaTree.min.js的功能及事件:
kvaTree — 设置Tree
可以设置Tree:是否默认打开、背景色、图片路径、是否运行事件
设置方式如下:
InitKvaTree — 初始化生成Tree
数据构建Tree
InitDragDrop — 拖拽事件
拖拽节点或者叶节点将其加入其他节点下,这里我做了改动,将拖拽后的节点记录新的上级节点的ID
加入代码:
CancelDragDrop — 清除拖拽事件
清理
AddNode — 添加节点或者叶节点
这里做了改动,新添加的新节点或叶节点,会记录上级节点的ID,并且为自身随机生成一个ID
可以在加入名称时直接加入对应的URL
格式为:[name],[URL]
例:Downloads,down.action
改动代码如下:
EditNode — 编辑节点或者叶节点
通过编辑可以修改节点或叶节点的名称,及URL
DeleteNode — 删除节点
删除节点或者叶节点,删除节点时子节点及叶节点都会被删除。
SaveInput — 保存AddNode和EditNode操作结果
保存添加或者编辑的操作结果,由于加入了id、parentId、URL属性,所以保存时此方法要做修改,修改代码如下:
IeSetStyles — 初始化页面时判断节点是否默认展开
如果想在初始化页面时,节点默认展开,设置方法<li class=”open”>
Clean — 节点间的虚线背景
节点展开或者收缩重新设置虚线效果
AddSigns —节点展开或收起时添加标记
初始化Tree时为默认展开的节点和默认关闭的节点添加标记
BindEvents — 处理点击Tree时的效果处理
节点的展开和收缩,此处还扩展了双击节点打开相应的URL功能
添加功能代码:
ToggleNode — 收起或者展开节点
根据节点的Class属性是否为’open’ 调用ExpandNode或CollapseNode事件
ExpandNode — 展开节点
CollapseNode — 收起节点
数据传输
这里使用JSON作为前台页面和后台Struts2的数据传输格方式。
前台用Jquery的$.ajax方法获取JSON数据,使用递归算法遍历出所有的节点及叶节点输出到页面,kvaTree.min.js库负责生成树型菜单并承担对Tree的相关操作。
编辑后的Tree通过JavaScript读取封装成JSON格式,并用$.ajax方法提交到后台。
DEMO说明
服务器如何构造Tree的数据
Tree的POJO类:
SimpleTreeNode.java
Action类:
Action中的demoTest()方法用于构建Tree数据
TreeAction.java
Struts xml的配置
Struts-tree.xml
页面获取JSON数据生成Tree
Jquery获取JSON数据,并生成Tree
双击节点LOAD页面
双击触发BindEvents事件中嵌套的dblclick事件并LOAD进URL的页面
节点被修改或新增删除后提交
页面新加了一个update node / leaf 链接<p class="update">update node / leaf</p>
修改后的Tree可通过点击此链接提交到后台Action 的saveTree()方法处理
也可在页面关闭事件中增加提交的事件
相关javaScript代码:
Version:
Jquery.js – jQuery library v1.2.6 (full, not packed)
Jquery-ui-personalized-1.5.3.min.js – jQuery UI v1.5.3 (ui.core,ui.draggable,ui.droppable)
kvaTree.js – kvaTree js file (full, not packed)
kvaTree.min.js – kvaTree js file packed
kvaTree核心库kvaTree.min.js的功能及事件:
kvaTree — 设置Tree
可以设置Tree:是否默认打开、背景色、图片路径、是否运行事件
设置方式如下:
kt.options = { autoclose: true, background: 'white', imgFolder: 'img/', overrideEvents: false, multi: true, dragdrop: true, onClick: false, onDblClick: false, onExpand: false, onCollapse: false, onAddNode: false, onEditNode: false, onDeleteNode: false, onDrag: false, onDrop: false };
InitKvaTree — 初始化生成Tree
数据构建Tree
InitDragDrop — 拖拽事件
拖拽节点或者叶节点将其加入其他节点下,这里我做了改动,将拖拽后的节点记录新的上级节点的ID
加入代码:
//change parentId var li = $(this).parents('li:first'); var lin = $(this).parents('li.node:first'); li.removeAttr('parentId'); li.attr('parentId',lin.attr('id'));
CancelDragDrop — 清除拖拽事件
清理
AddNode — 添加节点或者叶节点
这里做了改动,新添加的新节点或叶节点,会记录上级节点的ID,并且为自身随机生成一个ID
可以在加入名称时直接加入对应的URL
格式为:[name],[URL]
例:Downloads,down.action
改动代码如下:
// arented var arented = lin.attr(‘id’); //random id var id = Math.random()*101-1; var nli=’<li’+cn+’ id=’+id+’ arented=’+ arented+’><span id=”tree” class=”text”> </span><input type=”text” value=”New item” /></li>’;
EditNode — 编辑节点或者叶节点
通过编辑可以修改节点或叶节点的名称,及URL
DeleteNode — 删除节点
删除节点或者叶节点,删除节点时子节点及叶节点都会被删除。
SaveInput — 保存AddNode和EditNode操作结果
保存添加或者编辑的操作结果,由于加入了id、parentId、URL属性,所以保存时此方法要做修改,修改代码如下:
var li=$(input).parents(‘li:first’); //remove url li.removeAttr(‘url’); //add url li.attr(‘url’,val.split(‘,’)[1]); //add text input.replaceWith(‘<span id=”tree” class=”active text”>’+val.split(‘,’)[0]+’</span>’);
IeSetStyles — 初始化页面时判断节点是否默认展开
如果想在初始化页面时,节点默认展开,设置方法<li class=”open”>
Clean — 节点间的虚线背景
节点展开或者收缩重新设置虚线效果
AddSigns —节点展开或收起时添加标记
初始化Tree时为默认展开的节点和默认关闭的节点添加标记
BindEvents — 处理点击Tree时的效果处理
节点的展开和收缩,此处还扩展了双击节点打开相应的URL功能
添加功能代码:
//redirect URL var li = clicked.parents('li:first'); var url = li.attr('url'); //LOAD URL //$("#url").load(url); $("#url").load('test.html');
ToggleNode — 收起或者展开节点
根据节点的Class属性是否为’open’ 调用ExpandNode或CollapseNode事件
ExpandNode — 展开节点
CollapseNode — 收起节点
数据传输
这里使用JSON作为前台页面和后台Struts2的数据传输格方式。
前台用Jquery的$.ajax方法获取JSON数据,使用递归算法遍历出所有的节点及叶节点输出到页面,kvaTree.min.js库负责生成树型菜单并承担对Tree的相关操作。
编辑后的Tree通过JavaScript读取封装成JSON格式,并用$.ajax方法提交到后台。
DEMO说明
服务器如何构造Tree的数据
Tree的POJO类:
SimpleTreeNode.java
public class SimpleTreeNode { private Object id; private String text; private Object parentId; private String url; //省略Get Set method /** * 仅用于需要异步读取数据的文件夹节点。当节点有子节点时,该属性不起作用。节点永远为文件夹节点 */ private boolean isfolder=false; private HashMap<String, Object> attrs=new HashMap<String,Object>(); public SimpleTreeNode(Object id, String text,Object parentId){ this.id=id; this.text=text; this.parentId=parentId; } public SimpleTreeNode(Object id, String text, Object parentId,boolean isFolder){ this.id=id; this.text=text; this.parentId=parentId; this.isfolder=isFolder; } public SimpleTreeNode(Object id, String text, Object parentId,boolean isFolder,String url){ this.id=id; this.text=text; this.parentId=parentId; this.isfolder=isFolder; this.url = url; } public SimpleTreeNode(Object id, String text, Object parentId,boolean isFolder,HashMap<String,Object> attrs){ this.id=id; this.text=text; this.parentId=parentId; this.isfolder=isFolder; this.attrs=attrs; } public void addAttribute(String key,Object value){ this.attrs.put(key, value); } }
Action类:
Action中的demoTest()方法用于构建Tree数据
TreeAction.java
public class TreeAction extends ActionSupport { private List<SimpleTreeNode> nodes=new ArrayList(); private SimpleTreeNode simpletree; //省略Get Set method //create Tree data public String demoTest(){ nodes.add(new SimpleTreeNode(1,"Item 1 here ",0,true,"www.joyplus.com.cn")); nodes.add(new SimpleTreeNode(2,"Item 2 here ",0,true,"www.google.com")); nodes.add(new SimpleTreeNode(3,"Item 3 here ",1,true,"dev.joyplus.com.cn")); nodes.add(new SimpleTreeNode(4,"Item 4 here ",1,true,"mail.joyplus.com.cn")); nodes.add(new SimpleTreeNode(5,"Item 5 here ",2,true,"tools.google.com")); nodes.add(new SimpleTreeNode(6,"Item 6 here ",2,true,"dev.google.com")); nodes.add(new SimpleTreeNode(7,"Item 7 here ",5,true,"map.google.com")); nodes.add(new SimpleTreeNode(8,"Item 8 here ",6,true,"gson.google.com")); //from DAO rocessing //......... //......... return SUCCESS; } //save Tree's update public String saveTree(){ ActionContext ctx = ActionContext.getContext(); String json = ctx.getParameters().keySet().toString().substring(1, ctx.getParameters().keySet().toString().length()-1); System.out.println(json); //JSONObject js = JSONObject.fromObject(json); try { Object obj = JSONUtil.deserialize(json); List list = (List) ((Map)obj).get("nodes"); for(int i = 0; i<list.size();i++){ Map map = (Map)list.get(i); System.out.print(map.get("id")+" "); System.out.print(map.get("text")+" "); System.out.print(map.get("parentId")+" "); System.out.print(map.get("isfolder")+" "); System.out.print(map.get("url")+" "); System.out.println(""); //nodes.add(new SimpleTreeNode(map.get("id"),(String)map.get("text"),map.get("parentId"),(Boolean)map.get("isfolder"),(String)map.get("url"))); //add DAO Processing //........... //........... } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return SUCCESS; } }
Struts xml的配置
Struts-tree.xml
<struts> <package name="tree" extends="json-default"> <action name="tree" class="org.kvatree.action.TreeAction" > <result type="json" /> </action> </package> </struts>
页面获取JSON数据生成Tree
Jquery获取JSON数据,并生成Tree
$(document).ready(function(){ //获取JSON数据 $.ajax({ type: "POST", url: "tree!demoTest.action", dataType: "json", // data:{id:"ab"}, success: function(data){ treeDate(data,0,0,"",""); }, error:function() {alert('数据传送失败');} }); $("#divtree").ajaxComplete(function(event,request, settings){ var obj = $('ul#tree1'); var opts = { multi: false }; obj.kvaTree(opts); Bind('.ctrls:eq(0)',obj); }); }); //递归生成Tree数据 function treeDate(data,defid,flag,li,ul,pid){ var ulflag = 0; var dataLength = data.nodes.length; if(defid==0){ for(var i=0;i < dataLength;i++){ ul = document.createElement("ul"); if(data.nodes[i].parentId==defid){ defid = data.nodes[i].id; li = document.createElement('li'); li.id=data.nodes[i].id; li.parentId=data.nodes[i].parentId; li.url=data.nodes[i].url; li.innerHTML = "<span id='tree'>"+data.nodes[i].text+"</span>"; $("#divtree").append(li); treeDate(data,defid,flag+1,li,"",pid); if(flag==0){ defid=0; } } } }else{ for(var k=0;k < dataLength;k++){ if(ul==""){ ul = document.createElement("ul"); } if (data.nodes[k].parentId == defid) { if(typeof(pid)!="undefined"&&ulflag==0){ ul = document.createElement("ul"); ulflag = 1; } if(typeof(pid)=="undefined"){ ulflag = 0; } li1 = document.createElement('li'); li1.id=data.nodes[k].id; li1.parentId=data.nodes[k].parentId; li1.url=data.nodes[k].url; li1.innerHTML = "<span id='tree'>"+data.nodes[k].text+"</span>"; ul.appendChild(li1); li.appendChild(ul); var temp = defid; defid = data.nodes[k].id; treeDate(data,defid,flag+1,li1,ul,data.nodes[k].parentId) flag = flag-1; defid = temp; } } } }
双击节点LOAD页面
双击触发BindEvents事件中嵌套的dblclick事件并LOAD进URL的页面
节点被修改或新增删除后提交
页面新加了一个update node / leaf 链接<p class="update">update node / leaf</p>
修改后的Tree可通过点击此链接提交到后台Action 的saveTree()方法处理
也可在页面关闭事件中增加提交的事件
相关javaScript代码:
$(".update").click( function(){ var tree = $('ul#tree1'); var li = $('li'); var actel=tree.find('span').get(1); var json="";; //alert($('ul#tree1').html()); for(var i=0;i<li.length;i++){ var actel = tree.find('span').get(i); var spanFlag = $(actel).attr('id'); if(actel&&spanFlag=="tree"){ var selfli=$(actel).parents('li:first'); var text = $(actel).text(); var id = selfli.attr('id'); var parentId = selfli.attr('parentId'); var url = selfli.attr('url'); json = json+"{'id':"+id+", 'isfolder':true ,'parentId':"+parentId+" ,'text':'"+text+"' ,'url':'"+url+"'}," } } json = "{'nodes' : ["+json.substring(0,json.length-1)+"]}"; $.ajax({ type: "POST", url: "tree!saveTree.action", dataType: "json", data: json, success: function(json){ alert('submit success'); treeDate(json,0,0,"",""); }, error:function() {alert('数据传送失败');} }); } )
- KvaTreeDEMO.rar (4 MB)
- 下载次数: 98
发表评论
-
定时执行代码|延迟执行代码
2010-07-27 18:45 1521Ext Core提供了TaskRunner、TaskMgr和D ... -
Js 获取当前日期
2010-06-10 10:55 9405var myDate = new Date(); myDate ... -
基于jQuery开发的javascript模板引擎-jTemplates
2009-09-07 09:45 9167这里介绍一个基于jQuery开发的模板引擎。 jTemplat ... -
Sigma Grid 研究及使用
2009-08-21 13:58 25781Sigma Grid 纯javascript,Sigma gr ... -
jquery autocomplete 扩充
2009-08-21 13:53 3806此功能在原有的基础上增加了table列表的动态刷新显示 jq ...
相关推荐
struts2-jquery-plugin-3.1.0.jar
- Struts2-jQuery-Plugin支持自定义JavaScript事件处理,可以使用`onComplete`、`beforeSubmit`等属性绑定回调函数,实现更复杂的业务逻辑。 - 使用`event`属性,可以触发特定的jQuery事件,如`open`、`close`等。...
struts2-jquery-plugin-2.0.0 struts2-jquery-plugin-2.0.0 struts2-jquery-plugin-2.0.0
最新的struts2-jquery-plugin插件3.3.3,包括jquery-ui和grid,使用标签实现。
针对这一问题,`前端项目-Iframe-Height-Jquery-Plugin` 提供了一个解决方案。 这个jQuery插件的主要功能是自动检测并设置Iframe的高度,确保内容完整显示,同时解决了跨域通信的问题。跨域问题通常发生在iframe...
在使用过程中,开发者需要将下载的jonpauldavies-jquery-pager-plugin-aa0c5b4.zip解压,其中包含的主要文件可能有以下几种: 1. `jquery.pager.js`:这是核心的JavaScript文件,实现了分页逻辑和交互。 2. `jquery...
前端项目-jquery-fullscreen-plugin,这个jquery插件提供了一个简单易用的机制来控制现代浏览器的新全屏模式。目前只有更新的基于webkit的浏览器(如chrome)和firefox提供了这个新的全屏功能。
struts2 jquery plugin ,学习struts2 ,又希望在其中使用Jquery的朋友,不妨看看
struts2-jquery-plugin
jQuery plugin for autocomplete - jQuery自动完成插件
struts2-jquery-plugin jar文件
sonar-pdfreport-plugin-4.0.1英文pdf报告版,适用于SonarQube9.x版本 sonarQube 9.9.2-community 和postgres 13使用完全正常
struts2-jquery-grid-plugin-3.5.1.jar 此jar包适合于struts2框架,一标签的形式实现grid插件,不过目前网络上此插件中文文档较少。
要使用`jQuery webcam plugin`,首先需要在项目中引入jQuery库以及插件的JavaScript和CSS文件。接着,需要在HTML中创建一个用于显示摄像头预览的元素,例如一个`div`,并为其添加特定的ID。然后,通过以下JavaScript...
【前端项目-jquery-teletype-plugin.zip】是一个包含前端开发中的jQuery插件资源的压缩包。这个插件名为"teletype",它的主要功能是模拟人类在输入文本时的行为,比如逐步显示文本并可选择性地删除内容,从而营造出...
sonar-pdfreport-plugin 已经对static 下 download.js 错误路径进行修改 sonar-pdf-plugin 3.0.3 适用SONARQUBE6.3+ ,生成 sonarqube 项目报告 report ,2积分好事成双,免去打包浪费时间
将atlassian-universal-plugin-manager-plugin-2.17.13.jar 替换到 jira/atlassian-jira-6.3.6-standalone/atlassian-jira/WEB-INF/atlassian-bundled-plugins/ 重新启动jira 用管理员账户登录jira
在压缩包"Bootstrap-video-player-jQuery-plugin-master"中,你将找到源代码、示例、文档和可能的资源文件,这些都将帮助你理解和使用这个插件。通过阅读文档,你可以了解如何配置和自定义播放器,以及如何解决可能...
前端开源库-jquery-word-and-character-counter-pluginjquery单词和字符计数器插件,这个单词和字符计数器插件允许您向上或向下计数字符或单词。您可以设置计数器要达到的最小或最大目标。还有甜蜜的选择。