谁有jsp+javascript的动态树,每次只载入一级,有源码最好 我应该有。先MARK,明天帮你找! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 失败,我的代码太~~~~~~~~~~那个了。----------------------------------------------------------------menu.jsp:<%--树型风格菜单@author joe@req menuFileName 菜单描述文件名(XML文件),必需@req menuName 菜单描述结点名,必需--%><%@ page contentType="text/html;charset=GBK"%><%@ page language="java"%><%@ page import="java.util.*"%><%@ page import="wad2.util.*"%><%@ page import="wad2.vdm.*"%><%menu menu = new menu(ConfigValue.getApplicationWadConfigXML()+"\\"+request.getParameter("menuFileName")+".xml","menu","name",request.getParameter("menuName"));%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>欢迎使用VDM2.0版本 </title><link rel="stylesheet" type="text/css" href="css/vdm.css"><script language="javascript" src="js/util.js"></script><STYLE><!--body{ background-color :#ffffff; margin-left: 3pt; margin-right: 10pt; overflow-x: auto; font-size: 12px;}--></STYLE><%if (!menu.defaultPage.equals("")){ if (menu.defaultPage.indexOf("?")>0){%> <script language="javascript"> <!-- parent.detailFrame.location = "<%=menu.defaultPage%>&"+(parent.location+"").substring(1+(parent.location+"").indexOf("?")); --> </script><% }else{%> <script language="javascript"> <!-- parent.detailFrame.location = "<%=menu.defaultPage%>?"+(parent.location+"").substring(1+(parent.location+"").indexOf("?")); --> </script><% }}%></HEAD><BODY><%!String toHTML(menuItem mi){ String str = ""; if (mi.href.equals("")){ str += "<nobr>"+mi.displayName+"</nobr>\r\n"; }else{ str += "<nobr><a href=\"#\" tmpHref=\""+mi.href+"\" target=\""+mi.target+"\">"+mi.displayName+"</a></nobr>"+"\r\n"; } if (mi.alChild.size()>0){ str += "<ol>"+"\r\n"; for (int i=0;i<mi.alChild.size();i++){ str += "<li>"+toHTML((menuItem)mi.alChild.get(i))+"</li>"+"\r\n"; } str += "</ol>"+"\r\n"; } return str;}%><%out.println(menu.displayName);if (menu.alChild.size()>0){ out.println("<ol>"); for (int i=0;i<menu.alChild.size();i++){ out.println("<li>"+toHTML((menuItem)menu.alChild.get(i))+"</li>"); } out.println("</ol>");}%></BODY></HTML>-----------------------------------------------------------生成的HTML文件:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>欢迎使用VDM2.0版本 </title><link rel="stylesheet" type="text/css" href="css/vdm.css"><script language="javascript" src="js/util.js"></script><STYLE><!--body{ background-color :#ffffff; margin-left: 3pt; margin-right: 10pt; overflow-x: auto; font-size: 12px;}--></STYLE> <script language="javascript"> <!-- parent.detailFrame.location = "welcome.jsp?"+(parent.location+"").substring(1+(parent.location+"").indexOf("?")); --> </script></HEAD><BODY>系统菜单<ol><li><nobr>系统管理</nobr><ol><li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录</a></nobr></li><li><nobr><a href="#" tmpHref="logout.jsp" target="detailFrame">注销</a></nobr></li></ol></li><li><nobr>系统管理2</nobr><ol><li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录2</a></nobr></li><li><nobr><a href="#" tmpHref="logout.jsp" target="detailFrame">注销2</a></nobr></li></ol></li><li><nobr>系统管理3</nobr><ol><li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录3</a></nobr><ol><li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录3_1</a></nobr></li><li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录3_2</a></nobr></li></ol></li><li><nobr><a href="#" tmpHref="logout.jsp" target="detailFrame">注销3</a></nobr></li></ol></li></ol></BODY></HTML> -------------------------------STYLE:a{ behavior:url(htc/ahref.htc);}li{ cursor : default; list-style : none; behavior:url(htc/list.htc); line-height: 20px;}ol{ margin-left: 0px; margin-top: 0px; list-style : none;}---------------------------ahref.htc<PUBLIC:ATTACH EVENT="onclick" ONEVENT="jump()"/><SCRIPT LANGUAGE="JavaScript">function jump(){ if (target=="" || target=="_self"){ return true; } openwindowwithoutbar(getAttribute("href"),target); event.returnValue = false;}</SCRIPT>----------------------------------list.htc<PUBLIC:ATTACH EVENT="onload" ONEVENT="init()" FOR="window"/><PUBLIC:ATTACH EVENT="onselectstart" ONEVENT="cancelEvent()" FOR="document"/><PUBLIC:ATTACH EVENT="onclick" ONEVENT="liClick()"/><PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="overSet()"/><PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="outSet()"/><PUBLIC:PROPERTY NAME="everShow" /><SCRIPT LANGUAGE="JavaScript">var extend = false; //初始化是否要展开树型结构function liClick(){ event.cancelBubble = true; if (everShow!=true){ everShow = true; if (children.length!=0 && children(children.length-1).tagName=="OL"){ // 为下级设置图片 for (var j=0;j<children(children.length-1).children.length;j++){ var tmp = children(children.length-1).children(j); var imgHtml = ""; for (var i=0;i<children(0).getElementsByTagName("IMG").length-1;i++){ if (children(0).children(i).tagName=="IMG"){ if (children(0).children(i).src.indexOf("corner.")>0){ imgHtml += "<img align=\"absbottom\" src=\"./images/vercorner.gif\" width=\"16\" height=\"20\">"; }else{ imgHtml += "<img align=\"absbottom\" src=\"./images/ver.gif\" width=\"16\" height=\"20\">"; } } } tmp.children(0).innerHTML = imgHtml + tmp.children(0).innerHTML; } } } if (children(children.length-1).tagName=="OL"){ // 展开下级菜单,并进行"+"、"-"号的转换 var cor = children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src.indexOf("corner.")>0; if (children(children.length-1).style.display == "none"){ children(children.length-1).style.display = ""; if (cor){ children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/subcorner.gif"; }else{ children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/sub.gif"; } }else{ children(children.length-1).style.display = "none"; if (cor){ children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/pluscorner.gif"; }else{ children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/plus.gif"; } } }}function init(){ if (children.length!=0 && children(children.length-1).tagName!="OL"){ if (parentElement.children(parentElement.children.length-1).uniqueID==uniqueID){ children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/crosscorner.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/apppackage.gif\" width=\"16\">" + children(0).innerHTML; }else{ children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/cross.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/apppackage.gif\" width=\"16\">" + children(0).innerHTML; } }else{ if (parentElement.children(parentElement.children.length-1).uniqueID==uniqueID){ children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/pluscorner.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/folder.gif\" width=\"16\">" + children(0).innerHTML; }else{ children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/plus.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/folder.gif\" width=\"16\">" + children(0).innerHTML; } children(children.length-1).style.display = "none"; } if (extend){ // 自动展开树型结构 if (window.document.body.tmpLiCounter==null){ window.document.body.tmpLiCounter=1; }else{ window.document.body.tmpLiCounter++; } if (window.document.body.getElementsByTagName("LI").length==window.document.body.tmpLiCounter){ for (var i=0;i<window.document.body.getElementsByTagName("LI").length;i++){ window.document.body.getElementsByTagName("LI")(i).click(); } } } if (children(0).getElementsByTagName("A").length>0){ //替换连接中的页面参数(如stId等) var link = children(0).getElementsByTagName("A")(0); if (link.tmpHref.indexOf("?")>0){ link.href = link.tmpHref + "&" + (parent.location+"").substring(1+(parent.location+"").indexOf("?")); }else{ link.href = link.tmpHref + "?" + (parent.location+"").substring(1+(parent.location+"").indexOf("?")); } }}function overSet(){ event.cancelBubble = true; children(0).style.backgroundColor = "#D4D0C8";}function outSet(){ event.cancelBubble = true; children(0).style.backgroundColor = "";}function cancelEvent(){ event.returnValue = false;}</SCRIPT> 哎呀,看错了,“每次只载入一级”,抱歉抱歉~~~~~~~~~不过,用XML+JSP应该能实现你要的功能。我很多方法已经分装到class里了,JSP代码比较短。class用了reflect~~~~~看起来更加晦涩~~~直接发给你不太方便,自己理解吧。 有10个textbox,怎样判断用户输入有没有重复? 看看这样为什么取不到值 javascript内部弹窗问题急 怎么样能只打印页面中的一个图片 __想点击链结时打开form中的hidden图片路径,该怎么办呢? 怎样判断以某个名称命名的窗口是否已经存在? 点击文本框,自动选中里面的默认文字 提交与清除的问题 上下两frame的文件,我在上面做了一个类似微软的下拉菜单,结构下拉的时候没有完全显示,也就是被下面的frame遮住了,怎么办呢?暂且40分吧! 请问一个css样式的问题,大家进来看看 动态插入行 求一简单程序
menu.jsp:<%--
树型风格菜单
@author joe
@req menuFileName 菜单描述文件名(XML文件),必需
@req menuName 菜单描述结点名,必需
--%>
<%@ page contentType="text/html;charset=GBK"%>
<%@ page language="java"%>
<%@ page import="java.util.*"%>
<%@ page import="wad2.util.*"%>
<%@ page import="wad2.vdm.*"%>
<%
menu menu = new menu(ConfigValue.getApplicationWadConfigXML()+"\\"+request.getParameter("menuFileName")+".xml","menu","name",request.getParameter("menuName"));
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>欢迎使用VDM2.0版本 </title>
<link rel="stylesheet" type="text/css" href="css/vdm.css">
<script language="javascript" src="js/util.js"></script>
<STYLE>
<!--
body{
background-color :#ffffff;
margin-left: 3pt;
margin-right: 10pt;
overflow-x: auto;
font-size: 12px;
}
-->
</STYLE>
<%
if (!menu.defaultPage.equals("")){
if (menu.defaultPage.indexOf("?")>0){
%>
<script language="javascript">
<!--
parent.detailFrame.location = "<%=menu.defaultPage%>&"+(parent.location+"").substring(1+(parent.location+"").indexOf("?"));
-->
</script>
<%
}else{
%>
<script language="javascript">
<!--
parent.detailFrame.location = "<%=menu.defaultPage%>?"+(parent.location+"").substring(1+(parent.location+"").indexOf("?"));
-->
</script>
<%
}
}
%>
</HEAD>
<BODY>
<%!
String toHTML(menuItem mi){
String str = "";
if (mi.href.equals("")){
str += "<nobr>"+mi.displayName+"</nobr>\r\n";
}else{
str += "<nobr><a href=\"#\" tmpHref=\""+mi.href+"\" target=\""+mi.target+"\">"+mi.displayName+"</a></nobr>"+"\r\n";
}
if (mi.alChild.size()>0){
str += "<ol>"+"\r\n";
for (int i=0;i<mi.alChild.size();i++){
str += "<li>"+toHTML((menuItem)mi.alChild.get(i))+"</li>"+"\r\n";
}
str += "</ol>"+"\r\n";
}
return str;
}
%>
<%
out.println(menu.displayName);
if (menu.alChild.size()>0){
out.println("<ol>");
for (int i=0;i<menu.alChild.size();i++){
out.println("<li>"+toHTML((menuItem)menu.alChild.get(i))+"</li>");
}
out.println("</ol>");
}
%>
</BODY>
</HTML>
-----------------------------------------------------------生成的HTML文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>欢迎使用VDM2.0版本 </title>
<link rel="stylesheet" type="text/css" href="css/vdm.css">
<script language="javascript" src="js/util.js"></script>
<STYLE>
<!--
body{
background-color :#ffffff;
margin-left: 3pt;
margin-right: 10pt;
overflow-x: auto;
font-size: 12px;
}
-->
</STYLE> <script language="javascript">
<!--
parent.detailFrame.location = "welcome.jsp?"+(parent.location+"").substring(1+(parent.location+"").indexOf("?"));
-->
</script></HEAD>
<BODY>系统菜单
<ol>
<li><nobr>系统管理</nobr>
<ol>
<li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录</a></nobr>
</li>
<li><nobr><a href="#" tmpHref="logout.jsp" target="detailFrame">注销</a></nobr>
</li>
</ol>
</li>
<li><nobr>系统管理2</nobr>
<ol>
<li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录2</a></nobr>
</li>
<li><nobr><a href="#" tmpHref="logout.jsp" target="detailFrame">注销2</a></nobr>
</li>
</ol>
</li>
<li><nobr>系统管理3</nobr>
<ol>
<li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录3</a></nobr>
<ol>
<li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录3_1</a></nobr>
</li>
<li><nobr><a href="#" tmpHref="logon.jsp" target="detailFrame">登录3_2</a></nobr>
</li>
</ol>
</li>
<li><nobr><a href="#" tmpHref="logout.jsp" target="detailFrame">注销3</a></nobr>
</li>
</ol>
</li>
</ol></BODY>
</HTML>
STYLE:
a{
behavior:url(htc/ahref.htc);
}
li{
cursor : default;
list-style : none;
behavior:url(htc/list.htc);
line-height: 20px;
}
ol{
margin-left: 0px;
margin-top: 0px;
list-style : none;
}---------------------------ahref.htc<PUBLIC:ATTACH EVENT="onclick" ONEVENT="jump()"/><SCRIPT LANGUAGE="JavaScript">function jump(){
if (target=="" || target=="_self"){
return true;
}
openwindowwithoutbar(getAttribute("href"),target);
event.returnValue = false;
}</SCRIPT>
----------------------------------list.htc<PUBLIC:ATTACH EVENT="onload" ONEVENT="init()" FOR="window"/>
<PUBLIC:ATTACH EVENT="onselectstart" ONEVENT="cancelEvent()" FOR="document"/>
<PUBLIC:ATTACH EVENT="onclick" ONEVENT="liClick()"/>
<PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="overSet()"/>
<PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="outSet()"/>
<PUBLIC:PROPERTY NAME="everShow" /><SCRIPT LANGUAGE="JavaScript">
var extend = false; //初始化是否要展开树型结构function liClick(){
event.cancelBubble = true;
if (everShow!=true){
everShow = true; if (children.length!=0 && children(children.length-1).tagName=="OL"){
// 为下级设置图片
for (var j=0;j<children(children.length-1).children.length;j++){
var tmp = children(children.length-1).children(j);
var imgHtml = "";
for (var i=0;i<children(0).getElementsByTagName("IMG").length-1;i++){
if (children(0).children(i).tagName=="IMG"){
if (children(0).children(i).src.indexOf("corner.")>0){
imgHtml += "<img align=\"absbottom\" src=\"./images/vercorner.gif\" width=\"16\" height=\"20\">";
}else{
imgHtml += "<img align=\"absbottom\" src=\"./images/ver.gif\" width=\"16\" height=\"20\">";
}
}
}
tmp.children(0).innerHTML = imgHtml + tmp.children(0).innerHTML;
}
}
} if (children(children.length-1).tagName=="OL"){
// 展开下级菜单,并进行"+"、"-"号的转换
var cor = children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src.indexOf("corner.")>0;
if (children(children.length-1).style.display == "none"){
children(children.length-1).style.display = "";
if (cor){
children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/subcorner.gif";
}else{
children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/sub.gif";
}
}else{
children(children.length-1).style.display = "none";
if (cor){
children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/pluscorner.gif";
}else{
children(0).getElementsByTagName("IMG")(children(0).getElementsByTagName("IMG").length-2).src = "./images/plus.gif";
}
}
}
}function init(){
if (children.length!=0 && children(children.length-1).tagName!="OL"){
if (parentElement.children(parentElement.children.length-1).uniqueID==uniqueID){
children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/crosscorner.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/apppackage.gif\" width=\"16\">" + children(0).innerHTML;
}else{
children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/cross.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/apppackage.gif\" width=\"16\">" + children(0).innerHTML;
}
}else{
if (parentElement.children(parentElement.children.length-1).uniqueID==uniqueID){
children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/pluscorner.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/folder.gif\" width=\"16\">" + children(0).innerHTML;
}else{
children(0).innerHTML = "<img align=\"absbottom\" src=\"./images/plus.gif\" width=\"16\" height=\"20\"><img align=\"absbottom\" src=\"./images/folder.gif\" width=\"16\">" + children(0).innerHTML;
}
children(children.length-1).style.display = "none";
}
if (extend){
// 自动展开树型结构
if (window.document.body.tmpLiCounter==null){
window.document.body.tmpLiCounter=1;
}else{
window.document.body.tmpLiCounter++;
}
if (window.document.body.getElementsByTagName("LI").length==window.document.body.tmpLiCounter){
for (var i=0;i<window.document.body.getElementsByTagName("LI").length;i++){
window.document.body.getElementsByTagName("LI")(i).click();
}
}
}
if (children(0).getElementsByTagName("A").length>0){
//替换连接中的页面参数(如stId等)
var link = children(0).getElementsByTagName("A")(0);
if (link.tmpHref.indexOf("?")>0){
link.href = link.tmpHref + "&" + (parent.location+"").substring(1+(parent.location+"").indexOf("?"));
}else{
link.href = link.tmpHref + "?" + (parent.location+"").substring(1+(parent.location+"").indexOf("?"));
}
}
}function overSet(){
event.cancelBubble = true;
children(0).style.backgroundColor = "#D4D0C8";
}function outSet(){
event.cancelBubble = true;
children(0).style.backgroundColor = "";
}function cancelEvent(){
event.returnValue = false;
}
</SCRIPT>
我很多方法已经分装到class里了,JSP代码比较短。class用了reflect~~~~~看起来更加晦涩~~~直接发给你不太方便,自己理解吧。