亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

純jsp打造無限層次的樹代碼

2024-09-05 00:21:16
字體:
來源:轉載
供稿:網友
很多人在開發中遇到過這樣的問題:一個表,有自己編號,內容,上級編號,如何用這些數據在jsp中構造一個樹?

做樹并不復雜,但我們通常做的是2層或3層,那樣的數據一般來自多個表,比如:部門,員工
然而這種自連接的表,其沒有確定的層次,可能是無限多級
比如:a是b的上級,b是c的上級,c是d的上級...
每個上級有幾個下級,下級的層次,都是動態的
解決這個問題,其實主要用到js的知識
可以使用div的innerHTML屬性
當然也可以用table,用append的方法
下面就用div的innerHTML屬性來實現
主要思路是通過super,在document中查找id與自身super關聯的div,這個div就是自身的上級,把自己附加到這個div中就可以了
另外,通過設置自己的title,保存了自己上級的id
為了看到層層縮進效果,設置了div的style為左邊距有10px
+ 和 - 通過div中的span實現,這里改變的是span的innerHTML,也可以換為用圖片,改變img的src即可
而在點擊這些 + 或 - 的時候,會調用一個js函數,傳入自己的id,這個函數會在document的所有div中查找自己的下級,由于每個div的title保存了其上級的id,所以只有找到那些title為自己id的就可以了
找到這些下級,就設置其隱藏或顯示即可
建表
use tempdb
go
create table tb
(
id int primary key,
name varchar(50) not null,
super int references tb
)
insert into tb values (1,'總公司',null);
insert into tb values (2,'長沙分公司',1);
insert into tb values (3,'株洲分公司',1);
insert into tb values (4,'湘潭公司',1);
insert into tb values (5,'長沙東區分點',2);
insert into tb values (6,'長沙南區分點',2);
insert into tb values (7,'湘潭東區分點',4);
insert into tb values (8,'長沙東區分點一處',5);
insert into tb values (9,'長沙東區分點二處',5);
insert into tb values (10,'長沙東區分點三處',5);
insert into tb values (11,'長沙南區分點一處',6);
insert into tb values (12,'長沙南區分點二處',6);
insert into tb values (13,'湘潭東區分點一處',7);
insert into tb values (14,'湘潭東區分點二處',7);
insert into tb values (15,'長沙東區分點一處一門市部',8);
insert into tb values (16,'長沙東區分點一處二門市部',8);
select id,name,isnull(super,0) as super from tb order by super
-------------------------------------------------------------------------------------------------------------------------
tree.jsp文件
<%@ page language="java" import="java.sql.*,java.util.*" pageEncoding="gbk" contentType="text/html; charset=gbk" isELIgnored="false"%>
<%
//獲取數據庫的數據,并保存為雙層集合,然后放到pageContext中
//這樣與使用dao和servlet得到的,放到request中的方式是一致的
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;databasename=tempdb";
Connection cn = DriverManager.getConnection(url,"sa","sa");
Statement st = cn.createStatement();
String sql = "select id,name,isnull(super,0) as super from tb order by super";
ResultSet rs = st.executeQuery(sql);
ArrayList lstAll = new ArrayList();
ArrayList lstLine;
while(rs.next()) {
lstLine = new ArrayList();
lstLine.add(rs.getString(1));
lstLine.add(rs.getString(2));
lstLine.add(rs.getString(3));
lstAll.add(lstLine);
}
pageContext.setAttribute("lstAll",lstAll);
%>
<script>
//初始化樹
function ini() {
var str = "${lstAll}";
var ary = str.split("], [");
var i,j;
var len = ary.length;
var ary2,len2;
var str,str2,obj;
for(i=0;i<len;i++) {
ary[i] = ary[i].replace("[[","");
ary[i] = ary[i].replace("]]","");
ary2 = ary[i].split(", ");
if(ary2[2]=="0") {
//頂層:設置其上級為div0
obj = document.getElementById("div0");
//定義自身內容,設置自身可見 -- display:block
//span用于確定 + 或 - ,并且ope函數用于點擊時顯示或隱藏下級
str2 = "<div><span>+</span> " + ary2[1] + "</div>";
}
else {
//其他:查找其上級,即:ID為 'div' + ary2[2] 的div
//如:如果ary2[2]為3,那么其上級為 div3
obj = document.getElementById("div" + ary2[2]);
//定義自身內容,其中title用于存儲其上級ID,設置自身不可見 -- display:none
str2 = "<div + ary2[2] + "'><span>+</span> " + ary2[1] + "</div>";
}
str = obj.innerHTML; //獲取上級原來的內容
str = str + str2; //附加當前div
obj.innerHTML = str; //設置上級的新內容
}
}
//點某個節點時,展開或隱藏其下級
function ope(id) {
//首先改變 + 和 -
var obj = document.getElementById("span" + id);
if(obj.innerHTML == "+") {
obj.innerHTML = "-";
}
else {
obj.innerHTML = "+";
}
//然后找到下級,并改變其可見性
var objs = document.getElementsByTagName("div"); //獲取所有的div
var len = objs.length;
//遍歷這些div,找到所有的下級,即: title為id 的div,對于這些下級
//如果原來是隱藏,就讓其顯示;否則,隱藏--通過設置其style的display即可
var i,title;
for(i=0;i<len;i++) {
obj = objs[i];
title = obj.title;
if(title==null || isNaN(title)) {
continue;
}
if(parseInt(title)==parseInt(id)) {
if(obj.style.display=="none") {
obj.style.display = "block";
}
else {
obj.style.display = "none";
}
}
}
}
</script>
<style>
div{margin-left:10px;color:darkblue}
span{color:red;cursor:hand}
</style>
<body>
<div></div>
------------------------------------------------------------------------------------------------------------------------------
大家可以進一步想,實際點每個內容的時候,一般會鏈接到某個url,那么,這里怎么處理?
如果你熟悉html和js,當然就是很容易的
思路:數據庫中該表增加一個字段,url,定義鏈接地址
在js中修改代碼
大家還可以考慮把它做成標簽,更方便

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91高潮精品免费porn| 最近免费中文字幕视频2019| 亚洲成人精品av| 亚洲成人动漫在线播放| 日韩专区在线播放| 久久天天躁狠狠躁夜夜av| 亚洲v日韩v综合v精品v| 亚洲国产欧美自拍| 国产精品亚洲精品| 在线观看欧美www| 日韩欧美大尺度| 国产精品久在线观看| 欧美激情国产日韩精品一区18| 国产欧美va欧美va香蕉在线| 欧美性xxxxx极品| 一级做a爰片久久毛片美女图片| 久久人人爽人人爽人人片av高请| 欧美成人午夜激情在线| 国产精品电影在线观看| 国产精品18久久久久久首页狼| 亚洲第一精品久久忘忧草社区| 国内精品久久久久| 国产精品日韩一区| 久久久精品一区二区三区| 国产精品免费一区二区三区都可以| 正在播放国产一区| 欧美性色xo影院| 在线日韩中文字幕| 欧美激情视频网址| 中文字幕一区二区精品| 亚洲成人av中文字幕| 91视频免费在线| 亚州精品天堂中文字幕| 亚洲美女精品成人在线视频| 欧美极品在线播放| 欧美另类极品videosbestfree| 国产国语刺激对白av不卡| 日韩美女视频在线观看| 国产精品入口免费视| 欧美另类在线观看| 欧美中文字幕在线| 蜜月aⅴ免费一区二区三区| 亚洲综合在线播放| 国产精品中文字幕在线| 久久久免费在线观看| 热门国产精品亚洲第一区在线| 最好看的2019年中文视频| 91国产美女在线观看| 国产男人精品视频| 久久久综合免费视频| 91精品久久久久久久久久久久久久| 亚洲成人亚洲激情| 懂色aⅴ精品一区二区三区蜜月| 欧美成人精品在线播放| 亚洲女人被黑人巨大进入al| 91精品国产成人| 国产精品一区二区三区成人| 国产不卡一区二区在线播放| 久久久久久中文字幕| 亚洲大胆人体在线| 午夜伦理精品一区| 亚洲一区二区免费| 久久99国产综合精品女同| 欧美成人免费大片| 国产日韩精品一区二区| 亚洲香蕉在线观看| 91沈先生作品| 午夜精品一区二区三区在线视| 国产欧美日韩亚洲精品| 97超级碰碰人国产在线观看| 久久久人成影片一区二区三区观看| 中文.日本.精品| 91精品国产乱码久久久久久久久| 久久男人av资源网站| 成人www视频在线观看| 成人激情黄色网| 亚洲xxxx妇黄裸体| 国产日产欧美精品| 欧美贵妇videos办公室| 2019av中文字幕| 92福利视频午夜1000合集在线观看| 欧美日韩国产成人在线观看| 精品欧美aⅴ在线网站| 曰本色欧美视频在线| 欧美成人免费全部观看天天性色| 亚州精品天堂中文字幕| 久久777国产线看观看精品| 国产精品三级久久久久久电影| 91久久精品国产91性色| 高清欧美一区二区三区| 欧美在线视频免费| 韩国精品美女www爽爽爽视频| 欧美日韩精品在线播放| 原创国产精品91| 亚洲加勒比久久88色综合| 久久色在线播放| 成人久久久久久久| 精品国产1区2区| 国产日韩欧美91| 国产成人高清激情视频在线观看| 在线亚洲男人天堂| 欧美日韩成人免费| 国产精品亚洲网站| 国产在线视频欧美| 色阁综合伊人av| 九九热在线精品视频| 视频在线观看99| 亚洲一区亚洲二区亚洲三区| 国产性色av一区二区| 成人免费大片黄在线播放| 国产精品成人一区二区三区吃奶| 欧美激情一区二区三区在线视频观看| 日韩女优人人人人射在线视频| 欧美精品久久一区二区| 精品av在线播放| 高清欧美性猛交xxxx| 久久免费精品视频| 久久久精品在线观看| 欧美黑人巨大xxx极品| 亚洲国产小视频在线观看| 日韩成人黄色av| 成人做爰www免费看视频网站| 91久久精品久久国产性色也91| 亚洲韩国欧洲国产日产av| 久久视频在线视频| 欧美国产日韩一区| 日韩av免费观影| 亚洲成年网站在线观看| 成人精品久久av网站| 91a在线视频| 国产69精品99久久久久久宅男| 中文字幕亚洲欧美日韩高清| 欧美性猛交xxxx久久久| 色综合久久中文字幕综合网小说| 国产精品男女猛烈高潮激情| 中文字幕在线精品| 2019亚洲日韩新视频| 91免费高清视频| 欧美日韩在线视频观看| 国产精品一区二区三| 久久精品国产91精品亚洲| 亚洲第一在线视频| 国产欧美日韩亚洲精品| 国产精品99久久久久久人| 国语自产精品视频在线看| 国产精品成av人在线视午夜片| 亚洲最新中文字幕| 91久久久久久国产精品| 国产伦精品免费视频| 欧美最顶级的aⅴ艳星| 久久精品成人欧美大片| 日本午夜在线亚洲.国产| 欧美一区二区.| 在线播放精品一区二区三区| 欧美精品在线免费观看| 大胆欧美人体视频| 日韩成人免费视频| 亚洲欧美日韩在线一区| 国产精品久久久久av免费| 欧美激情久久久久| 亚洲一区二区三区在线视频| 国产成人精品电影久久久| 久久久精品久久久久| 国产一区二区三区在线播放免费观看|