javascript下拉列表菜單的實(shí)現(xiàn)方法
之前寫(xiě)過(guò)這個(gè)《javascript下拉列表中顯示樹(shù)形菜單的實(shí)現(xiàn)方法》菜單的體現(xiàn),但是在寫(xiě)了之后就發(fā)現(xiàn)了,不太適合,高度要精準(zhǔn)控制,并且還不是很好看?,F(xiàn)在采用table來(lái)封裝,我們知道table的每一行寫(xiě)滿了之后,下一行會(huì)自動(dòng)加,這個(gè)比之前我們自己制定高度好很多。
1、點(diǎn)擊之后都可以并存的情況(只需函數(shù)寫(xiě)法不一樣就可)
dispaly也是自己設(shè)置的,通過(guò)父節(jié)點(diǎn)來(lái)操作子節(jié)點(diǎn),顯示與否;
/* function open1(node){
//通過(guò)父節(jié)點(diǎn)來(lái)操作兄弟節(jié)點(diǎn)
當(dāng)點(diǎn)擊之后出現(xiàn)之后,直接就能打開(kāi)但是要求在點(diǎn)開(kāi)一個(gè)時(shí)候,其余的都關(guān)掉
var nodes = node.parentNode;
var nn = nodes.getElementsByTagName("ul")[0];
with (nn.style) {
display = (display == "block") ? "none" : "block";
}
}*/
</script>
2、點(diǎn)擊之后只允許打開(kāi)一個(gè),其余的都要關(guān)掉
<script type="text/javascript">
function list1(node){
//這是要對(duì)全部操作,必須要得到所有的對(duì)象 (根據(jù)table 的id 來(lái)獲得)
//根據(jù)this判斷,不是屬于this,那么就關(guān)閉
//alert("aa");
//1,獲得點(diǎn)擊對(duì)象的值
var nodes = node.parentNode;//傳入當(dāng)前的父節(jié)點(diǎn)
var nn = nodes.getElementsByTagName("ul")[0];//得到當(dāng)前的對(duì)象,要是遍歷所有,與這個(gè)對(duì)象一樣,就設(shè)置相反的情況,其余的全部關(guān)閉
//2,獲得全部對(duì)象
var mm = document.getElementById("menuid");
var names = mm.getElementsByTagName("ul");
//3,開(kāi)始一一配對(duì)
for (var x = 0; x < names.length; x++) {
/*這樣寫(xiě),可以簡(jiǎn)化,利用下面的方法
if (names[x] == nn) {
if (nn.className == "open2") {
nn.className = "close2";
}
else {
nn.className = "open2";
}
}else {
nn.className = "close2";
}*/
if(names[x]==nn&&names[x].className!="open2"){
nn.className="open2";
}else{
names[x].className="close2";
}
}
}
</script>
css樣式的編寫(xiě):
<style type="text/css">
ul{
list-style:none;
margin:0px;
padding:0px;
}
table{
border:#00ff40 solid 1px;
}
table a{
text-decoration:none;
}
table tr td ul{
display:none;
}
.open2{
display:block;
background:#8080ff;
}
.close2{
display:none;
}
效果圖(只能開(kāi)一個(gè)的):


完整代碼:
<!DOCTYPE html>
<html>
<head>
<title>qqMenu.html</title>
<style type="text/css">
ul{
list-style:none;
margin:0px;
padding:0px;
}
table{
border:#00ff40 solid 1px;
}
table a{
text-decoration:none;
}
table tr td ul{
display:none;
}
.open2{
display:block;
background:#8080ff;
}
.close2{
display:none;
}
</style>
<script type="text/javascript">
/* function open1(node){
//通過(guò)父節(jié)點(diǎn)來(lái)操作兄弟節(jié)點(diǎn)
當(dāng)點(diǎn)擊之后出現(xiàn)之后,直接就能打開(kāi)但是要求在點(diǎn)開(kāi)一個(gè)時(shí)候,其余的都關(guān)掉
var nodes = node.parentNode;
var nn = nodes.getElementsByTagName("ul")[0];
with (nn.style) {
display = (display == "block") ? "none" : "block";
}
}*/
</script>
<script type="text/javascript">
function list1(node){
//這是要對(duì)全部操作,必須要得到所有的對(duì)象 (根據(jù)table 的id 來(lái)獲得)
//根據(jù)this判斷,不是屬于this,那么就關(guān)閉
//alert("aa");
//1,獲得點(diǎn)擊對(duì)象的值
var nodes = node.parentNode;//傳入當(dāng)前的父節(jié)點(diǎn)
var nn = nodes.getElementsByTagName("ul")[0];//得到當(dāng)前的對(duì)象,要是遍歷所有,與這個(gè)對(duì)象一樣,就設(shè)置相反的情況,其余的全部關(guān)閉
//2,獲得全部對(duì)象
var mm = document.getElementById("menuid");
var names = mm.getElementsByTagName("ul");
//3,開(kāi)始一一配對(duì)
for (var x = 0; x < names.length; x++) {
/*這樣寫(xiě),可以簡(jiǎn)化,利用下面的方法
if (names[x] == nn) {
if (nn.className == "open2") {
nn.className = "close2";
}
else {
nn.className = "open2";
}
}else {
nn.className = "close2";
}*/
if(names[x]==nn&&names[x].className!="open2"){
nn.className="open2";
}else{
names[x].className="close2";
}
}
}
</script>
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body >
<table id="menuid">
<tr>
<td>
<!--<a href="javascript:void(0)" onclick="open1(this)">同事欄</a>-->
<a href="javascript:void(0)" onclick="list1(this)">同事欄</a>
<ul >
<li>同事1</li>
<li>同事2</li>
<li>同事3</li>
<li>同事4</li>
</ul>
</td>
</tr>
<tr>
<td>
<!--<a href="javascript:void(0)" onclick="open1(this)">同學(xué)欄</a>-->
<a href="javascript:void(0)" onclick="list1(this)">同學(xué)欄</a>
<ul>
<li>同學(xué)1</li>
<li>同學(xué)2</li>
<li>同學(xué)3</li>
<li>同學(xué)4</li>
</ul>
</td>
</tr>
<tr>
<td>
<!--<a href="javascript:void(0)" onclick="open1(this)">黑名單欄</a>-->
<a href="javascript:void(0)" onclick="list1(this)">黑名單欄</a>
<ul>
<li>黑名單同學(xué)1</li>
<li>黑名單同學(xué)2</li>
<li>黑名單同學(xué)3</li>
<li>黑名單同學(xué)4</li>
</ul>
</td>
</tr>
</table>
</body>
</html>
相信大家通過(guò)這兩篇文章的介紹應(yīng)該有了大概的思路,小編的這篇文章有些制作的效果略微簡(jiǎn)陋,大家可以再進(jìn)一步的完善。
相關(guān)文章
深入淺出ES6新特性之函數(shù)默認(rèn)參數(shù)和箭頭函數(shù)
這篇文章主要介紹了深入淺出ES6新特性之函數(shù)默認(rèn)參數(shù)和箭頭函數(shù) 的相關(guān)資料,需要的朋友可以參考下2016-08-08
jquery結(jié)合CSS使用validate實(shí)現(xiàn)漂亮的驗(yàn)證
這篇文章主要介紹了jquery結(jié)合CSS使用validate實(shí)現(xiàn)漂亮的驗(yàn)證,需要的朋友可以參考下2015-01-01
javascript實(shí)現(xiàn)圖片自動(dòng)和可控的輪播切換特效
這篇文章主要介紹了javascript實(shí)現(xiàn)圖片自動(dòng)和可控的輪播切換特效,效果非常的棒,推薦給大家,有需要的小伙伴可以參考下。2015-04-04
JS簡(jiǎn)單實(shí)現(xiàn)文件上傳實(shí)例代碼(無(wú)需插件)
注意一下:在chrome瀏覽器下,為了數(shù)據(jù)安全,隱藏的input:file不能trigger “click” 事件。 所以要設(shè)置input:file的透明度達(dá)到隱藏的效果2013-11-11
JS獲取經(jīng)緯度并根據(jù)經(jīng)緯度得到城市信息簡(jiǎn)單示例
前端時(shí)間剛好使用了百度地圖的js api定位獲取用戶(hù)當(dāng)前經(jīng)緯度并獲取當(dāng)前詳細(xì)位置的功能,為了方便下次找起來(lái)方便一些自己在這里記錄一下,這篇文章主要給大家介紹了關(guān)于JS獲取經(jīng)緯度并根據(jù)經(jīng)緯度得到城市信息的相關(guān)資料,需要的朋友可以參考下2023-11-11
javascript+css 網(wǎng)頁(yè)每次加載不同樣式的實(shí)現(xiàn)方法
用戶(hù)每次訪問(wèn)時(shí)隨機(jī)載入樣式,讓微博在視覺(jué)上保持新鮮感。雖然思路與實(shí)現(xiàn)都比較簡(jiǎn)單,但還是想記錄下來(lái),與大家分享。2009-12-12
JavaScript中的子窗口與父窗口的互相調(diào)用問(wèn)題
本文給大家介紹了JavaScript中的子窗口與父窗口的互相調(diào)用問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-02-02

