網(wǎng)上找的代碼,但是二級(jí)菜單亮的同時(shí)對應(yīng)的父級(jí)菜單就不亮了,我補(bǔ)充了一點(diǎn),但是點(diǎn)擊二級(jí)菜單只有第一個(gè)父級(jí)菜單高亮,與二級(jí)菜單對應(yīng)的沒高亮。怎么用$(this)使得點(diǎn)擊每個(gè)子菜單,對應(yīng)的父級(jí)菜單也會(huì)亮。
<p class="menu">
<ul id='menu'>
<li id=''><a class="" href="first.html">首頁</a></li>
<li id='first-menu'><a class="" href="second.html">second</a>
<ul id='second-menu'>
<li><a href="second-son1.html" >second-son1</a></li>
<li><a href="second-son2.html" >second-son2</a></li>
</ul>
</li>
<li id='first-menu'><a class="" href="third.html">third</a>
<ul id='second-menu'>
<li><a href="third-son1.html" >third-son1</a></li>
</ul>
</li>
<li id=''><a class="" href="fourth.html">fourth</a></li>
</ul>
</p>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
//設(shè)置變量urlstr為當(dāng)前地址
var urlstr = location.href;
//alert((urlstr + '/').indexOf($(this).attr('href')));
//設(shè)置變量urlstatus為false
var urlstatus=false;
//循環(huán)遍歷HTML DOM里id為menu下邊所有的a標(biāo)簽
$("#menu a").each(function (){
//如果當(dāng)前ur與a標(biāo)簽href屬性相等并且當(dāng)前href屬性不為空
if ((urlstr + '/').indexOf($(this).attr('href')) > -1&&$(this).attr('href')!='') {
//為當(dāng)前a標(biāo)簽添加cur樣式,設(shè)置urlstatus變量為true
$(this).addClass('cur'); urlstatus = true;
} else {
//否則為當(dāng)前a標(biāo)簽移除cur樣式
$(this).removeClass('cur');
}
});
if($("#first-menu").has('ul') && $("#second-menu a").hasClass('cur')){
$("#first-menu a").eq(0).addClass('cur'); urlstatus = true;
}
//如果urlstatus為false,為html dom中id為menu 下的第一個(gè)a標(biāo)簽添加 cur樣式
if (!urlstatus) {$("#menu a").eq(0).addClass('cur'); }
</script>
認(rèn)證高級(jí)PHP講師
研究了一晚上做出來了,我的思路是在子菜單擁有當(dāng)前樣式cur的基礎(chǔ)上,再給父級(jí)菜單的a元素加上當(dāng)前樣式。用if判斷當(dāng)前的子菜單是否擁有cur樣式,如果有,就給當(dāng)前父級(jí)菜單a元素加上cur樣式。第一次嘗試的判斷不明確,始終加的是第一個(gè)名為second的父級(jí)菜單,應(yīng)該用$this。于是就遍歷擁有二級(jí)菜單的子菜單,取得當(dāng)前擁有cur樣式的子菜單,把當(dāng)前父欄目的同胞為a的元素,也就是父級(jí)菜單的樣式添加為cur,這樣一來就好了。上面的id重復(fù)了,改成class,多謝下面的兄臺(tái)提醒,但是為什么谷歌瀏覽器沒有報(bào)錯(cuò)?
<p class="menu">
<ul id='menu'>
<li ><a class="" href="first.html">首頁</a></li>
<li class='first-menu'><a class="" href="second.html">second</a>
<ul >
<li><a href="second-son1.html" >second-son1</a></li>
<li><a href="second-son2.html" >second-son2</a></li>
</ul>
</li>
<li class='first-menu'><a class="" href="third.html">third</a>
<ul >
<li><a href="third-son1.html" >third-son1</a></li>
</ul>
</li>
<li ><a class="" href="fourth.html">fourth</a></li>
</ul>
</p>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
//設(shè)置變量urlstr為當(dāng)前地址
var urlstr = location.href;
//alert((urlstr + '/').indexOf($(this).attr('href')));
//設(shè)置變量urlstatus為false
var urlstatus=false;
//循環(huán)遍歷HTML DOM里id為menu下邊所有的a標(biāo)簽
$("#menu a").each(function (){
//如果當(dāng)前ur與a標(biāo)簽href屬性相等并且當(dāng)前href屬性不為空
if ((urlstr + '/').indexOf($(this).attr('href')) > -1&&$(this).attr('href')!='') {
//為當(dāng)前a標(biāo)簽添加cur樣式,設(shè)置urlstatus變量為true
$(this).addClass('cur'); urlstatus = true;
} else {
//否則為當(dāng)前a標(biāo)簽移除cur樣式
$(this).removeClass('cur');
}
});
//遍歷所有父級(jí)菜單的a標(biāo)簽也就是子菜單
$(".first-menu a").each(function(){
//判斷擁有cur樣式的a標(biāo)簽
if($(this).hasClass('cur')){
//把當(dāng)前擁有cur樣式a標(biāo)簽的祖輩的同胞為a的元素,也就是父級(jí)菜單的樣式添加為cur
$(this).parents('ul').siblings('a').eq(0).addClass('cur');
//設(shè)置urlstatus變量為true
urlstatus = true;
}
})
//如果urlstatus為false,為html dom中id為menu 下的第一個(gè)a標(biāo)簽添加 cur樣式
if (!urlstatus) {$("#menu a").eq(0).addClass('cur'); }
</script>
擴(kuò)展:若是三級(jí)菜單,使得點(diǎn)擊三級(jí)菜單的子欄目高亮的同時(shí)父級(jí)欄目一級(jí)和二級(jí)也高亮,該如何做呢?思路是什么呢?
不是很懂你說的高亮是什么意思。想呈現(xiàn)的效果是是,鼠標(biāo)放到一級(jí)菜單,然后出現(xiàn)下拉菜單,然后鼠標(biāo)放到下拉菜單,然后又出現(xiàn)子菜單。鼠標(biāo)停留的菜單要變色么(高亮)? 如果是這個(gè)意思,css 也可以實(shí)現(xiàn)。用jQuery 就是事件綁定啊。
這個(gè)html寫法本身就有問題id=first-menu就有兩個(gè).
另外,這類方法直接用css就可以了,比如li:hover的時(shí)候高亮父類
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)