JavaScript源程序--树形菜单
js 树状结构,输入id返回当前id节点和所有子节点
js 树状结构,输入id返回当前id节点和所有子节点1.引言1.1 概述概述部分的内容:在计算机科学中,树状结构是一种重要的数据结构,它模拟了自然界中的树形关系。
树状结构由根节点、子节点和叶节点组成,通过节点之间的连线表示它们之间的关系。
在前端开发中,JavaScript语言提供了一种简洁而强大的方式来创建和操作树状结构。
通过使用JavaScript,我们可以轻松地构建一个树形的数据结构,并可以对其中的节点进行各种操作,例如增加、删除、查找等。
本文主要介绍了如何通过JavaScript实现一个树状结构的数据结构,并提供了一个根据节点ID返回当前节点及其所有子节点的功能。
通过这个功能,我们可以方便地获取到指定节点下的所有子节点,从而实现对树状结构的有效操作。
文章的结构如下:首先,我们会对树状结构的定义和特点进行详细介绍,包括了树状结构的基本概念和重要特性。
其次,我们会介绍如何使用JavaScript来实现一个树状结构的数据结构,包括树的创建、节点的增删改查等操作。
最后,我们将总结本文的内容,并讨论树状结构在前端开发中的应用前景。
通过本文的学习,读者将对JavaScript中的树状结构有更深入的理解,并能够应用这些知识来解决前端开发中的问题。
无论是构建一个复杂的网站还是开发一个交互式的应用程序,树状结构都是一个非常有用且灵活的工具,相信本文对读者会有所帮助。
敬请期待下面的内容,让我们开始吧!1.2 文章结构文章结构部分介绍了整篇文章的组织和框架。
本文分为引言、正文和结论三个部分。
下面将对每个部分进行详细介绍。
引言部分主要介绍了本文要讨论的主题——js树状结构。
首先对树状结构的概念进行了简单的概述,接着介绍了文章的结构和目的。
通过引言,读者可以对将要阐述的内容有一个整体的了解。
正文部分是本文的核心,主要分为两个小节。
首先是对树状结构的定义和特点的介绍。
文章将从何为树状结构开始,逐步深入地解释了树状结构的各个要素和特点。
js实现树形结构的方法
js实现树形结构的方法在Web开发中,经常需要展示树形结构的数据,比如文件目录、组织结构等。
JavaScript是一种广泛应用于Web开发的脚本语言,它提供了丰富的方法和技术来实现树形结构的展示和操作。
本文将介绍几种常用的JavaScript方法来实现树形结构,并详细说明每种方法的步骤和实现原理。
一、使用对象和数组实现树形结构1.创建一个对象,表示树的节点。
该对象包含一个value属性,用于存储节点的值;一个children属性,用于存储子节点。
2.创建一个数组,表示树的根节点。
该数组中的每个元素都是一个节点对象。
3.可以通过操作对象和数组,实现树节点的增加、删除和遍历操作。
-增加节点:创建一个新的节点对象,设置其value和children属性,然后将节点添加到指定的父节点的children数组中。
-删除节点:找到要删除的节点对象,并从其父节点的children数组中将这个节点移除。
-遍历节点:使用递归方式遍历节点,可以使用深度优先遍历或广度优先遍历方法。
下面是一个使用对象和数组实现的树形结构示例。
假设有一个组织结构树,根节点为公司,下面有多个部门,每个部门又可以有多个子部门。
每个节点的值为部门的名称。
```javascript//创建根节点var company={value:"公司",children:[]//添加子节点var department1={value:"部门1",children:[]company.children.push(department1);var department2={value:"部门2",children:[]company.children.push(department2);var subDepartment={value:"子部门",children:[]department1.children.push(subDepartment);//删除节点function removeNode(node,parentNode){var index=parentNode.children.indexOf(node);if(index!==-1){parentNode.children.splice(index,1);removeNode(subDepartment,department1);//遍历节点function traverseNode(node){console.log(node.value);for(var i=0;i<node.children.length;i++){ traverseNode(node.children[i]);traverseNode(company);以上示例通过创建对象和数组的方式实现了一个简单的树形结构,并进行了节点的增加、删除和遍历操作。
html js树形折叠菜单实例
html js树形折叠菜单实例HTML JS Treeview 可以帮助您在网站上创建一个树形折叠菜单。
以下是一个简单的示例:HTML代码:```html<!DOCTYPE html><html><head><title>Treeview Example</title><style>ul.treeview {list-style-type: none;padding: 0;margin: 0;}ul.treeview li {padding: 5px;position: relative;}ul.treeview li.expandable:before {content: '\25B6';position: absolute;left: -10px;}ul.treeview li.collapsible:before {content: '\25BC';position: absolute;left: -10px;}ul.treeview li ul {display: none;margin-left: 20px;}</style></head><body><ul class="treeview"><li class="expandable">Item 1<ul><li>Sub-item 1</li><li>Sub-item 2</li><li>Sub-item 3</li></ul></li><li class="expandable">Item 2<ul><li>Sub-item 1</li><li>Sub-item 2</li></ul></li><li>Item 3</li></ul><script>var expandableItems = document.querySelectorAll('.expandable');for (var i = 0; i < expandableItems.length; i++) {expandableItems[i].addEventListener('click', function() {var submenu = this.querySelector('ul');if (submenu.style.display === "block") {submenu.style.display = "none";this.classList.remove('collapsible');this.classList.add('expandable');} else {submenu.style.display = "block";this.classList.remove('expandable');this.classList.add('collapsible');}});}</script></body></html>```上述示例中,我们首先在`<ul>`元素上添加了一个名为`treeview`的类。
ztree的用法 -回复
ztree的用法-回复ZTree是一款用于展示、浏览和编辑树形数据结构的JavaScript插件。
它提供了丰富的功能和选项,使用户可以轻松地操作和管理树形数据。
本文将详细介绍ZTree的用法,并逐步回答与其相关的问题。
1. ZTree的特点ZTree具有以下几个主要特点:- 快速:ZTree使用了高性能的算法和优化,具有快速响应和渲染速度。
- 灵活:ZTree支持在树形结构上进行多种编辑和操作,如增加、删除、更新和移动节点等。
- 易用:ZTree提供了简洁明了的API接口,方便用户对树形结构进行定制和扩展。
- 轻量级:ZTree采用纯JavaScript编写,文件体积小,加载速度快。
2. ZTree的安装和引用要使用ZTree,我们首先需要引入ZTree的相关文件。
可以通过以下几种方式引用:- 下载:从ZTree的官方网站(- CDN引用:通过使用CDN(内容分发网络)引用ZTree文件。
在HTML 文件中添加以下代码:<script src="<link rel="stylesheet" href="其中,`jquery.ztree.all.min.js`是ZTree的核心JS文件,`zTreeStyle.css`是ZTree的样式文件。
3. 创建ZTree在HTML页面中创建一个容器元素,用于显示ZTree。
例如:<div id="treeContainer"></div>然后,在JavaScript文件中添加以下代码:(document).ready(function(){var setting = {配置项};var zNodes = [树节点数据];.fn.zTree.init(("#treeContainer"), setting, zNodes);});在上述代码中,`setting`是ZTree的配置项,可以根据需求进行个性化设置。
树形菜单导航源代码
简洁的多级树形导航菜单1、xhtml部分<ul id="menuList"><li class="menubar"><a href="#" id="productsActuator" class="actuator">我的收藏夹</a><ul id="productsMenu" class="menu"><li><a href="#" id="newPhonesActuator" class="actuator">个人网站</a> <ul id="newPhonesMenu" class="submenu"><li><a href="/">网页代码库</a></li><li><a href="/">网页设计师</a></li><li><a href="/">JunChen博客</a></li> <li><a href="/andy/">毅博客</a></li></ul></li><li><a href="#" id="compareActuator" class="actuator">国外网站</a><ul id="compareMenu" class="submenu"><li><a href="/">A List Apart</a></li><li><a href="/">CSS禅意花园</a></li><li><a href="/">456 Berea Street</a></li><li><a href="/">W3C网站</a></li></ul></li></ul></li></ul>2、css部分#menuList {margin: 0px;padding: 10px 0px 10px 15px;border: 1px solid #CCC;width: 203px;background-color: #EEE;color: #000;font-family: verdana, helvetica, arial, sans-serif; }li.menubar {font-size: 12px;line-height: 1.8em;list-style: none;}.menu, .submenu {display: none;margin-left: 15px;padding: 0px;}.menu li, .submenu li {list-style: none;}#menuList a {background-color: transparent;color: #000;font-size: 12px;margin-left: 15px;text-decoration: none;}#menuList a:hover {text-decoration: underline;}3、Javascript部分if (!document.getElementById) {document.getElementById = function() { return null; } }function initializeMenu(menuId, actuatorId) {var menu = document.getElementById(menuId);var actuator = document.getElementById(actuatorId);if (menu == null || actuator == null) return;actuator.onclick = function() {var display = menu.style.display;menu.style.display = (display == "block") ? "none" : "block"; return false;}}window.onload = function() {initializeMenu("productsMenu", "productsActuator");initializeMenu("newPhonesMenu", "newPhonesActuator");initializeMenu("compareMenu", "compareActuator");}简洁的双级导航菜单1、xhtml部分源代码:<ul id="butong-nav"><li><a href="#">Home</a></li><li><a href="#">About</a><ul><li><a href="#">History</a></li><li><a href="#">Team</a></li><li><a href="#">Offices</a></li></ul></li><li><a href="#">Services</a><ul><li><a href="#">Web Design</a></li><li><a href="#">Internet Marketing</a></li><li><a href="#">Hosting</a></li><li><a href="#">Domain Names</a></li><li><a href="#">Broadband</a></li></ul></li><li><a href="#">Contact Us</a><ul><li><a href="#">United Kingdom</a></li> <li><a href="#">France</a></li><li><a href="#">USA</a></li><li><a href="#">Australia</a></li></ul></li></ul>2、css部分源代码#butong-nav, #butong-nav ul {font: normal 11px verdana;margin: 0;padding: 0;list-style: none;width: 150px;border-bottom: 1px solid #CCC;}#butong-nav li {position: relative;}#butong-nav ul {position: absolute;left: 149px;top: 0;display: none;}#butong-nav li a {display: block;text-decoration: none;color: #777;background: #fff;padding: 5px;border: 1px solid #ccc;border-bottom: 0;}#butong-nav li a:hover {text-decoration: underline;}* html #butong-nav li {float: left;height: 1%;}* html #butong-nav li a {height: 1%;}#butong-nav li:hover ul, #butong-nav li.over ul {display: block;}3、Javascript部分源代码startList = function() {if (document.all && document.getElementById) {navRoot = document.getElementById("butong-nav");for (i=0; i<navRoot.childNodes.length; i++) {node = navRoot.childNodes[i];if (node.nodeName == "LI") {node.onmouseover = function() {this.className += "over";}node.onmouseout = function() {this.className = this.className.replace("over", ""); }}}}}window.onload = startList;。
左侧树形菜单消失的解决方法
左侧树形菜单消失的解决方法1. 检查HTML和CSS代码,确保左侧树形菜单的元素与样式是否正确加载。
2. 使用浏览器开发者工具检查是否有错误的JavaScript代码或错误信息导致左侧树形菜单消失。
3. 确保左侧树形菜单的容器元素没有被隐藏或者被覆盖,可以通过检查CSS中的z-index属性来排除这种可能。
4. 确保左侧树形菜单的宽度和高度设置正确,避免因为尺寸问题而导致菜单消失。
5. 检查左侧树形菜单的定位方式,确认是否设定了正确的相对或绝对定位。
6. 确认左侧树形菜单是否被其他元素遮挡,可以通过调整z-index属性或调整元素位置来解决。
7. 检查左侧树形菜单所在的父容器的overflow属性,确保不会将菜单内容裁剪隐藏。
8. 使用浏览器兼容性工具检查是否有不同浏览器对左侧树形菜单的渲染问题,适当调整样式以解决兼容性问题。
9. 如果左侧树形菜单是通过JavaScript动态生成的,确认数据加载和菜单渲染逻辑是否正确。
10. 检查是否有事件监听器或触发器导致了左侧树形菜单在特定条件下消失,针对这些逻辑进行排查和修复。
11. 如果左侧树形菜单依赖于后端接口数据,确保接口返回的数据格式和内容正确,避免因为数据问题而导致菜单消失。
12. 修改左侧树形菜单的样式,例如背景色、边框等,以便于快速发现菜单的位置和状态。
13. 检查浏览器缓存是否导致菜单内容未能正确加载,适当清除浏览器缓存并重新加载页面。
14. 若左侧树形菜单涉及到页面切换或加载,确认页面跳转的逻辑是否导致菜单消失,可以尝试延迟菜单渲染的时机或进行预加载。
15. 调试页面的JavaScript代码,查看是否有其他脚本与左侧树形菜单的显示逻辑产生冲突。
16. 尝试使用不同的浏览器测试,以确认是否存在特定浏览器导致菜单消失的问题。
17. 确认左侧树形菜单相关的样式表是否正确引入,排查样式文件路径问题。
18. 检查页面布局是否存在响应式设计,可能是因为页面宽度变化导致左侧树形菜单消失。
移动端实现树级菜单的方法
移动端实现树级菜单的方法
在移动端实现树级菜单的方法有很多种,这里我会列举几种常见的方法:
1. 嵌套列表(Nested List):这是最简单的方式,每个节点可以是一个列
表或者一个子菜单。
然而,这种方法可能会在移动设备上显得过于复杂和混乱,因为需要滚动和缩放才能查看所有的菜单项。
2. 展开/折叠菜单(Accordion Menu):这是另一种常见的方法,每个节
点都有一个展开和折叠的按钮。
当用户点击一个节点时,该节点及其所有子节点会展开或折叠。
这种方法的好处是用户可以一次查看所有的菜单项,但是它可能会在层次很深的菜单上显得很混乱。
3. 侧边抽屉菜单(Side Drawer Menu):这是一种常见的移动端导航模式,用户可以从屏幕的一侧滑动打开一个包含所有菜单项的列表。
这种方法的优点是用户可以快速访问任何菜单项,但是如果菜单项太多,用户可能需要多次滑动才能找到他们想要的。
4. 面包屑菜单(Breadcrumb Menu):这种菜单通过显示当前节点的父节点来提供一种导航的方式。
虽然它不适合所有的应用,但是对于那些需要用户知道他们当前位置的应用来说,这是一个很好的选择。
5. 卡片式菜单(Card Menu):在这种方法中,每个节点都显示为一个卡片,用户可以点击卡片来打开或关闭它。
这种方法的优点是用户可以清楚地看到哪些节点是开放的,但是它可能会在层次很深的菜单上显得很混乱。
以上就是一些常见的实现树级菜单的方法,具体使用哪种方法取决于你的应用的需求和用户的习惯。
JSP树形菜单根据数据库默认选择
// TreeInfo info = null;
// for(Iterator i = c.iterator();i.hasNext();){
// info = (TreeInfo)i.next();
Tree[1] = "2|1|Page 1.1|#";
Tree[2] = "3|1|Page 1.2|#";
Tree[3] = "4|3|Page 1.2.1|#";
Tree[4] = "5|1|Page 1.3|#";
Tree[5] = "6|2|Page 1.1.1|#";
JSP树形菜单的实现(转载)
(2009-04-20 15:21:03)
转载
标签:
杂谈 分类:技术讲解
1。原理简介
dtree是一个免费的javascript脚本,只需定义有限的几个参数,就可以做出漂亮的树型菜单。下载目录:/javascripts/tree/
String userPwd = "root";
String url = "jdbc:mysql://" + host + port + "/" + serverID ;
Connection conn = null ;
PreparedStatement ps = null;
contents.append(i);
contents.append("]=\"");
jsp树形菜单完整代码及截图
<html><head><style>#d1{width:200;height:400;background-color:#cccccc;border:2px solid black;left:30;top:30;position:absolute;}#d1_head{height:30;background-color:blue;color:white;font-size:20pt;}#d1_body{background-color:#cccccc;}.list li{list-style-type:none}.image image:向下.png;</style><script>function doAction(index){var obj = document.getElementById('u' + index);if(obj.style.display == 'none'){obj.style.display = 'block';if(index=='1'){document.getElementById("img1").src='向下.png';}else{document.getElementById("img2").src='向下.png';}}else{obj.style.display = 'none';if(index=='1'){document.getElementById("img1").src='向右.png';}else{document.getElementById("img2").src='向右.png';}}}function test(){var obj = document.getElementById('l1');alert(obj.innerHTML);}</script></head><body style="font-size:20pt;"><div id="d1"><div id="d1_head">树形菜单</div><ul class="list"><li><span onclick="doAction(1);"><img src="向右.png" id="img1"/>羽绒专区</span> </li><ul style="display:none;" id="u1"><li><a href="#">羽绒服</a></li><li><a href="#">羽绒夹克</a></li></ul><li><span onclick="doAction(2);"><img src="向右.png" id="img2"/>靴子专区</span> </li><ul style="display:none;" id="u2"><li><a href="#">雪地靴</a></li><li><a href="#">登山靴</a></li></ul></ul></div></div></body></html>下载两个指向不同的小图标用于区分。
javascript如何用递归写一个简单的树形结构示例
javascript如何⽤递归写⼀个简单的树形结构⽰例现在有⼀个数据,需要你渲染出对应的列表出来:var data = [{"id":1},{"id":2},{"id":3},{"id":4},];var str="<ul>";data.forEach(function(v,i){str+="<li><span>"+v.id+"</span></li>"})str="</ul>"$(doucment).append(str);哼,easy!语罢,⼜是⼀道题飞来!哦,还带了⼉⼦来当帮⼿。
我⼀个循环再⼀个循环,轻松带⾛你们var data2 = [{"id":1,children:[{"id":"child11"},{"id":"child12"}]},{"id":2},{"id":3children:[{"id":"child31"},{"id":"child32"}]},{"id":4},];var str="<ul>";data2.forEach(function(v,i){if(v.children&&v.children.length>0){str+="<li><span>"+v.id+"</span>";str+="<ul>";v.children.forEach(function(value,index){str+="<li><span>"+value.id+"</span>";})str="</ul>";str="</li>";}else{str+="<li><span>"+v.id+"</span></li>"}})str="</ul>"$(doucment).append(str);还有谁?var json=[{name:123,id:1children:[{name:453,id:456,children:[{name:789,id:777,children:[{name:"hahahqqq---qq",id:3232,children:[name:'son',id:"131********"]}]}]},{name:"Cessihshis" , id:12121}]},{name:"啊啊啊11", id:12},];竟然把全家都带来了,看我循环循环再循环⼤法。
javascript下拉列表中显示树形菜单的实现方法
javascript下拉列表中显⽰树形菜单的实现⽅法很简单的⼀个使⽤:点击菜单,能够显⽰下⾯的或者不显⽰。
1、主要⽬的:展现的是的⼀个菜单项,然后点击⼀下,隐藏,点⼀下,弹出下⾯的内容⽤到的是 overflow:hidden 和 overflow="visible"这两个属性在点击的function中,设置属性应该node.style.overflow="visible";当然设置tr的⾼度也是很重要的,要恰好让其他的选项隐蔽2、采⽤同样的技术,多加⼏个,但是就是传参数⽐较⿇烦,采⽤this传参很常⽤实现效果:<!DOCTYPE html><html><head><title>list.html</title><!--<link rel="stylesheet" type="text/css" href="./styles.css">--><style type="text/css">dl{height:18px;/*优先级问题,必须要写*/overflow:hidden;}dd{margin:0px;padding:0px;}.close{height:18px;/*优先级问题,必须要写*/overflow:hidden;}.open{height:80px;overflow:visible;background-color:#ff8000;}</style><script type="text/javascript">function click2(node1){// alert("aa"+node.nodeName);// tdvar nodes=node1.parentNode;// alert(nodes.nodeName);// alert("aa"+nodes.className);//※※通过传进的对象判断采⽤哪种css模式if(nodes.className=="open"){nodes.className="close";}else{nodes.className="open";}}</script></head><body><!--层次列表--><!--当很多时候采⽤传参就很⿇烦,每个都需要去传参<dl><dt onclick="click1(0)">菜单条1</dt><dd>菜单1</dd><dd>菜单2</dd><dd>菜单3</dd><dd>菜单4</dd></dl><dl><dt onclick="click1(1)">菜单条2</dt><dd>菜单11</dd><dd>菜单22</dd><dd>菜单33</dd><dd>菜单44</dd></dl><dl><dt onclick="click1(2)">菜单条3</dt><dd>菜单12</dd><dd>菜单23</dd><dd>菜单34</dd><dd>菜单45</dd></dl>--><br/><br/><hr/><!--<dl class="close">先⼿动采⽤css测试,可以然后采⽤编程使⽤--><dl><dt onclick="click2(this)">1菜单条1</dt><dd>菜单1</dd><dd>菜单2</dd><dd>菜单3</dd><dd>菜单4</dd></dl><dl><dt onclick="click2(this)">2菜单条2</dt><dd>菜单11</dd><dd>菜单22</dd><dd>菜单33</dd><dd>菜单44</dd></dl><dl><dt onclick="click2(this)">3菜单条3</dt><dd>菜单12</dd><dd>菜单23</dd><dd>菜单34</dd><dd>菜单45</dd></dl></body></html>点击后:设置背景颜⾊(css设置)如何利⽤javascript制作下拉列表中显⽰树形菜单,相信⼤家通过这篇⽂章应该有了⼤概的思路,也相信⼤家制作的下拉列表中显⽰树形菜单效果⽐⼩编做的还精致。
js 树状结构,输入id返回当前id节点和所有子节点 -回复
js 树状结构,输入id返回当前id节点和所有子节点-回复"js树状结构,输入id返回当前id节点和所有子节点"在JavaScript中,树状结构是一种常用的数据结构,它由节点和边组成,其中每个节点可以包含一个或多个子节点。
在本文中,我们将深入探讨如何使用JavaScript编写一个函数,该函数接受一个id作为输入,并返回该id节点及其所有子节点。
一、了解树状结构在计算机科学中,树状结构是一种层级结构的数据结构,其中树的顶部被称为根节点,每个节点都可以有一个或多个子节点。
每个节点之间通过边进行连接,形成一个树形的层次关系,这使得我们可以轻松地对节点进行遍历和操作。
二、实现树状结构首先,我们需要定义一个节点类,该类包含节点的id和子节点的数组。
以下是一个基本的节点类的伪代码示例:class Node {constructor(id) {this.id = id;this.children = [];}}现在,我们可以使用Node类构建一个树状结构。
我们可以通过将根节点与其他节点连接,形成一个复杂的层次结构。
以下是一个示例树的代码示例:const rootNode = new Node(1);const node2 = new Node(2);const node3 = new Node(3);const node4 = new Node(4);const node5 = new Node(5);rootNode.children.push(node2);rootNode.children.push(node3);node2.children.push(node4);node3.children.push(node5);现在,我们已经建立了一个包含rootNode、node2、node3、node4和node5的树。
接下来,我们将进一步实现函数,以返回给定id节点及其所有子节点。
多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)一、问题研究的背景和意义在Web应用程序开发领域,基于AJAX技术的JavaScript树形控件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项。
目前市场上常见的JavaScript框架及组件库中均包含自己的树形控件,例如JQuery、Dojo、Yahoo UI、Ext JS等,还有一些独立的树形控件,例如dhtmlxtree等,这些树形控件完美的解决了层次数据的展示问题。
展示离不开数据,树形控件主要利用AJAX技术从服务器端获取数据源,数据源的格式主要包括JSON、XML等,而这些层次数据一般都存储在数据库中。
“无限级树形菜单”,顾名思义,没有级别的限制,它的数据通常来自数据库中的无限级层次数据,这种数据的存储表通常包括id和parentId这两个字段,以此来表示数据之间的层次关系。
现在问题来了,既然树形控件的数据源采用JSON或XML等格式的字符串来组织层次数据,而层次数据又存储在数据库的表中,那么如何建立起树形控件与层次数据之间的关系,换句话说,如何将数据库中的层次数据转换成对应的层次结构的JSON或XML格式的字符串,返回给客户端的JavaScript 树形控件?这就是我们要解决的关键技术问题。
本文将以目前市场上比较火热的Ext JS框架为例,讲述实现无限级树形菜单的方法,该方法同样适用于其它类似的JS树形控件。
Ext JS框架是富客户端开发中出类拔萃的框架之一。
在Ext的UI控件中,树形控件无疑是最为常用的控件之一,它用来实现树形结构的菜单。
TreeNode用来实现静态的树形菜单,AsyncTreeNode用来实现动态的异步加载树形菜单,后者最为常用,它通过接收服务器端返回来的JSON格式的数据,动态生成树形菜单节点。
动态生成树有两种思路:一种是一次性生成全部树节点,另一种是逐级加载树节点(利用AJAX,每次点击节点时查询下一级节点)。
BootStrapJstree树形菜单的增删改查的实现源码
BootStrapJstree树形菜单的增删改查的实现源码1.⾸先需下载jstree的插件点击打开链接2.在页⾯引⼊插件js⽂件css⽂件<link rel="stylesheet" href="plugins/jstree/themes/classic/style.css" rel="external nofollow" ><script type="text/javascript" src="plugins/jstree/_lib/jquery.js"></script><script type="text/javascript"src="plugins/jstree/_lib/jquery.cookie.js"></script><script type="text/javascript"src="plugins/jstree/_lib/jquery.hotkeys.js"></script><script type="text/javascript" src="plugins/jstree/jquery.jstree.js"></script>3.初始化控件1)html<div id="demo2" class="demo" style="height:100px;"></div>2)js 使⽤ demo2来初始化树形控件<script type="text/javascript" class="source below">$(function() {$("#demo2").jstree({"json_data" : {"ajax" : {"url" : "http://localhost:8080/MemberManager/DepartmentTreeJson","data" : function(n) {// the result is fed to the AJAX request `data` optionreturn {"operation" : "get_children","id" : n.attr ? n.attr("id").replace("node_",""): 1};}}},"plugins" : ["themes","json_data","ui","crrm","contextmenu","search" ],}).bind("loaded.jstree",function(event, data) {}).bind("select_node.jstree",function(event, data) {if (data.rslt.obj.attr("id") != undefined) {}}).bind("remove.jstree",function(e, data) {data.rslt.obj.each(function() {$.ajax({async : false,type : 'POST',url : "http://localhost:8080/MemberManager/CreateNodeForDepartment",data : {"operation" : "remove_node","id" : this.id.replace("node_", "")},success : function(r) {if (!r.status) {data.inst.refresh();}}});});}).bind("remove.jstree",function(e, data) {data.rslt.obj.each(function() {$.ajax({async : false,type : 'POST',url : "http://localhost:8080/MemberManager/CreateNodeForDepartment", data : {"operation" : "remove_node","id" : this.id.replace("node_","")},success : function(r) {if (!r.status) {data.inst.refresh();}}});});}).bind("create.jstree",function(e, data) {$.post("http://localhost:8080/MemberManager/CreateNodeForDepartment",{"operation" : "create_node","id" : data.rslt.parent.attr("id").replace("node_",""),"position" : data.rslt.position,"title" : ,"type" : data.rslt.obj.attr("rel")},function(r) {if (r.status) {$(data.rslt.obj).attr("id", "node_" + r.id);} else {data.inst.refresh();$.jstree.rollback(data.rlbk);}});}).bind("rename.jstree",function(e, data) {$.post("http://localhost:8080/MemberManager/CreateNodeForDepartment",{"operation" : "rename_node","id" : data.rslt.obj.attr("id").replace("node_",""),"title" : data.rslt.new_name},function(r) {if (!r.status) {data.inst.refresh();$.jstree.rollback(data.rlbk);}});})// 1) the loaded event fires as soon as data is parsed and inserted// 2) but if you are using the cookie plugin or the core `initially_open` option:.one("reopen.jstree",function(event, data) {})// 3) but if you are using the cookie plugin or the UI `initially_select` option:.one("reselect.jstree",function(event, data) {});});</script></pre>4.代码解析<p></p><p><pre name="code" class="java">import java.util.List;public class Department {// 部门idprivate String departmentid;// 部门名称private String name;// ⽗级部门IDprivate String parentid;//同级之间的排序。
基于JavaScript实现树形下拉框
基于JavaScript实现树形下拉框平时会经常遇到树形结构的问题,⽐如显⽰⽬录结构等。
⼤多数情况下后台会返回这样的数据,如下:[{ id: 19, pid: 0, name: 'nodejs' },{ id: 20, pid: 19, name: 'express' },{ id: 21, pid: 19, name: 'mongodb' },{ id: 60, pid: 20, name: 'ejs' },{ id: 59, pid: 0, name: '前端开发' },{ id: 70, pid: 59, name: 'javascript' },{ id: 71, pid: 59, name: 'css' },{ id: 72, pid: 59, name: 'html' },{ id: 73, pid: 59, name: 'bootstrap' },{ id: 61, pid: 0, name: '视觉设计' },{ id: 63, pid: 61, name: '⽹页设计' },]这种数据结构后台容易处理,但是前台不好处理,需要⾸先将其转成树形json数据,如下:[{ id: 19, pid: 0, name: 'nodejs',children:[{ id: 20, pid: 19, name: 'express',children:[{ id: 60, pid: 20, name: 'ejs' }]},{ id: 21, pid: 19, name: 'mongodb' }]},{ id: 59, pid: 0, name: '前端开发',children:[{ id: 70, pid: 59, name: 'javascript' },{ id: 71, pid: 59, name: 'css' },{ id: 72, pid: 59, name: 'html' },{ id: 73, pid: 59, name: 'bootstrap' }]},{ id: 61, pid: 0, name: '视觉设计',children:[{ id: 63, pid: 61, name: '⽹页设计' }]},]这样就可以很⽅便的是⽤递归构建树形的组件。
bootstraptreeview树形菜单带复选框及级联选择功能
bootstraptreeview树形菜单带复选框及级联选择功能具体代码如下所⽰:<div id="searchTree"></div><script>var treeData = [{text: "Parent 1",nodes: [{text: "Child 1",nodes: [{text: "Grandchild 1"}, {text: "Grandchild 2",nodes: [{text: "Grandchild 2-1",nodes: [{text: "Grandchild 2-1-1"}, {text: "Grandchild 2-2-1",}]}, {text: "Grandchild 1-2",}]}]}, {text: "Child 2",nodes: [{text: "Grandchild 2-1"}, {text: "Grandchild 2-2",}]}]}, {text: "Parent 2",id:'11111'}, {text: "Parent 3"}, {text: "Parent 4"}, {text: "Parent 5"}];var nodeCheckedSilent = false;function nodeChecked(event, node) {if (nodeCheckedSilent) {return;}nodeCheckedSilent = true;checkAllParent(node);checkAllSon(node);nodeCheckedSilent = false;}var nodeUncheckedSilent = false;function nodeUnchecked(event, node) {if (nodeUncheckedSilent)return;nodeUncheckedSilent = true;uncheckAllParent(node);uncheckAllSon(node);nodeUncheckedSilent = false;}//选中全部⽗节点function checkAllParent(node) {$('#searchTree').treeview('checkNode', node.nodeId, {silent: true});var parentNode = $('#searchTree').treeview('getParent', node.nodeId);if (!("nodeId" in parentNode)) {return;} else {checkAllParent(parentNode);}}//取消全部⽗节点function uncheckAllParent(node) {$('#searchTree').treeview('uncheckNode', node.nodeId, {silent: true});var siblings = $('#searchTree').treeview('getSiblings', node.nodeId);var parentNode = $('#searchTree').treeview('getParent', node.nodeId);if (!("nodeId" in parentNode)) {return;}var isAllUnchecked = true; //是否全部没选中for (var i in siblings) {if (siblings[i].state.checked) {isAllUnchecked = false;break;}}if (isAllUnchecked) {uncheckAllParent(parentNode);}}//级联选中所有⼦节点function checkAllSon(node) {$('#searchTree').treeview('checkNode', node.nodeId, {silent: true});if (node.nodes != null && node.nodes.length > 0) {for (var i in node.nodes) {checkAllSon(node.nodes[i]);}}}//级联取消所有⼦节点function uncheckAllSon(node) {$('#searchTree').treeview('uncheckNode', node.nodeId, {silent: true});if (node.nodes != null && node.nodes.length > 0) {for (var i in node.nodes) {uncheckAllSon(node.nodes[i]);}}}$('#searchTree').treeview({showCheckbox: true,data: treeData,onNodeChecked: nodeChecked,onNodeUnchecked: nodeUnchecked});</script>总结以上所述是⼩编给⼤家介绍的bootstrap treeview 树形菜单带复选框及级联选择功能,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
Bootstrap框架建立树形菜单(Tree)的实例代码
Bootstrap框架建⽴树形菜单(Tree)的实例代码这⾥的Tree指的是树形菜单,这篇⽂章通过⼀个实例来讲解⼀下,在Bootstrap框架下怎么去建⽴⼀个树形菜单。
前提:先添加Bootstrap和JQ的引⽤<link rel="stylesheet" type="text/css" href="bootstrap-3.3.0-dist/dist/css/bootstrap.min.css" rel="external nofollow" ><script src="bootstrap-3.3.0-dist/dist/js/jquery-1.11.2.min.js"></script><script src="bootstrap-3.3.0-dist/dist/js/bootstrap.min.js"></script>HTML CODE<div class="tree well"><ul><li> <span><i class="icon-folder-open"></i> 廊坊师范学院</span><ul><li> <span><i class="icon-minus-sign"></i> 教育学院</span><ul><li> <span><i class="icon-leaf"></i> 学前教育</span> </li></ul></li><li> <span><i class="icon-minus-sign"></i> 物电学院</span><ul><li> <span><i class="icon-leaf"></i> 电⽓⼯程技术</span> </li><li> <span><i class="icon-minus-sign"></i> 电⼦信息科学技术</span><ul><li> <span><i class="icon-minus-sign"></i> 电⼦⼀班</span><ul><li> <span><i class="icon-leaf"></i> 宋笑</span> </li><li> <span><i class="icon-leaf"></i> ⼆盟</span> </li></ul></li><li> <span><i class="icon-leaf"></i> 电⼦⼆班</span> </li></ul></li><li> <span><i class="icon-leaf"></i> 物理学</span> </li></ul></li></ul></li></ul></div>CSS CODE(为树形菜单添加样式,使其符合Bootstrap框架的风格).tree {min-height:20px;padding:19px;margin-bottom:20px;background-color:#fbfbfb;border:1px solid #999;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05)}.tree li {list-style-type:none;margin:0;padding:10px 5px 0 5px;position:relative}.tree li::before, .tree li::after {content:'';left:-20px;position:absolute;right:auto}.tree li::before {border-left:1px solid #999;bottom:50px;height:100%;top:0;width:1px}.tree li::after {border-top:1px solid #999;height:20px;top:25px;width:25px}.tree li span {-moz-border-radius:5px;-webkit-border-radius:5px;border:1px solid #999;border-radius:5px;display:inline-block;padding:3px 8px;text-decoration:none}.tree li.parent_li>span {cursor:pointer}.tree>ul>li::before, .tree>ul>li::after {border:0}.tree li:last-child::before {height:30px}.tree li.parent_li>span:hover, .tree li.parent_li>span:hover+ul li span {background:#eee;border:1px solid #94a0b4;color:#000}JS CODE<script type="text/javascript">//为节点添加展开,关闭的操作$(function(){$('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Collapse this branch');$('.tree li.parent_li > span').on('click', function (e) {var children = $(this).parent('li.parent_li').find(' > ul > li');if (children.is(":visible")) {children.hide('fast');$(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign'); } else {children.show('fast');$(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign'); }e.stopPropagation();});});</script>效果:⼀棵符合Bootstrap风格的树就这么建造完成了,优点⾃不⽤说:整洁,美观。
mztreeview 的用法 -回复
mztreeview 的用法-回复mzTreeView是一款基于JavaScript的树形菜单插件,可以用来创建具有层次结构的导航菜单或目录树。
它可以帮助开发者构建交互友好的用户界面,提高应用程序的可用性和用户体验。
在本文中,我们将一步一步地介绍如何使用mzTreeView插件。
第一步,下载并引入mzTreeView插件。
要开始使用mzTreeView,首先需要从官方网站(mztools)下载插件的压缩包。
解压缩后,可以在文件夹中找到mzTreeView的核心JavaScript 文件(mzTreeView.js)。
将此文件复制到项目的JavaScript文件夹中,并在HTML文件中使用`<script>`标签将其引入。
html<!DOCTYPE html><html><head><script src="path/to/mzTreeView.js"></script></head><body><! 页面内容></body></html>第二步,编写HTML结构。
在HTML文件中,我们可以使用`<ul>`和`<li>`标签来创建树形菜单的基本结构。
每个`<li>`表示一个节点,`<ul>`作为一个容器包含所有节点。
html<ul id="treeView"><li>节点1<ul><li>子节点1</li><li>子节点2</li></ul></li><li>节点2</li><li>节点3</li></ul>第三步,初始化mzTreeView。
树形菜单-递归实现逻辑
树形菜单-递归实现逻辑全文共四篇示例,供读者参考第一篇示例:树形菜单是一种常见的界面设计元素,通过树形结构展示信息,使用户能够轻松浏览和选择。
在Web开发中,树形菜单通常用于显示网站的导航菜单、项目结构、文件夹结构等。
实现树形菜单的方法有多种,其中递归是一种常用且有效的实现逻辑。
在本文中,我们将介绍树形菜单的递归实现逻辑,并通过示例代码演示如何使用递归来构建一个动态的树形菜单。
一、什么是递归?在程序设计中,递归是一种解决问题的方法,通过将问题分解成规模较小的子问题来解决整体问题。
递归函数会反复调用自身,直到满足某个终止条件才停止递归。
递归在数据结构和算法中有着广泛的应用,如树形结构的遍历、图的搜索等。
二、树形菜单的数据结构在实现树形菜单之前,首先要明确树形结构的数据表示方法。
通常树形菜单的数据结构可以用对象或数组来表示,每个节点包含一些基本信息和子节点信息。
一个简单的树形菜单数据结构如下所示:```javascript{id: 1,name: 'Root',children: [{ id: 2, name: 'Node 1', children: [] },{ id: 3, name: 'Node 2', children: [{ id: 4, name: 'Node 2-1', children: [] },{ id: 5, name: 'Node 2-2', children: [] }] },{ id: 6, name: 'Node 3', children: [] },]}```在上面的示例中,树形菜单包含了一个根节点和三个子节点,每个节点都包含了id、name和children属性,其中children是一个数组,用于存储子节点信息。
三、递归构建树形菜单接下来,我们将演示如何使用递归来构建一个树形菜单。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>显示登陆时间</a><br>
}
.STYLE5 {
font-family: "幼圆";
font-size: 20px;
color: #000099;
}
.STYLE6 {
font-family: "华文中宋";
font-size: 20px;
color: #000000;
}
.STYLE7 {
font-family: "华文新魏";
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>文本静止不动</a><br>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>信息框显示链接</a><br>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>静止导航菜单</a><br>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>静止图片脚本</a><br>
<div id='#' class='parent'><a href="#" onClick="expandIt('KB2'); return false">
<IMG SRC='plus.gif' BORDER=0>页面导航类</a></div><div id='KB2Child' class='child'>
}
.STYLE12 {
font-family: "华文彩云";
font-size: 20px;
color: #990033;
}
.STYLE13 {
font-family: "方正舒体";
font-size: 20px;
color: #00FF00;
}
-->
</style>
第二步:把如下代码加入<body >区域中
<div id='KB1Parent' class='parent'><a href="#" onClick="expandIt('KB1'); return false">
<IMG SRC='plus.gif' BORDER=0>时间日期类</a></div><div id='KB1Child' class='parent'>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>一款特酷的时钟</a><br>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>全中文日期显示</a></div>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>日历生成器</a><br>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>退出显示访问时间</a><br>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>显示站点信息导航</a><br>
<a href='#' target='_target'> <IMG SRC='blank.gif' BORDER=0>任意显示导航信息</a><br>
脚本说明:
第一步:把如下代码加入<head>区域中
<script language="JavaScript1.2">
scores = new Array(20);var numTotal=0;NS4 = (yers) ? 1 : 0;IE4 = (document.all) ? 1 : 0;ver4 = (NS4 || IE4) ? 1 : 0;if (ver4) { with (document) { write("<STYLE TYPE='text/css'>"); if (NS4) { write(".parent {position:absolute; visibility:visible}"); write(".child {position:absolute; visibility:visible}"); write(".regular {position:absolute; visibility:visible}") } else { write(".child {display:none}") } write("</STYLE>"); }}function getIndex(el) { ind = null; for (i=0; i<yers.length; i++) { whichEl = yers[i]; if (whichEl.id == el) { ind = i; break; } } return ind;}function arrange() { nextY = yers[firstInd].pageY +yers[firstInd].document.height; for (i=firstInd+1; i<yers.length; i++) { whichEl = yers[i]; if (whichEl.visibility != "hide") { whichEl.pageY = nextY; nextY += whichEl.document.height; } }}function initIt(){ if (!ver4) return; if (NS4) { for (i=0; i<yers.length; i++) { whichEl = yers[i]; if (whichEl.id.indexOf("Child") != -1) whichEl.visibility = "hide"; } arrange(); } else { divColl = document.all.tags("DIV"); for (i=0; i<divColl.length; i++) { whichEl = divColl(i); if (whichEl.className == "child") whichEl.style.display = "none"; } }}function expandIt(el) { if (!ver4) return; if (IE4) { whichEl1 = eval(el + "Child"); for(i=1;i<=numTotal;i++){ whichEl = eval(scores[i] + "Child"); if(whichEl!=whichEl1) { whichEl.style.display = "none"; } } whichEl1 = eval(el + "Child"); if (whichEl1.style.display == "none") { whichEl1.style.display = "block"; } else { whichEl1.style.display = "none"; } } else { whichEl = eval("document." + el + "Child"); for(i=1;i<=numTotal;i++){ whichEl = eval("document." + scores[i] + "Child"); if(whichEl!=whichEl1) { whichEl.visibility = "hide"; } } if (whichEl.visibility == "hide") { whichEl.visibility = "show"; } else { whichEl.visibility = "hide"; } arrange(); }}onload = initIt;