我有以下html:
<!-- MainMenu -->
<ul class="main-menu">
<li><a href="About/xxxxx">About</a></li>
<li><a href="Services/xxxxx">Services</a></li>
<li><a href="Portfolio/xxxxx">Portfolio</a></li>
</ul>
<!-- /MainMenu -->
<!-- MainMenu -->
<ul class="sub-menu">
<li><a href="xxxxx/subpage1.html">About Main</a></li>
<li><a href="xxxxx/subpage2.html">About Main</a></li>
<li><a href="xxxxx/subpage3.html">About Main</a></li>
</ul>
<!-- /MainMenu -->
遵循jQuery,它已经将URL切换为匹配位所需的。
$(document).ready(function() {
urlParts = "www.website.com/About/subpage1.html".split("/")
var MainMenu = urlParts[1]+"/"; // mainmenu e.g About/XXXX
var SubMenu = urlParts[2]; //submenu e.g XXXX/subpage1.html
// Find matched to var = MainMenu within main-menu > li > a
// Find matched to var = SubMenu within sub-menu > li > a
});
我想做什么:
那么如何通过这些菜单查找与那些var的匹配?
答案 0 :(得分:3)
您可以使用[name^="..."]
和[name$="..."]
选择器来匹配以特定字符串开头和结尾的属性:
$('.main-menu > li > a[href^="'+MainMenu+'"], .sub-menu > li > a[href$="'+SubMenu+'"]')
.addClass('active');
答案 1 :(得分:2)
使用属性选择器。
item = $('.main-menu > li > a[href="' + MainMenu + '"]');
答案 2 :(得分:1)
$('.main-menu li a').each(function() {
if( MainMenu == $(this).attr() ) $(this).addClass('active');
});
答案 3 :(得分:1)
一个简单但可能不准确的解决方案是使用:contains
伪选择器:
$('ul.main-menu').find('li:has(a:contains(' + MainMenu + '))').addClass('active');
这会将类active
添加到包含li node
的父anchor
,其中包含字符串。更准确的是完全匹配:
$('ul.main-menu, ul.sub-menu').find('a').each(function(_, anchor) {
var $anchor = $(anchor),
parts = $anchor.attr('href').split(/\//);
if( parts[0] === MainMenu || parts[1].indexOf(SubMenu) > -1 ) {
$anchor.addClass('active');
}
});
答案 4 :(得分:0)
您可以为每个元素指定ID或类别,然后逐个使用,或者您可以使用.each
。
例如:
$("ul > li").each(function(){
... your code ...
}
答案 5 :(得分:0)
$(".main-menu > li > a[href^='" + MainMenu + "']");
$(".sub-menu > li > a[href$='" + SubMenu + "']");