无限级别菜单的实现
两天时间用AJAX写了个无限级的多级联动菜单(ajax+PHP构架)
花了两天时间。
研究AJAX,终于独立完成一个无限组的多级菜单联动功能。
主要特点:就是HTML静态页面可以无刷新的与PHP动态角本文件及数据库交互(这也是AJAX的核心目的)。
以下把代码贴出来。
供大家参考指正:ajax.js文件(位于根目录下js子目录)var xmlHttp;function createXmlHttp(){if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest();}else{xmlHttp=new ActiveXObject("Microsoft.XMLHttp");}}basic_inc.php(位于根目录下/include子目录下)<?php$DB_SERVER="localhost";$DB_NAME="ajax";$DB_USER="root";$DB_PASSWORD="";?>conn.php(位于根目录下/include子目录下)<?phprequire_once("dir_inc.php");require_once($ROOT_DIR."include/basic_inc.php");@ $db=mysql_connect($DB_SERVER,$DB_USER) or die ("faile!".mysql_error());@mysql_select_db($DB_NAME);?>dir_inc.php(位于根目标下/include子目录下)<?php$ROOT_DIR="../";?>select_menu.html(位于根目录下是核心前台文件)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>select_menu</title><script type="text/javascript" src="js/ajax.js">//这里引用创建xmlHttp对像的文件(对浏览器做过判断)</script><script type="text/javascript">var targetSelId; //申明一个全局变量用来存放当前要操作的对像的IDvar selArray;//申明一个全局数组。
前端框架中的多级菜单设计与实现技巧
前端框架中的多级菜单设计与实现技巧多级菜单是一个常见的前端框架中的设计需求,它可以帮助用户在界面上更好地组织和管理信息,提供更好的用户体验。
在本文中,我将介绍多级菜单的设计与实现技巧,希望能对前端开发人员有所帮助。
首先,我们需要明确多级菜单的设计目标和需求。
多级菜单应该具有以下几个特点:可展开折叠、可选中高亮、支持无限层级、易于扩展和维护。
基于这些特点,我们可以采用以下方法来设计和实现多级菜单。
1. 使用树状数据结构:多级菜单往往是由一个层级嵌套的树状结构组成的。
我们可以通过使用树状数据结构来表示菜单项和菜单层级关系。
这样的数据结构可以方便地进行遍历、增加、删除和修改操作。
2. 递归生成菜单项:通过递归地遍历树状数据结构,我们可以生成相应的菜单项并将其渲染到页面上。
递归生成菜单项的好处在于,不管菜单有多少层级,我们都只需要一套相同的模板和方法即可。
3. 使用事件委托:多级菜单往往涉及到大量的点击事件处理。
为了避免为每个菜单项都绑定事件处理器,我们可以使用事件委托的方式来减少事件绑定的数量。
只需要将事件绑定到菜单容器上,然后根据事件的目标元素来处理相应的逻辑。
4. 利用 CSS 实现样式:多级菜单的样式设计也是重要的一部分。
我们可以利用 CSS 实现菜单项的样式,如背景颜色、文字颜色、字体大小等。
同时,利用CSS 也可以实现菜单项的展开和折叠效果,例如使用伪类和过渡来实现动画效果。
5. 考虑响应式设计:在设计多级菜单时,我们还需要考虑到不同设备和屏幕尺寸的适配。
可以通过使用媒体查询、flexbox 布局等技术来实现菜单的响应式设计,使其在不同的平台和终端上都能够良好地展示。
总结起来,设计和实现多级菜单需要考虑树状数据结构、递归生成菜单项、事件委托、利用 CSS 实现样式以及响应式设计等方面。
这些技巧可以帮助我们更好地实现多级菜单,提供更好的用户体验。
希望本文能对前端开发人员在多级菜单的设计与实现中提供一些帮助和启示。
oled多级菜单实现方法
OLED多级菜单实现方法引言随着智能设备的普及,O LE D(Or ga ni cLi g ht-E mi tt in gD iod e)显示屏在各种应用中得到广泛应用。
在许多情况下,我们需要为用户提供一种直观且易于操作的界面,以便他们与设备进行交互。
其中,多级菜单是一种常见的交互方式。
本文将介绍在OL ED显示屏上实现多级菜单的方法。
一、概述多级菜单是一种具有层级结构的菜单,它允许用户在不同层级间进行导航和选择操作。
通过使用O LE D显示屏,我们可以以图形化的方式展示多级菜单,使用户操作更加方便和直观。
二、实现步骤1.准备工作在开始实现多级菜单之前,我们需要准备以下材料:-一块可驱动OL ED显示屏的硬件设备-相应的开发板或单片机-适配器或连接线等连接硬件设备所需的配件2.设计菜单结构在实现多级菜单之前,我们需要先设计菜单的层级结构。
通常,多级菜单由一级菜单和多个子菜单组成。
一级菜单可以包含多个子菜单,子菜单之间可以进行跳转和切换。
我们可以用树状结构来表示并管理菜单的层级关系。
3.显示菜单通过OL ED显示屏,我们可以将菜单以图形化的方式展示出来,提供给用户进行选择。
在显示菜单时,我们需要根据当前菜单层级和用户选择的位置来进行显示,以及在用户进行操作时进行相应的响应。
4.用户操作多级菜单的核心在于用户的操作。
用户可以使用特定的按键或触摸屏进行导航和选择。
我们需要监听用户的操作,并对其进行相应的处理。
比如,当用户选择某个菜单项时,我们需要根据其选择进行相应的跳转或执行相应的操作。
5.实现菜单功能菜单不仅仅是显示和选择,还需要实现相应的功能。
根据不同的应用场景,我们可以为菜单的不同选项分配不同的功能,并在用户选择时执行相应的操作。
6.菜单管理和维护在实际应用中,菜单通常需要进行管理和维护。
这包括对菜单项的增加、删除和修改,以及对菜单结构的调整和优化。
我们需要提供相应的管理界面和功能,以便管理员或用户对菜单进行维护和配置。
Java实现一个简易版的多级菜单功能
Java实现⼀个简易版的多级菜单功能⼀:前⾔最近⽼师布置了给多级菜单的作业,感觉蛮有意思的,可以提升⾃⼰的逻辑!下⾯我写个简易版的多级菜单,本⼈还是菜鸟,欢迎各位给予宝贵的建议!⼆:正⽂由于是给各位演⽰,所有我把涉及的其他条件全省略了,只做了给最简单的,以便⼤家能更好的理解我的思路1,⾸先是数据库的设计DROP TABLE IF EXISTS `t_category`;CREATE TABLE `t_category` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标识⽬录的唯⼀id',`parent_id` int(11) DEFAULT NULL COMMENT '存储⽗级⽬录的id,0代表⼀级⽬录',`name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '⽬录的名称',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;2.java后端代码①对应数据库的实体类public class Category {private int id;private int parentId;private String name;}②返回给前端的实体类 //注意写⼀个有参的构造⽅法,⽅便我们把Category的数据注⼊进来public class CategoryTwo extends Category{private List<CategoryTwo> categorieTwos;public CategoryTwo(){}//这个有参构造⽅法⽅便我们为属性赋值即把categoy的成员变量的值赋值到⾃⾝中public CategoryTwo(Category category){super(category.getId(),category.getParentId(),category.getName());}}③具体实现//多级⽬录public void findCategoryAll(){//查询出所有的⽬录数据List<Category> categorys = categoryMapper.findCategoryAll(null);//这个⼤家⾃⼰完成//存放所有⼀级⽬录List<CategoryTwo> categoryTows = new ArrayList();//找出⼀级⽬录,即 parentId = 0 的⽬录for(Category category :categorys){if(category.getParentId() == 0){CategoryTwo categoryTwo = new CategoryTwo(category);categoryTows.add(categoryTwo);//存⼊⼀级⽬录集合中}}//利⽤递归,找出所有⼀级⽬录的List<CategoryTwo>,这⾥我把具体实现包装到 findSubCategory()⽅法中了categoryTows = findSubCategory(categorys,categoryTows);//最后就完成了,把数据按需求返回给前端就可以了。
java递归实现构造无限层级树形菜单
java递归实现构造⽆限层级树形菜单这⾥来讲⼀下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。
我们来理⼀下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是1、构造⼀个实体类,⽤来存储节点,所以我们构造的需要四个对象(id,pid,name,和chirenList)2、构造菜单结构3、构造⼦菜单,如此循环,通过pid判断上级菜单具体实现:1、这⾥构造Tree.java实体类12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41package com.tcl.jr.crm.entity;/*** 类名称:Tree* 类描述:树形结构*/public class Tree {private String id;private String pId;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getpId() {return pId;}public void setpId(String pId) {this.pId = pId;}public String getName() {return name;}public void setName(String name) { = name;}@Overridepublic String toString() {return"Tree [id="+ id + ", pId="+ pId + ", name="+ name + "]"; }}2、封装树形结构类,这⾥我封装成⼀个通⽤的⼯具类,⽅便项⽬中使⽤,MenuTreeUtil.java,完整代码如下,可直接复制使⽤:1234 5 6 7 8 9package com.tcl.jr.crm.util;import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List;import java.util.Map;9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50import java.util.Map;import com.tcl.jr.crm.entity.Tree;/*** 类名称:MenuTreeUtil* 类描述:递归构造树型结构*/public class MenuTreeUtil {public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>(); public List<Tree> menuCommon;public List<Object> list = new ArrayList<Object>();public List<Object> menuList(List<Tree> menu){this.menuCommon = menu;for(Tree x : menu) {Map<String,Object> mapArr = new LinkedHashMap<String, Object>();if(x.getpId()=="0"){mapArr.put("id", x.getId());mapArr.put("name", x.getName());mapArr.put("pid", x.getpId());mapArr.put("childList", menuChild(x.getId()));list.add(mapArr);}}return list;}public List<?> menuChild(String id){List<Object> lists = new ArrayList<Object>();for(Tree a:menuCommon){Map<String,Object> childArray = new LinkedHashMap<String, Object>();if(a.getpId() == id){childArray.put("id", a.getId());childArray.put("name", a.getName());childArray.put("pid", a.getpId());childArray.put("childList", menuChild(a.getId()));lists.add(childArray);}}return lists;}}3、最后在控制台请求⽅法调⽤数据就⾏了,在controller的⽅法如下:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20/*** 显⽰APP树形结构*/@RequestMapping(value = { "getAPPTree"}, produces = "text/html;charset=UTF-8")@ResponseBodypublic String getAPPTree(HttpServletRequest request, HttpServletResponse response) throws Exception {Map<String, Object> returnmap = new HashMap<>();MenuTreeUtil menuTree = new MenuTreeUtil();PageData pd = this.getPageData();try{//这⾥的⽅法是根据前台的机构类型代码来查找数据库数据的,这⾥不多加解释,因⼈⽽异List<Tree> list = dataDicService.buildTree(pd.getString("instType"));List<Object> menuList = menuTree.menuList(list);//区别于web端,这边APP端list不能转为json格式,直接将list传给前台,转成json对象的话vuejs前台⽆法识别渲染 returnmap.put("list", menuList);} catch(Exception e) {logger.error(e.getMessage());}return JsonMapper.toJsonString(returnmap);}4、然后前台ajax调⽤第三部的接⼝⽅法就⽽已请求到所需的数据,如何渲染成好的前台页⾯,参照我另⼀篇⽂章:vuejs使⽤递归组件实现树形⽬录java构造树形菜单数据就说到这⾥啦,希望对⼤家有帮助,我的分享⼀般都是特别详细的,除了涉及项⽬隐私之外,是不会对⼤家有所保留的哟,也希望⼤家多多⽀持脚本之家。
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
JS实现⽆限级⽹页折叠菜单(类似树形菜单)效果代码本⽂实例讲述了JS实现⽆限级⽹页折叠菜单(类似树形菜单)效果代码。
分享给⼤家供⼤家参考。
具体如下:这是⼀款超不错的⽹页折叠菜单,采⽤JavaScript实现。
折叠菜单是⼤家⽐较常见到的⼀种菜单形式,可⼴泛应⽤于管理系统、后台左侧、产品列表中,本折叠菜单有点树形菜单的味道,相信“⽆限级”会满⾜你的要求。
运⾏效果截图如下:在线演⽰地址如下:具体代码如下:<html><head><title>⽆限级折叠菜单JS版</title><style><!--body,ul,h3 {margin:0px; padding:0px;}li {list-style-type:none;}body{font-size:12px;color:#333;font-family: Simsun;line-height:15px;}a{text-decoration:none;color:#004285;border:none;}a:hover{text-decoration:none;color:#C33;}#menu {width:260px;margin:50px auto;padding:10px;border:#EEE 1px solid;}#menu h3 {font-size:12px;}#menu ul {background:url("images/ul-bg.gif") repeat-y 5px 0px; overflow:hidden;}#menu ul li {padding:5px 0 2px 15px;background:url("images/tree-ul-li.gif") no-repeat 5px -32px;}#menu ul li ul {display:none;}#menu ul li em {cursor:pointer;display:inline-block;width:15px;float:left;height:15px;margin-left:-14px;background:url("images/tree-ul-li.gif") no-repeat -32px 2px;}#menu ul li em.off {background-position: -17px -18px;}#menu ul li#end {background-color:#FFF;}#menu ul.off {display:block;}--></style></head><body><div id="menu"><h3>⽆限级折叠菜单JavaScript版</h3><ul><li><em></em><a href='javascript:void(0);'>菜单_1_1</a><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_2_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_3_1</a><ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_1_2</a><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_2_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_3_1</a><ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_3_2</a> <ul><li><em></em><a href='javascript:void(0);'>菜单_4_1</a><ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li><li id='end'><em></em><a href='javascript:void(0);'>菜单_4_2</a> <ul><li><a href='javascript:void(0);'>菜单_5_1</a></li><li id='end'><a href='javascript:void(0);'>菜单_5_2</a></li></ul></li></ul></li></ul></li></ul></li></ul><script type="text/javascript">(function(e){for(var _obj=document.getElementById(e.id).getElementsByTagName(e.tag),i=-1,em;em=_obj[++i];){ em.onclick = function(){ //onmouseovervar ul = this.nextSibling;if(!ul){return false;}ul = ul.nextSibling; if(!ul){return false;}if(e.tag != 'a'){ ul = ul.nextSibling; if(!ul){return false;} } //a 标签控制隐藏或删除该⾏for(var _li=this.parentNode.parentNode.childNodes,n=-1,li;li=_li[++n];){if(li.tagName=="LI"){for(var _ul=li.childNodes,t=-1,$ul;$ul=_ul[++t];){switch($ul.tagName){case "UL":$ul.className = $ul!=ul?"" : ul.className?"":"off";break;case "EM":$ul.className = $ul!=this?"" : this.className?"":"off";break;}}}}}}})({id:'menu',tag:'em'});</script></body></html>希望本⽂所述对⼤家的JavaScript程序设计有所帮助。
实现基于 Ajax 的无限级菜单
现在到处都有这方面的教程,我重点说一下我自己搞的一个框架。
特点:支持Form的无闪提交(方法有点笨)支持MVC框架,即支持传统网页架构多线程并发请求(要语言支持线程)动态加载文件,只加载有用的!处理了Ajax框架臃肿的JS文件问题。
采用no table的全div + css布局a. 获得XMLHTTPRequest对象,网上到处都找得到了,不多说:function newXMLHttpRequest() {var xmlreq = false;if (window.XMLHttpRequest) {xmlreq = new XMLHttpRequest();} else if (window.ActiveXObject) {try {xmlreq = new ActiveXObject("Msxml2.XMLHTTP");} catch (e1) {try {xmlreq = new ActiveXObject("Microsoft.XMLHTTP");} catch (e2) {}}}return xmlreq;}这里提供一个通用的支持多浏览器的方法。
b.提出异步请求//这里用Bcandy作为方法名是为了感谢一个对我来说很重要的人,她一直在支持我function Bcandy(Tid,url,parm,js) {if(url == ""){return;}//这是一个加载信息提示框,也可以不要!document.getElementById("load").style.visibility = "visible";//加载相应页面的JS文件if(js != null){//加载JS文件LoadJS(js);}// 获取一个XMLHttpRequest实例var req = newXMLHttpRequest();// 设置用来从请求对象接收回调通知的句柄函数var handlerFunction = getReadyStateHandler(req,Tid);req.onreadystatechange = handlerFunction;// 第三个参数表示请求是异步的req.open("POST", url, true);// 指示请求体包含form数据req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");// 发送参数req.send(parm);}function getReadyStateHandler(req,Tid) {// 返回一个监听XMLHttpRequest实例的匿名函数return function () {// 如果请求的状态是“完成”if (req.readyState == 4) {// 成功接收了服务器响应if (req.status == 200) {//下面一句是重点,这里显示了返回信息的内容部分,也可以加以修改。
(完整版)单片机多级菜单编程实现
(完整版)单片机多级菜单编程实现单片机多级菜单编程实现单片机多级菜单编程实现(ZT)建立一个树状的菜单结构,用链表实现链表中包含:1、指向同级左右菜单和指向父菜单、子菜单的四个菜单结构体指针;2、进入该菜单时需要执行的初始化函数指针3、退出该菜单时需要执行的结束函数指针4、该菜单内的按键处理函数指针数组的指针操作菜单模块需要的按键操作有:左、右、确认、退出。
采用这种办法,可以方便的添加或删减菜单。
并且只需要在其头文件中修改初始变量就可以实现,完全无须修改C文件中的任何函数。
具体结构定义我的定义,做个参考:#define MENU_HLP_EN //菜单帮助信息使能typedef struct{void (*pMenuTaskInit)(void); //指向菜单任务初始化函数的指针void (*pMenuTaskEnd)(void); //指向菜单任务结束函数的指针}MENU_TASK_TYP;typedef struct MenuTyp{INT8U *MenuName; //菜单名称字符串WORK_MOD WorkMod; //工作状态编号MENU_TASK_TYP *pMenuTask; //指向菜单任务的指针void (**pTaskKeyDeal)(void); //指向菜单任务按键处理函数数组#ifdef MENU_HLP_ENINT8U *MenuHlp; //菜单帮助字符串#endifstruct MenuTyp *pParent; //指向上层菜单的指针struct MenuTyp *pChild; //指向子菜单的指针struct MenuTyp *pRight; //指向右菜单的指针struct MenuTyp *pLeft; //指向左菜单的指针}MENU_TYP;我根据网上的资料做的一个菜单:/****************菜单数据结构**********************/struct KeyTabStruct{uint8 MenuIndex; //当前状态索引号uint8 MaxItems; //本级菜单最大条目数uint8 ShowLevel; //菜单显示内容uint8 PressOk; //按下"回车"键时转向的状态索引号uint8 PressEsc; //按下"返回"键时转向的状态索引号uint8 PressDown; //按下"向下"键时转向的状态索引号uint8 PressUp; //按下"向上"键时转向的状态索引号void (*CurrentOperate)(); //当前状态应该执行的功能操作};uint8 MenuID; //菜单ID号uint8 MenuNextID; //下级菜单ID号//CurMenuID=本菜单ID//MaxMenuItem=同级菜单最大项数//OkMenuID=子菜单层所对应的菜单ID,ID=999为菜单已经到底了//EscMenuID=父菜单层所对应的菜单ID,ID=999为菜单已经到顶了//DownMenuID=弟菜单层所对应的菜单ID,ID=999为菜单是独//UpMenuID=兄菜单层所对应的菜单ID,ID=999为菜单是独生子//CurFunction=本菜单所对应的菜单函数指针const struct KeyTabStruct KeyTab[MAX_KEYTABSTRUCT_NUM]={//CurMenuID, axMenuItem, MenuShowLevel, OkMenuID, EscMenuID, DownMenuID, UpMenuID, CurFunction{MENU_EDIT, 0, 0, MENU_DATA_VIEW, MENU_NO, MENU_NO, MENU_NO, *MenuEdit},{MENU_DATA_VIEW, 3, 1, MENU_DATA_VIEW_FIRE, MENU_EDIT, MENU_ SYS_EDIT, MENU_PRINT_DATA,*MenuEdit}, {MENU_DATA_VIEW_FIRE, 5, MENU_NO, MENU_NO, MENU_DATA_VIEW, MENU_DATA_VIEW_TROUBLE, MENU_STEP_FOLLOW, *MenuDataViewIn}, {MENU_DATA_VIEW_TROUBLE, 5, MENU_NO, MENU_NO, MENU_DATA_VI EW, MENU_DATA_VIEW_REPEAT, MENU_DATA_VIEW_FIRE, *MenuDataVie wIn},{MENU_DATA_VIEW_REPEAT, 5, MENU_NO,MENU_NO, MENU_DATA_VIEW, MENU_FACE_CHECK,MENU_DATA_VIEW_TROUBLE, *MenuDataViewIn},{MENU_FACE_CHECK, 5, MENU_NO,MENU_NO, MENU_DATA_VIEW, MENU_STEP_FOLLOW,MENU_DATA_VIEW_REPEAT, *MenuFaceCheck},{MENU_STEP_FOLLOW, 5, MENU_NO,MENU_NO, MENU_DATA_VIEW, MENU_DATA_VIEW_FIRE, MENU_FACE_CH ECK,*MenuStepFollow},{MENU_SYS_EDIT, 3,2, MENU_SUM_SET, MENU_EDIT,MENU_PRINT_DATA, MENU_DATA_VIEW, *MenuEdit},{MENU_SUM_SET, 6, MENU_NO,MENU_NO, MENU_SYS_EDIT, MENU_EDIT_INSULATE,MENU_TIME_SET, *MenuSumSet},{MENU_EDIT_INSULATE, 6, MENU_NO,MENU_NO, MENU_SYS_EDIT, MENU_EDIT_HZ, MENU_SUM_SET,*MenuEditInsulate},{MENU_EDIT_HZ, 6, MENU_NO,MENU_NO, MENU_SYS_EDIT, MENU_LD_CONTROL,MENU_EDIT_INSULATE, *MenuEditHZ},{MENU_LD_CONTROL, 6,MENU_NO, MENU_NO, MENU_SYS_EDIT, MENU_LD_DELAY, MENU_EDIT_HZ, *MenuLDControl},{MENU_LD_DELAY, 6,MENU_NO, MENU_NO, MENU_SYS_EDIT, MENU_TIME_SET, MENU_LD_CONTROL, *MenuLDDelay},{MENU_TIME_SET, 6, MENU_NO,MENU_NO, MENU_SYS_EDIT, MENU_SUM_SET, MENU_LD_DELAY,*MenuTimeSet},{MENU_PRINT_DATA, 3, 3,MENU_PRINT_DATA_FIRE, MENU_EDIT, MENU_DATA_VIEW, MENU_SYS_EDIT, *MenuEdit},{MENU_PRINT_DATA_FIRE, 4,MENU_NO, MENU_NO, MENU_PRINT_DATA,MENU_PRINT_DATA_TROUBLE, MENU_PRINT_SET, *MenuPrintDataIn}, {MENU_PRINT_DATA_TROUBLE, 4, MENU_NO,MENU_NO, MENU_PRINT_DATA, MENU_PRINTER_CHECK,MENU_PRINT_DATA_FIRE, *MenuPrintDataIn},{MENU_PRINTER_CHECK, 4, MENU_NO,MENU_NO, MENU_PRINT_DATA, MENU_PRINT_SET,MENU_PRINT_DATA_TROUBLE, *MenuPrintDataIn},{MENU_PRINT_SET, 4, MENU_NO,MENU_NO, MENU_PRINT_DATA, MENU_PRINT_DATA_FIRE, MENU_PRINTER_CHECK, *MenuPrintSet},};/**************************************编程菜单显示数据******************************/const struct MenuDispData MenuEditShow[][MENU_MAX] = {{{MENU_NO , 0, 0, "选择: 消音→退出"}, //主菜单{MENU_DATA_VIEW , 1, 6, "⒈数据查看"},{MENU_SYS_EDIT , 2, 6, "⒉系统编程"},{MENU_PRINT_DATA , 3, 6, "⒊数据打印"}},{{MENU_NO , 0, 0, "数据查看: 消音→退出"}, //数据查看{MENU_DATA_VIEW_FIRE , 1, 4, "⒈火警"},{MENU_DATA_VIEW_TROUBLE, 2, 4, "⒉故障"},{ME NU_DATA_VIEW_REPEAT , 3, 4, "⒊重码"},{MENU_FACE_CHECK , 1,12, "⒋面板检测"},{MENU_STEP_FOLLOW , 2,12, "⒌单步跟踪"}},{{MENU_NO , 0, 0, "系统编程: 消音→退出"}, //系统编程{MENU_SUM_SET , 1, 0, "⒈容量设置"},{MENU_EDIT_INSULATE , 2, 0, "⒉隔离点"},{MENU_EDIT_HZ , 3, 0, "⒊汉字描述"},{MENU_LD_CONTROL , 1,12, "⒋联动控制"},{MENU_LD_DELAY , 2,12, "⒌模块延时"},{MENU_TIME_SET , 3,12, "⒍时钟调整"}},{{MENU_NO , 0, 0, "数据打印: 消音→退出"}, //数据打印{MENU_PRINT_DATA_FIRE , 1, 0, "⒈火警数据"},{MENU_PRINT_DATA_TROUBLE,2, 0, "⒉故障数据"},{MENU_PRINTER_CHECK , 3, 0, "⒊打印机自检"},{MENU_PRINT_SET , 1,12, "⒋打印设置"}},};/***********************************等待按键******************** **************/void WaitKey(void){uint32 time;time = RTCFlag;WhichKey = KEY_NONE;while(!EscFlag){if(RTCFlag - time >= EDIT_TIME)EscFlag = TRUE;if(WhichKey != KEY_NONE){KeySound(300); //按键音return;}}}/*********************************显示多级菜单**********************************/void MenuEdit(){uint32 i,j=0;uint32 oldid;j = KeyTab[MenuID].ShowLevel;if(WhichKey == KEY_ESC || WhichKey == KEY_OK){ClearScreen();for(i=0;i0;//没有原先选择的项}else{if(WhichKey == KEY_UP)oldid = KeyTab[MenuNextID].PressDown;elseoldid = KeyTab[MenuNextID].PressUp;//指示原先的项}for(i=1;i<keytab[menunextid].maxitems+1;i++){< p=""> if(MenuEditShow[j][i].Id == oldid)ShowString(MenuEditShow[j][i].Lin,MenuEditShow[j][i].Column,MenuEditShow[j][i].Pdata,0); //正常显示原先的项else{if(MenuEditShow[j][i].Id == MenuNextID)ShowString(MenuEditShow[j][i].Lin,MenuEditShow[j][i].Column,MenuEditShow[j][i].Pdata,1); //反显当前选择的项}}WhichKey = KEY_NONE;}/******************************系统编程************************* ******/uint32 Edit(void){struct KeyTabStruct NowKeyTab; //指示当前的菜单值uint32 escflag = FALSE;ResetFlag = FALSE;ChangeFlag = FALSE;EscFlag = FALSE;MenuID = MENU_EDIT;NowKeyTab = KeyTab[MenuID];MenuNextID = NowKeyTab.PressOk;(*NowKeyTab.CurrentOperate)(); //显示主菜单do{if(WhichKey == KEY_NONE)WaitKey(); //等待按键switch(WhichKey){case KEY_ESC : if(NowKeyTab.PressEsc != MENU_NO) {MenuID =NowKeyTab.PressEsc;MenuNextID =NowKeyTab.MenuIndex;NowKeyTab = KeyTab[MenuID];NowKeyTab.PressOk =MenuNextID;(*NowKeyTab.CurrentOperate)(); //显示当前菜单}elseescflag =TRUE; //退出编程状态break;case KEY_OK : if(NowKeyTab.PressOk != MENU_NO) {MenuID =NowKeyTab.PressOk;NowKeyTab = KeyTab[MenuID];MenuNextID =NowKeyTab.PressOk;}(*NowKeyTab.CurrentOperate)(); //执行当前按键的操作break;case KEY_UP : if((MenuNextID != MENU_NO) && (KeyTab[MenuNextID].PressUp != MENU_NO)){NowKeyTab.PressOk =KeyTab[MenuNextID].PressUp;MenuNextID = KeyTab[MenuNextID].PressUp;(*NowKeyTab.CurrentOperate)(); //执行当前按键的操作}break;case KEY_DOWN: if((MenuNextID != MENU_NO) && (KeyTab[MenuNextID].PressDown != MENU_NO)){NowKeyTab.PressOk =KeyTab[MenuNextID].PressDown;MenuNextID = KeyTab[MenuNextID].PressDown;(*NowKeyTab.CurrentOperate)(); //执行当前按键的操作}break;case KEY_RESET: ResetFlag = TRUE;break;default : break;}}while(!ResetFlag && !EscFlag && !escflag);if(ChangeFlag && !EscFlag && !ResetFlag) EditDataChange();if(ResetFlag)return SYS_RESET;else{return 0;}}关于这个菜单的说明:1.我用的是ARM处理器,所以51的时候把const改成code,uint32改成unsign ed char。
ASP XML JavaScript 实现动态无限级联动菜单
// Email :fason_pfx@
// HomePage :
// Blog :/fason/
// /fason/
//-----------------------------------------------------/
function attachSelect(sXMLSrc, aSel, sStore) {
var oXML = CreateXmlDocument();
var oDocument = null;
<select>
s=s & ",'Select" & i & "'" '把每个<select>的id 保存在变量s,它的格式为:id1,id2,id3,id4
next
xmlDoc.save filename '正式保存Xml文件
CloseXml xmlDoc '关闭Xml文件
//-----------------------------xmlselect.js文件开始-------------------------------
//-----------------------------------------------------/
// NichName :fason
ClassName nvarchar 50 类别名称
ParentID int 2 连接到组(0表示是父类)
'####################################我的ASP代码如下####################################
多级列表导航菜单的实现方法
多级列表导航菜单的实现方法
多级列表导航菜单的实现方法有多种,以下是一些常见的方法:
1. HTML和CSS:使用HTML和CSS来创建多级列表导航菜单是最基础的方法。
你可以使用嵌套的`<ul>`和`<li>`元素来创建多级列表,然后通过CSS来样式化这些元素,包括设置背景色、字体样式、边框、定位等。
这种方法虽然简单,但是需要手动编写大量的HTML和CSS代码,且可维护性
较差。
2. JavaScript库:有一些JavaScript库可以帮助你快速实现多级列表导航
菜单,如jQuery、Bootstrap等。
这些库提供了丰富的插件和工具,可以
简化菜单的创建和样式化过程。
使用这些库,你可以通过简单的代码实现复杂的多级列表导航菜单。
3. 服务器端编程语言:如果你熟悉服务器端编程语言(如PHP、Python、Java等),你可以使用这些语言来动态生成多级列表导航菜单。
通过从数
据库或其他数据源中获取数据,然后在服务器端生成HTML和CSS代码,
最终将生成的代码发送到客户端浏览器。
这种方法可以实现更复杂的动态功能,如菜单项的增删改查等。
4. 响应式设计框架:一些响应式设计框架(如Bootstrap、Foundation等)也提供了多级列表导航菜单的实现方法。
这些框架使用HTML、CSS和
JavaScript技术,提供了丰富的组件和工具,可以帮助你快速创建具有良好响应式效果的多级列表导航菜单。
总的来说,选择哪种方法实现多级列表导航菜单取决于你的具体需求和技术能力。
你可以根据自己的实际情况选择最适合你的方法。
Axure实现多级菜单与导航设计的技巧与经验分享
Axure实现多级菜单与导航设计的技巧与经验分享在网页和应用程序的设计中,多级菜单和导航设计起着至关重要的作用。
它们不仅可以帮助用户快速找到所需的信息,还可以提高用户体验和导航的效率。
在本文中,我将分享一些使用Axure实现多级菜单和导航设计的技巧和经验。
一、了解用户需求在设计多级菜单和导航之前,我们首先需要了解用户的需求。
通过用户调研和数据分析,我们可以了解用户的使用习惯、喜好和需求,从而更好地设计菜单和导航系统。
例如,如果用户经常浏览某一类别的内容,我们可以将其放在一级菜单中,以便用户快速访问。
二、层级结构设计在设计多级菜单和导航时,层级结构设计是非常重要的。
通过合理的层级结构设计,我们可以使用户能够清晰地了解菜单和导航的关系,从而更好地进行导航。
一般来说,我们可以将常用的功能和内容放在一级菜单中,次常用的功能和内容放在二级菜单中,以此类推。
这样的设计可以帮助用户快速找到所需的信息,提高用户体验。
三、使用合适的交互效果在使用Axure实现多级菜单和导航设计时,我们可以使用一些合适的交互效果来增强用户体验。
例如,当用户将鼠标悬停在某个菜单项上时,可以显示下拉菜单或展开子菜单;当用户点击某个菜单项时,可以跳转到相应的页面或展开更多内容。
这些交互效果可以使用户更加直观地了解菜单和导航的功能,提高用户的操作效率。
四、合理使用图标和颜色在设计多级菜单和导航时,我们可以使用图标和颜色来增加视觉效果和吸引力。
通过合理使用图标和颜色,我们可以使菜单和导航更加直观和易于理解。
例如,我们可以使用不同的图标来表示不同的功能或内容,使用不同的颜色来区分不同的菜单项或导航链接。
这样的设计可以帮助用户更好地理解和使用菜单和导航系统。
五、考虑响应式设计在今天移动设备的普及下,响应式设计已经成为了设计的标配。
在设计多级菜单和导航时,我们需要考虑不同屏幕尺寸和设备的适配性。
通过使用Axure的响应式设计功能,我们可以根据不同的屏幕尺寸和设备类型,自动调整菜单和导航的布局和样式,以提供更好的用户体验。
JS无限级导航菜单实现方法
JS⽆限级导航菜单实现⽅法这⾥使⽤layui渲染的导航实体类dept.javaprivate int id; //idprivate String dept_name; //部门名称private int pid; //上级部门idprivate int sort_num; //排序值private int create_id; //创建⼈private String create_time; //创建时间private int modify_id; //修改⼈private String modify_time; //最后修改时间private int is_del; // 是否删除 0 未删除 1 已删除private int status; //statusprivate String remark; //remarkprivate List<Dept> deptChild = new ArrayList<>(); //部门迭代DeptMapper.javaList<Dept> selectDeptForJsonMenu();DeptMapper.xml<resultMap type="com.ys.entity.Dept" id="deptFirst"><result column="id" property="id" javaType="ng.Integer" /><result column="dept_name" property="dept_name" javaType="ng.String" /><result column="sort_num" property="sort_num" javaType="ng.Integer" /><result column="create_time" property="create_time" javaType="ng.String" /><result column="modify_id" property="modify_id" javaType="ng.Integer" /><result column="modify_time" property="modify_time" javaType="ng.String" /><result column="is_del" property="is_del" javaType="ng.Integer" /><result column="status" property="status" javaType="ng.Integer" /><result column="remark" property="remark" javaType="ng.String" /><collection column="id" property="deptChild" javaType="java.util.ArrayList" select="selectDeptForJsonMenuChild"/> </resultMap><!-- 查询部门菜单树 --><select id="selectDeptForJsonMenu" resultMap="deptFirst">SELECT * FROM sys_dept WHERE pid = 0 AND is_del = 0 ORDER BY sort_num</select><select id="selectDeptForJsonMenuChild" resultMap="deptFirst" parameterType="ng.Integer">select * FROM sys_dept where pid = #{id} AND is_del = 0 ORDER BY sort_num</select>DeptService.javapublic List<Dept> selectDeptForJsonMenu(){return mapper.selectDeptForJsonMenu();}DeptController.java@RequestMapping(value = "selectDeptForJsonMenu",method={RequestMethod.GET,RequestMethod.POST})@ResponseBodypublic List<Dept> selectDeptForJsonMenu(){return service.selectDeptForJsonMenu();}html 引⼊layui.js,layui.css 并加载element模块.<div id="leftMenu"></div>$(function(){$.ajax({method:'post',url:getPath+"dept/selectDeptForJsonMenu",dataType:'json',success:function(data){if(data.length > 0){var showlist = $('<ul class="layui-nav layui-nav-tree"></ul>');showall(data, showlist);$("#leftMenu").html(showlist);}else{$('#leftMenu').html('<span class="layui-btn layui-btn-primary" id="add">添加</span>') ;}}});//json为json数据//parent为最终html拼接内容function showall(json, parent) {for (var i in json) {//有⼦节点遍历if (json[i].deptChild.length > 0) {//创建livar li = $('<li class="layui-nav-item layui-nav-itemed"></li>');$(li).append('<a href="javascript:;" rel="external nofollow" rel="external nofollow" >'+json[i].dept_name+'</a>');$(li).append('<ul class="layui-nav-child"></ul>').appendTo(parent);//将UL选中回调showall(json[i].deptChild, $(li).children().eq(1));}//⽆⼦级else {$('<li></li>').append('<a href="javascript:;" rel="external nofollow" rel="external nofollow" >'+json[i].dept_name+'</a>').appendTo(parent);}}}});总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。
移动端实现树级菜单的方法
移动端实现树级菜单的方法全文共四篇示例,供读者参考第一篇示例:移动端实现树级菜单的方法随着移动设备的普及和移动应用的流行,越来越多的网站和应用开始重视移动端的用户体验。
在移动端,屏幕空间有限,如何有效地展示复杂的菜单结构成为了一个挑战。
树级菜单是一种常见的菜单结构,通过多层次的嵌套展示不同级别的菜单选项。
本文将介绍在移动端实现树级菜单的方法,以提升用户体验和提高网站或应用的可用性。
一、响应式设计在移动端实现树级菜单时,首先要考虑的是使用响应式设计。
响应式设计可以根据设备的屏幕大小和分辨率自动调整页面布局,以适配不同的设备。
在移动端,可以通过媒体查询和弹性布局来实现响应式设计,保证菜单能够在不同屏幕尺寸下正常显示。
二、折叠菜单折叠菜单是在移动端常用的菜单形式之一,通过折叠和展开的方式来展示不同级别的菜单选项。
在树级菜单中,可以将子菜单折叠起来,只显示父菜单和展开箭头,用户点击展开箭头后,可以展开子菜单,直到最底层菜单选项。
三、滑动菜单滑动菜单是另一种常见的移动端菜单形式,用户可以通过滑动手势来查看菜单选项。
在树级菜单中,可以利用滑动菜单来展示多层次的菜单结构,用户可以通过左右滑动来浏览不同级别的菜单选项。
四、手势操作在移动端实现树级菜单时,要考虑到用户的手势操作习惯。
在触摸屏设备上,用户习惯使用手指滑动和点击来进行操作,因此菜单的设计应该考虑到这些手势操作。
可以通过滑动展开子菜单、点击选择菜单选项等方式来提升用户体验。
五、动画效果动画效果可以提升用户体验,并增加菜单的交互性。
在移动端实现树级菜单时,可以使用一些简单的动画效果,比如展开和折叠菜单时的过渡动画、菜单选项的渐变效果等。
这些动画效果可以使菜单更生动,吸引用户的注意力。
六、适配不同屏幕大小七、测试优化在移动端实现树级菜单后,需要进行测试和优化,确保菜单在不同设备和浏览器上都能正常显示和使用。
可以通过模拟不同设备、不同网络速度来测试菜单的性能和兼容性,及时修复可能存在的问题,提升用户体验。
(转)shell实现多级菜单脚本编写
(转)shell实现多级菜单脚本编写shell实现多级菜单脚本编写原⽂:https:///info/2gOwBPvqyb.html这篇⽂章主要介绍了Shell实现多级菜单系统安装脚本实例分享,本⽂脚本⽤多级菜单实现LAMP、LNMP安装展现效果,需要的朋友可以参考下:提⽰:本脚本主要实现多级菜单效果,并没有安装LAMP、LNMP环境,如果要⽤在实际⽣成环境中部署LNMP、LAMP环境,只需要简单修改⼀下就可以了。
演⽰效果:1、⼀级菜单2、⼆级菜单3、执⾏操作脚本参考:代码如下:#!/bin/bash#[ -f /etc/init.d/functions ] && . /etc/init.d/functionsfunction menu(){cat << EOF----------------------------------------------|*******Please Enter Your Choice:[1-4]*******|--------------------------------------------------------------------------------------------* `echo -e "\033[35m 1)lamp install\033[0m"`* `echo -e "\033[35m 2)lnmp install\033[0m"`* `echo -e "\033[35m 3)quit\033[0m"`* `echo -e "\033[35m 4)return main menu\033[0m"`EOF}function lamp_menu(){cat << EOF----------------------------------------------|*******Please Enter Your Choice:[1-4]*******|----------------------------------------------* `echo -e "\033[35m 1)http install\033[0m"`* `echo -e "\033[35m 2)mysql install\033[0m"`* `echo -e "\033[35m 3)php install\033[0m"`* `echo -e "\033[35m 4)return main menu\033[0m"`EOFread -p "####please input second_lamp optios[1-4]: " num2expr $num2 + 1 &>/dev/null #这⾥加1,判断输⼊的是不是整数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面给出数据结构的设计(非常简单),这里我没有加上竖直的虚线(windows资源管理器的虚线),同时Sql语句我也将其固定,大家可以根
据自己的需要来修改!如果有问题可以联系我:msn:banneryue@,QQ:7665656,E_mail:yuepengfei@
function ListChildTree($SearchPattern,$BaseNum){
global $Tree;//声明连接数据库的句柄为全局
$Sql="select DepartmentId,DepartmentName from test where DepartmentId like
$Tree = new DB_Sql;
$Tree->connect();//连接数据库,可根据需要换成自己的代码
$Sql="select DepartmentId,DepartmentName from test where
length(DepartmentId)=3";//提出最上层节点(祖宗节点),根据需要自己修改
$Result=$Tree->query_first($Sql);
?>
<div align="center">
<center>
$Space="";
for($j=0;$j<((strlen($SearchPattern)/3)-$BaseNum);$j++)
$Space.=" ";
{ this.document.all[expid].style.display="block";
this.document.all[picid].src="leaf.gif";
}
else
{
this.document.all[expid].style.display="none";
</table>
<?}//end while
}//end function?>
<html>
<head>
<title>无限级菜单测试</title>
href="process.php?SearchPattern=<?=trim($Result[0])?>" class="F1"><?=$Result[1]?></a></font>
<table id="<?=$TableId?>" style="display=none" cellspacing="0" cellpadding="0">
<?}else{ //找到则显示"+"图片
?>
<tr><td><?=$Space?><a
<?
ListChildTree($ChildDepartment,$BaseNum);//递归调用函数本身来显示其他孩子节点
}//end if?>
<table border="1" cellpadding="0" cellspacing="0" width="766" bordercolor="#DDCF90" height="392">
//设置显示节点前面的距离,这里的空格的html被这里自动替换成" "了
$ChildDepartment=trim($Result[0])."___";
$ChildSql="select count(*) from test where DepartmentId like
$TablePic="ta".trim($Result[0])."pic"; //设置图片Id
if($ChildResult[0]<1){//如果没有找到孩子节点的节点,则显示"-"图片
this.document.all[picid].src="parent.gif";
}
}
</script>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<?
require("do_mySql.php");
''$ChildDepartment''";//查找孩子节点的孩子节点
$ChildResult=$Tree->query_first($ChildSql);
$TableId="ta".trim($Result[0]); //设置表格Id
<table id="<?=$TableId?>" style="display=none" cellspacing="0" cellpadding="0">
align="absmiddle" width="35" height="17"></span><font size="2"><A href="process.php?SearchPattern=<?=trim($Result[0])?>"
class="F1"><?=$Result[1]?></a></font>
<tr>
<td valign="top">
<div align="center">
明天(已经是今天了,呵呵)我会提供一个测试页面让大家来看(因为我在宿舍只能拨号上网,Ip地址不固定)
*/
/** 递归显示子节点函数
*
*
* @param $SearchPattern 查找的条件(like)
* @param $BaseNum 节点的层数
*/
<table border="0" cellpadding="0" cellspacing="0" width="372">
<tr>
''$SearchPattern''"; //查找孩子节点
$QueryChild=$Tree->query($Sql);
while($Result=$Tree->fetch_array($QueryChild)) { //取出孩子节点
无限级别菜单的实现(其实还是有限级别的^0^)
文章类别:php 加入时间:2002-9-26 人气指数:1771
<? /* 看到很多朋友问过无限级别菜单的的问题(其实理论上还是有级别的,毕竟要受到个方便的条件的限制,比如:
数据库字段的类型等),我曾经用老大(唠叨)提供的代码写出来过无限级别的菜单,但是感觉效果不是很好(视觉上),于是趁着"夜深人静
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="../text.css" type="text/css">
<script language="javascript">
?>
<tr><td><?=$Space?><span align="absmiddle"><img src="leaf.gif" border="0"
function expands(expid,picid) //显示图片张合的Js
{ // alert("this.document.all["+expid+"].style.display");
if(this.document.all[expid].style.display=="none")
onclick="javascript:expands(''<?=$TableId?>'',''<?=$TablePic?>'')" style="cursor:hand"><span align="absmiddle"><img
id="<?=$TablePic?>" src="parent.gif" border="0" align="absmiddle" width="35" height="17"></span></a><font size="2"><A