前段时间用了js的插件dtree,确实是比较好上手,但是遗憾的是没有多选框,网上也看到了关于多选框的扩展,但要么没有办法动态的删除和扩展节点,要么节点上下级的级联有问题,或者只支持两级菜单级联……本文主要是基于dtree的基本功能,实现了以下功能:
1、增加了多选框。
2、增加了多选框的级联操作,当点击当前多选框时,其下级(无限级)所有多选框状态与当前点击的多选框保持一致;如果选中当前多选框,其所有上级多选框均被选中;取消当前多选框的选中状态,如果其同级所有菜单都未选中则取消其上级菜单的选中状态,并一直级联到顶层菜单。
3、支持返回所有选中菜单的功能。
修改方法(也可以修改dtree.js文件,但是由于我本地牵扯到后台加载二级管理员已有菜单在前台默认选中,并支持动态增删功能,所以没有写在dtree.js里面):
1、dtree加载部分:
<script type="text/javascript"> var d = new dTree('d'); d.add(0,-1,'<input type="checkbox" name="dTreeChBox" style="display:none;" value="-1" id="0"/>'+'功能列表'); $.ajax({ url:"user_loadMenu.do", type:"post", cache:false, async:false, dataType:"json", error:function(xhr,status,err){ alert("系统错误,稍后重试!!"); }, success:function(data){ for(var i = 0; i < data.length; i++){ d.add(data[i].nodeId,data[i].pNodeId,'<input type="checkbox" onclick="clickCheckBox(this,true)" name="dTreeChBox" style="VERTICAL-ALIGN:middle;WIDTH:18px;HEIGHT:18px;" value="'+data[i].pNodeId+'" id="'+data[i].nodeId+'"/>'+data[i].nodeName,data[i].linkUrl,data[i].title,data[i].target); } } }); document.write(d); d.openAll(); </script>
2、多选框事件部分:
function clickCheckBox(obj,flag){ //flag用于保持所有其子节点与当前节点状态相同(由于牵扯到递归,所以用flag只对点击时的当前节点有效) if(flag){ subSameWithParent(obj); } var flag = false; //alert($("[name=dTreeChBox]:checked").length); //选中所有其父节点 var id = $(obj).attr("id"); var pId= $(obj).val(); if($(obj).attr("checked")){//当前节点选中,如果其父节点没有选中,则选中父节点 if(!$("#"+pId).attr("checked") && pId != 0){ $("#"+pId).attr("checked",true); clickCheckBox($("#"+pId)[0],flag); } }else{//取消当前节点选中状态,如果所有同级节点都未选中,更改父节点为未选中状态 if($("[name=dTreeChBox][value="+pId+"]:checked").length == 0){ if($("#"+pId).attr("checked") && pId != 0){ $("#"+pId).attr("checked",false); clickCheckBox($("#"+pId)[0],flag); } } } }
//点击当前节点,所有其下级(无限级)菜单状态与其保持一致的代码 function subSameWithParent(ob){ var id = $(ob).attr("id"); $("[name=dTreeChBox][value="+id+"]").attr("checked",$(ob).attr("checked")); if($("[name=dTreeChBox][value="+id+"]").length != 0){ for(var i = 0; i < $("[name=dTreeChBox][value="+id+"]").length ; i++){ var subObj = $("[name=dTreeChBox][value="+id+"]")[i]; subSameWithParent(subObj); } } }
3、获取选中菜单节点ID的代码:
var str = ""; for(var i = 0; i < $("[name=dTreeChBox]:checked").length; i++){ str += $("[name=dTreeChBox]:checked").eq(i).attr("id")+","; } str = str.substring(0,str.length-1);
返回的str为ID的以逗号分隔的字符串,可以通过ajax或是将其赋值给dom元素在通过form表单提交,由后台做统一处理。
相关推荐
- **节点操作**:`dtree` 支持添加、删除、移动节点等操作,可以根据需要扩展功能。 - **响应式设计**:为了适应不同设备,可以结合Bootstrap或其他响应式框架优化`dtree`的显示。 总结,`dtree`是一个实用的...
总之,dtree是一款值得推荐的JavaScript库,它不仅功能全面、易于集成,而且具有良好的扩展性和高度的自定义能力,是Web开发者构建树状数据展示界面的理想选择。通过本文的介绍,相信读者已经对dtree有了深入的了解...
3. **模块化**:采用模块化开发,如使用CommonJS或ES6模块,使得dtree可以单独引入和使用。 4. **扩展性**:设计良好的插件系统,允许用户自定义节点渲染、事件处理等,提高组件的灵活性。 在JavaScript中,dtree...
2. `dtree_rightclick.js`:这是右键dtree的实现,基于`dtree.js`进行扩展,添加了右键菜单功能。 3. `dtree_checkbox.js`:复选框dtree的实现,修改了`dtree.js`的源码,加入了复选框元素和相应的逻辑。 4. HTML和...
dtree是layui中的一个扩展组件,专门用来处理树形数据的展示和交互。 **dtree的主要特点:** 1. **易用性**:layui dtree的API设计简单明了,开发者可以通过几行代码快速实现树形结构的展现。 2. **灵活性**:它...
### 使用步骤 1. **引入dtree**: 首先,在HTML文件中通过`<script>`标签引入dtree的JS文件。 2. **定义数据**: 创建一个JSON对象,表示树的结构,包括节点ID、父节点ID、节点文本等信息。 3. **初始化dtree**: 在...
- **可扩展的数据模型**:设计能够反映树结构变化的数据模型,比如使用数据库存储节点信息,支持增删改查操作。 - **事件监听**:监听用户的交互事件,如点击、拖拽等,触发相应的树结构更新。 - **异步处理**:...
dtree_checkbox:复选框扩展** dtree_checkbox是dtree的一个增强版本,它引入了复选框功能,使得用户可以选择一个或多个节点。这一特性在需要多选操作的场景下非常实用,例如在文件管理器中选择多个文件进行操作。...
**Ajax树技术详解:以stree扩展dtree为例** 在Web开发中,树形结构的展示经常被用于数据管理和组织,比如目录结构、组织架构、菜单系统等。传统的静态树结构在数据量大或者需要实时更新的情况下,用户体验往往不佳...
3. **dtree**:DTree是一种可扩展的JavaScript组件,用于创建和展示树状结构,常用于文件管理、组织架构展示等场景。它可以根据需求进行定制,包括节点的图标、展开/折叠行为等。在项目中,`dtree.html`可能是包含了...
7. **插件扩展**:DTree可能有其他扩展功能或插件,如搜索、多选、拖放排序等,资料会介绍如何使用这些扩展。 8. **兼容性和性能优化**:如何确保DTree在不同浏览器上的兼容性,以及如何优化大量节点时的性能。 9....
本文将深入探讨“js dtree无限级扩展的树形菜单”这一主题,这是一种基于JavaScript的树形菜单插件,适用于构建多层次、可扩展的导航系统。 首先,我们来了解“js dtree”的基本概念。js dtree 是一个JavaScript库...
【dtree+鼠标右键】是一种在IT领域中常见的用于文件和目录管理的工具,它扩展了命令行界面下的树状目录展示,并结合了鼠标右键操作,为用户提供了更直观且高效的文件操作方式。dtree通常指的是"Directory Tree"或...
通过分析这些文件,我们可以学习如何在项目中集成和使用dTree,包括但不限于如何导入库、如何创建基本的树结构、如何添加节点、如何处理用户交互等。 总之,dTree是一个强大的JavaScript工具,尤其适用于构建具有复...
4. `img`: 这个目录可能包含了`dtree.js` 使用到的一些图片资源,比如展开/折叠箭头图标,或者是自定义的节点图标。你可以根据需要替换这些图片,或者添加新的图标以扩展功能。 使用`dtree.js` 创建树形结构的基本...
这个压缩包包含了dTree.js的实现文件以及相关的API文档和示例,可以帮助开发者快速理解和使用这个库。 首先,我们来看`dtree.css`文件,这是dTree的样式表。它定义了树形结构的样式,包括节点的展开/折叠图标、选中...
- 可以通过插件系统或自定义代码扩展dtree的功能,如添加搜索、拖放、拖拽排序等特性。 通过理解和掌握这些知识点,开发者可以有效地在前端项目中实现和优化dtree树结构,提供良好的用户体验。
在IT领域,构建用户界面时,树形目录是一种常见的数据结构,用于展示层次关系的数据,例如文件系统或网站导航。`dtree` 是一个轻量级...通过学习和使用`dtree`,你可以快速地为网页增加动态的、交互式的树形目录功能。
**使用Dtree的步骤:** 1. **引入资源**:在HTML文件中引入dtree的CSS和JavaScript文件。 2. **准备数据**:根据Dtree的格式,准备表示树形结构的数据源。 3. **初始化插件**:在JavaScript代码中调用dtree方法,...