如何匹配元素?

时间:2011-07-07 12:49:53

标签: jquery jquery-selectors

我有以下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


});

我想做什么:

  • 主菜单&gt;中找到与 var = MainMenu 匹配的内容li> a 和addClass('active')匹配'a'
  • 子菜单&gt;中找到与 var = SubMenu 匹配的内容li> a 和addClass('active')匹配'a'

那么如何通过这些菜单查找与那些var的匹配?

http://jsfiddle.net/MrTest/gWDm8/124/

6 个答案:

答案 0 :(得分:3)

您可以使用[name^="..."][name$="..."]选择器来匹配以特定字符串开头和结尾的属性:

$('.main-menu > li > a[href^="'+MainMenu+'"], .sub-menu > li > a[href$="'+SubMenu+'"]')
.addClass('active');

演示:http://jsfiddle.net/gWDm8/127/

答案 1 :(得分:2)

使用属性选择器。

item = $('.main-menu > li > a[href="' + MainMenu + '"]');

http://api.jquery.com/attribute-equals-selector/

答案 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');
    }
});

http://jsfiddle.net/MKH3Y/

答案 4 :(得分:0)

您可以为每个元素指定ID或类别,然后逐个使用,或者您可以使用.each

例如:

$("ul > li").each(function(){
... your code ...
}

答案 5 :(得分:0)

        $(".main-menu > li > a[href^='" + MainMenu + "']");
        $(".sub-menu > li > a[href$='" + SubMenu + "']");