Jquery easyui tree 一些常见操作
Tree:
easyui tree的异步加载实现很简单,easyui的中文API文档中有实例(http://api.btboys.com/easyui/)——创建异步树形菜单,就是在tree node 元素中要有一个id属性,同时还需要state的属性(state为'closed'的时候,点击节点时会自动请求,并且将id作为参数Post到后台),只加载一次。
远程异步加载:
http://www.cnblogs.com/CoreCaiNiao/archive/2010/08/20/1804387.html
- $(function(){
- $('#tt2').tree({
- checkbox: false,
- url: '/common/GetGoupJsonByPid.ashx?pid=0',
- onBeforeExpand:function(node,param){
- $('#tt2').tree('options').url = "/common/GetGoupJsonByPid.ashx?pid=" + node.id;
- //只加载一次。
- },
- onClick:function(node){
- alert(node.id);
- }
- });
- });
例子:
JSP:
- <script type="text/javascript" src="<%=request.getContextPath()%>/js/app/sysManagement/sysMenu.js" charset="UTF-8"></script>
- <html>
- <style>
- #editForm{}
- #editForm input{width:300px;}
- #editForm select{width:300px;}
- </style>
- <body>
- <div id="treeMenu" class="easyui-menu" style="width:120px;"></div>
- <div class="easyui-layout" data-options="fit:true,border:false" style="width: 100%; height: 100%;">
- <div data-options="region:'north',border:false,title:'菜单管理', iconCls: 'icon-tip'" style="height:55px">
- <div id="toolbar" class="easyui-toolbar" style="margin-top:5px;">
- <a class="easyui-linkbutton"
- data-options="plain: true, iconCls: 'ope-add'"
- onclick="javascript:addBrothers()">新增同级</a>
- <a class="easyui-linkbutton"
- data-options="plain: true, iconCls: 'ope-add'"
- onclick="javascript:addChildren();">新增下级</a>
- <a class="easyui-linkbutton"
- data-options="plain: true, iconCls: 'ope-remove'"
- onclick="javascript:removeMenu();">删除</a>
- <a class="easyui-linkbutton"
- data-options="plain: true, iconCls: 'ope-save'"
- onclick="javascript:saveOrUpdateMenu();">保存</a>
- </div>
- </div>
- <div data-options="region:'center',border:false" >
- <div class="easyui-layout" data-options="fit:true,border:false" style="width: 100%; height: 100%;">
- <div region="west" data-options="split:true,border:true,minWidth: 150, maxWidth: 500" style="width:230px;">
- <ul id="tree"></ul>
- </div>
- <div data-options="region:'center',border:false" >
- <div style="margin:5px;">
- <form name="editForm" method="post" id="editForm" class="easyui-SuperEditForm">
- <input id="id" name="id" type="hidden"/>
- <input id="supId" name="supId" type="hidden"/>
- <table class="tableForm_L" width="100%" border="0" cellpadding="0" cellspacing="1">
- <tr>
- <th width="15%">
- 菜单名
- <span class="red">*</span>
- </th>
- <td width="85%">
- <input type="text" name="menuName" id="menuName" class="easyui-validatebox"
- data-options="required:true,validType:'length[1,200]'" />
- </td>
- </tr>
- <tr>
- <th width="15%">
- 链接URL
- <span class="red">*</span>
- </th>
- <td width="85%">
- <input type="text" name="menuUrl" id="menuUrl" class="easyui-validatebox" data-options="required:true"/>
- </td>
- </tr>
- <tr>
- <th width="15%">
- 顺序ID
- </th>
- <td width="85%">
- <input type="text" name="orderId" id="orderId" class="easyui-validatebox" />
- </td>
- </tr>
- <tr>
- <th width="15%">
- 是否启用
- <span class="red">*</span>
- </th>
- <td width="85%">
- <select id="enabledFlag" name="enabledFlag" class='easyui-combobox'
- data-options="required:true,panelHeight:'auto',editable:false,readonly:false">
- <option value="Y">是</option>
- <option value="N">否</option>
- </select>
- </td>
- </tr>
- <tr>
- <th width="15%">备 注</th>
- <td colspan="3">
- <textarea cols="100" rows="13" height='auto' name="remark" id="remark"></textarea>
- </td>
- </tr>
- </table>
- </form>
- </div>
- </div>
- </div>
- </div>
- </div>
- </body>
- </html>
sysMenu.js
- var $editForm;
- var $tree;
- var hasNew = false;
- $(function() {
- $tree = $("#tree");
- $editForm = $("#editForm");
- $tree.tree({
- url : root + 'sysMenu/listMenus.do?pid=-1',
- iconCls : 'icon-save',
- checkbox : false,
- lines : true,
- animate : true,
- onBeforeExpand : function(node, param) {
- $tree.tree('options').url = root + "sysMenu/listMenus.do?pid="
- + node.id; // 只加载一次
- },
- onLoadSuccess : function(node, data) {
- },
- onSelect : function(node) {
- if (node.id == -1) return;
- if(node.id.indexOf('newNode') != -1){
- var pidStr = node.id;
- var pid = pidStr.split("newNode")[1];
- $editForm.find("input").val("");
- $("#supId").val(pid);
- $("#remark").val("").text("");
- $("#menuName").val(node.text);
- }else{
- $tree.tree('expand',node.target)
- getMenuDetail(node.id);
- }
- }
- });
- });
- function getMenuDetail(id){
- $.ajax({
- url: root + "sysMenu/getMenuDetail.do?id="+id,
- type: "GET",
- dataType: "json",
- async:false,
- success: function (data, textStatus, XMLHttpRequest) {
- if(data != null){
- $("#id").val(data.id);
- $("#supId").val(data.supId);
- $("#menuName").val(data.menuName);
- $("#menuUrl").val(data.menuUrl);
- $("#orderId").val(data.orderId);
- $('#enabledFlag').combobox('setValue', data.enabledFlag);
- $("#remark").val(data.remark).text(data.remark);
- }else{
- $.messager.alert('提示','获取菜单详情失败!','error');
- }
- }
- });
- }
- function saveOrUpdateMenu(){
- if (!$editForm.form('validate')) return;
- var selected = $tree.tree('getSelected');
- if(selected == null)
- $.messager.alert('提示','请选择一个节点','info');
- var formData=$editForm.serializeArray();
- var sysMenu = {};
- $.each(formData,function(i,field){
- sysMenu[field.name] = field.value;
- });
- $.ajax({
- url:root+'sysMenu/saveOrUpdateMenu.do',
- data: sysMenu,
- type: "post",
- async:false,
- success: function (data, textStatus, XMLHttpRequest) {
- if(data != null){
- $.messager.alert('提示','保存成功!','info',function(){
- hasNew = false;
- var selected = $tree.tree('getSelected');
- var parent = $tree.tree('getParent',selected.target);
- $tree.tree('reload',parent.target);
- });
- }else{
- $.messager.alert('提示','保存失败!','error');
- }
- }
- });
- }
- function removeMenu(){
- var selected = $tree.tree('getSelected');
- if(selected == null){
- $.messager.alert('提示','请选择一个节点','info');
- return;
- }
- if(selected.id.indexOf('newNode') != -1){
- $tree.tree('remove',selected.target);
- hasNew = false;
- }else{
- $.messager.confirm('提示', "确认删除节点'"+selected.text+"'?", function(r){
- if (r){
- $.ajax({
- url : root + "sysMenu/removeMenu.do?id="+selected.id,
- type: 'GET',
- timeout: 60000,
- success : function(data, textStatus, jqXHR){
- if('SUCCESS' == data){
- hasNew = false;
- $tree.tree('remove',selected.target);
- $.messager.alert('提示','删除成功!','info');
- }else{
- $.messager.alert('提示','删除失败!','error');
- }
- }
- });
- }
- });
- }
- }
- function addBrothers(){
- if(!validate()) return;
- var selected = $tree.tree('getSelected');
- var parent = $tree.tree('getParent',selected.target);
- addNewNode(parent);
- }
- function addChildren(){
- if(!validate()) return;
- var children = $tree.tree('getSelected');
- addNewNode(children);
- }
- function addNewNode(parent){
- var data = {};
- data.id = "newNode"+parent.id; //onSelect时的node节点不含pid,所以需要加上
- data.pid = parent.id;
- data.text = "新建节点";
- data.state = "open";
- var d = new Array();
- d.push(data);
- var param = {};
- param.parent = parent.target;
- param.data = d;
- $tree.tree('append',param);
- var node = $tree.tree('find', data.id);
- $tree.tree('select', node.target);
- }
- function validate(){
- var selected = $tree.tree('getSelected');
- if(selected == null){
- $.messager.alert('提示','请选择一个节点','info');
- return false;
- }
- var text = selected.text;
- if(selected.id == -1){
- $.messager.alert('提示','根节点不可新增节点','info');
- return false;
- }
- if (selected.id.indexOf('newNode') != -1 || hasNew) {
- $.messager.alert("提示", "请保存或删除新增节点后再新增!", "info");
- return false;
- }
- hasNew = true;
- return true;
- }
Controller:
- // =================================================================菜单管理================================
- @RequestMapping(value = "sysMenu/listMenus.do", method = {RequestMethod.GET,RequestMethod.POST})
- @ResponseBody
- public List<MenuTree> listMenus(@RequestParam(required=false) long pid) {
- logger.debug(" listMenus begin [pid] = " + pid);
- List<MenuTree> result = null;
- try {
- result = sysMenuDS.listMenus(pid);
- } catch(Exception e) {
- logger.error("listMenus error :" + e.getMessage());
- e.printStackTrace();
- }
- logger.debug(" listMenus end ..");
- return result;
- }
- /**
- * 获取配额详情
- * @param id
- * @param parentId
- * @return
- */
- @RequestMapping(value = "sysMenu/getMenuDetail", method = RequestMethod.GET)
- @ResponseBody
- public SysMenu getMenuDetail(Long id) {
- logger.debug("getMenuDetail begin [id] = " + id);
- SysMenu menu = null;
- try {
- menu = sysMenuDS.getMenuDetail(id);
- } catch(Exception e) {
- logger.error("getMenuDetail error :" + e.getMessage());
- e.printStackTrace();
- }
- logger.debug("getMenuDetail end ..");
- return menu;
- }
- @RequestMapping(value = "sysMenu/saveOrUpdateMenu", method = RequestMethod.POST)
- @ResponseBody
- public String saveOrUpdateMenu(SysMenu menu){
- logger.debug("saveOrUpdateMenu begin ..");
- try {
- sysMenuDS.saveOrUpdateMenu(menu);
- } catch(Exception e) {
- logger.error("saveOrUpdateMenu error :" + e.getMessage());
- e.printStackTrace();
- }
- logger.debug("saveOrUpdateMenu end ..");
- return Constants.RESULT_SUCCESS;
- }
- @RequestMapping(value = "sysMenu/removeMenu", method = RequestMethod.GET)
- @ResponseBody
- public String removeMenu(long id){
- logger.debug("removeMenu begin ..");
- try {
- sysMenuDS.removeMenu(id);
- } catch(Exception e) {
- logger.error("removeMenu error :" + e.getMessage());
- e.printStackTrace();
- }
- logger.debug("removeMenu end ..");
- return Constants.RESULT_SUCCESS;
- }
Service:
- @Service("iSysMenu")
- public class SysMenuDS implements ISysMenu {
- private static final Logger logger = LoggerFactory.getLogger(SysMenuDS.class);
- @Autowired
- private ISysMenuDao menuDao;
- /**
- * 菜单列表
- */
- @Override
- public List<MenuTree> listMenus(long pid) {
- if(pid == 0l)
- return new ArrayList<MenuTree>();
- List<SysMenu> menus = menuDao.findByParentId(pid);
- List<MenuTree> trees = convertCollectionToMenuTree(menus);
- if(pid == -1){
- trees = addRoot(trees);
- }
- return trees;
- }
- /**
- * 获取详情
- */
- @Override
- public SysMenu getMenuDetail(Long id) {
- if(id == 0l)
- return null;
- SysMenu menu = menuDao.findByMenuId(id);
- return menu;
- }
- /**
- * 保存或修改菜单
- */
- @Override
- public void saveOrUpdateMenu(SysMenu menu) {
- if(menu.getId() != null){
- SysMenu m = menuDao.findByMenuId(menu.getId());
- m.setMenuName(menu.getMenuName());
- m.setMenuUrl(menu.getMenuUrl());
- m.setOrderId(menu.getOrderId());
- m.setEnabledFlag(menu.getEnabledFlag());
- m.setRemark(menu.getRemark());
- ObjectUtil.setUpdatedBy(m);
- menu = m;
- }else{
- ObjectUtil.setCreatedBy(menu);
- }
- menuDao.save(menu);
- }
- @Override
- public void removeMenu(long id) {
- if(hasChildren(id)){
- menuDao.deleteChildrenById(id);
- }
- menuDao.remove(id);
- }
- /**
- * 添加根节点
- * @param children
- * @return
- */
- private List<MenuTree> addRoot(List<MenuTree> children) {
- List<MenuTree> result = new ArrayList<MenuTree>();
- MenuTree root = new MenuTree();
- root.setId(String.valueOf(-1l));
- root.setPid(String.valueOf(-1l));
- root.setText("菜单管理");
- root.setChecked(false);
- root.setIconCls("");
- root.setState("open");
- root.setChildren(children);
- result.add(root);
- return result;
- }
- public boolean hasChildren(long id){
- List<SysMenu> children = menuDao.findByParentId(id);
- if(children != null && children.size() > 0){
- return true;
- }
- return false;
- }
- public MenuTree convertToMenuTree(SysMenu menu){
- MenuTree tree = new MenuTree();
- tree.setId(String.valueOf(menu.getId()));
- tree.setPid(String.valueOf(menu.getSupId()));
- tree.setText(menu.getMenuName());
- if(hasChildren(menu.getId())){
- tree.setState("closed");
- }else{
- tree.setState("open");
- }
- return tree;
- }
- public List<MenuTree> convertCollectionToMenuTree(List<SysMenu> ls){
- List<MenuTree> trees = new ArrayList<MenuTree>();
- if(ls == null || ls.size() == 0)
- return trees;
- for(SysMenu menu : ls){
- trees.add(convertToMenuTree(menu));
- }
- return trees;
- }
- }
相关CSS:
- .icon-tip {
- background: url('icons/tip.png') no-repeat;
- }
- .tree-folder-open {
- background: url('images/tree_folder_open.gif') no-repeat;
- }
- .tree-folder {
- display: inline-block;
- background: url('images/tree_folder.gif') no-repeat;
- width: 16px;
- height: 18px;
- vertical-align: middle;
- }
- .tree-node-selected {
- background: url('images/tree_selected_bg.png') left bottom no-repeat;
- height: 26px;
- line-height: 26px;
- }
Jquery easyui tree 一些常见操作的更多相关文章
- Jquery easyui tree的使用
这个ui用的一切都是json数据.树也是如此! 后台需要返回与格式匹配的json数据才能正确加载树. 页面定义一个ui: <ul id="messageInfoAddTree" ...
- Jquery easyui Tree的简单使用
Jquery easyui Tree的简单使用 Jquery easyui 是jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻 ...
- jquery easyui tree dialog
<script type="text/javascript" src="<%=request.getContextPath()%>/include/ja ...
- Jquery EasyUI Tree .net实例
图片: 针对tree: 数据库: CREATE TABLE [dbo].[SystemModel]( [Id] [,) NOT NULL, [Name] [nvarchar]() NULL, [Fat ...
- Jquery EasyUI Tree树形结构的Java实现(实体转换VO)
前一阵做的OA项目,有一个是组织架构的树,因为是分开做的,我做的是Controller和页面,其他组做的Service和Dao,因为之前一直没有商量页面用什么框架做比较好,导致,Dao层取出来的数据都 ...
- jQuery 自学笔记—8 常见操作
jQuery 拥有可操作 HTML 元素和属性的强大方法. jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力. jQuery 提供一系列与 DOM 相关的方法,这使 ...
- easyui 进阶之tree的常见操作
前言 easyui是一种基于jQuery的用户界面插件集合,它为创建现代化,互动,JavaScript应用程序,提供必要的功能,完美支持HTML5网页的完整框架,节省网页开发的时间和规模.非常的简单易 ...
- JQuery EasyUI Tree
Tree 数据转换 所有节点都包含以下属性: id:节点id,这个很重要到加载远程服务器数据 which is important to load remote data text: 显示的节点文本 ...
- JQuery EasyUI Tree组件的Bug记录
记录一下使用项目中使用EasyUI遇到的bug,废话少说直接上菜 - _-(bug)..... bug :: .netcore创建一个web应用时候,会自动引入jQuery库以及一些插件,但是在 ...
随机推荐
- Linux页面回收概述
本文主要介绍了一些page reclaim机制中的基本概念.这份文档其实也可以看成阅读ULK第17章第一小节的一个读书笔记.虽然ULK已经读了很多遍,不过每一遍还是觉得有收获.Linux内核虽然不断在 ...
- Python 字典 values() 方法
描述 Python 字典 values() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有值. 语法 values() 方法语法: D.values() 参数 无 ...
- Spring事务管理实现方式之编程式事务与声明式事务详解(转)
原文:https://blog.csdn.net/liaohaojian/article/details/70139151 编程式事务 编码方式实现事务管理(代码演示为JDBC事务管理) Spring ...
- 在C#中使用WMI查询进程的用户信息
这是一个使用WMI查询信息的例子.看之前请对WMI有一个简单的了解,可以百度,或者查看我上一篇:WMI测试器 主要代码:(需要添加对System.Management的引用) //创建Win32_Pr ...
- vim:隆重推荐括号补全插件--auto-pairs
太好用了,括号相关的各种麻烦都一一解决,剩下的就是熟练,熟练,在熟练了.呵呵 连教程都做得这么好,先放这里,以后慢慢翻译. Auto Pairs Insert or delete brackets, ...
- 批处理学习笔记1 - Hellow World
记录自己学习批处理的一点总结吧. 批处理的好处: 可以配合vs,在build完文件之后执行自己的批处理命令. 可以批量修改文件名,或者进行复杂的查询等,对文件可编程操作. 从Hellow world开 ...
- 五个你必须知道的javascript和web debug技术
转:http://js8.in/2013/11/20/%E4%BA%94%E4%B8%AA%E4%BD%A0%E5%BF%85%E9%A1%BB%E7%9F%A5%E9%81%93%E7%9A%84j ...
- [cocos2dx笔记005]一个字符串管理配置类
在用vs开发cocos2dx过程中.要显示的中文,要求是UTF-8格式的才干正常显示出来.但VS通常是ANSI格式保存,这样,在代码中写入的中文字符串,执行后.显示的就是乱码. 为了正确显示中文.或支 ...
- haproxy-1.6.11 make 报错
# make TARGET=linux26 USE_OPENSSL= ADDLIB=-lz gcc -Iinclude -Iebtree -Wall -O2 -g -fno-strict-aliasi ...
- 利用U盘进行软件加密的方法
利用U盘进行软件加密的方法 一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密 ...