2012-05-29 48 views
0

我試圖在頁面加載時根據URL中的目錄加載一個類別作爲另一個類別。我的代碼正在爲我的菜單中的第一個div工作,但不適用於其他任何人。下面的代碼:`if`條件只適用於遇到的第一個div

$('document').ready(function() { 
    var pathname = window.location.pathname; 
    pathname = pathname.replace('/MVC/', ''); 

    if (pathname == $('.navitem').attr('rel')) { 
     $('.navitem[rel='+pathname+']').toggleClass('navitem selected_menu') 
    } 
}); 

的HTML如下:

<div class="navitem" rel="dashboard"><a href="http://localhost/MVC/dashboard">Dashboard</a></div> 
<div class="navitem" rel="chat"><a href="http://localhost/MVC/chat">Chat</a></div> 
<div class="navitem" rel="users"><a href="http://localhost/MVC/user">Users</a</div> 

當我alert($('.navitem').attr('rel')),它總是返回第一divrel值。我怎樣才能看到它們而不僅僅是第一個呢?

+1

每個每個每個 – undefined

+1

來到這裏,所有使用。每個(10分)的答案。 – j08691

+0

爲什麼不只是取出if語句並保留內部的toggleClass語句?不會發現類「navitem」和「rel」屬性等於路徑名的所有元素...然後切換他們的每個類? – Ian

回答

2

您不能只使用一個比較操作,因爲您必須檢查所有的div s。

$(".navitem").filter(function() { 
    return $(this).attr("rel") === pathname; // filter out the correct one(s) 
}).toggleClass("navitem selected_menu"); 

順便說一下,通常是$(document).ready。雖然在.ready的情況下通過$並不重要,但這是事實上的標準。

+0

使用我最喜歡的函數,'filter()'。 –

+0

非常感謝。我只是在學習jQuery,所以我很抱歉。感謝關於$(document).ready的提示! –

+0

@John Zetterman:不需要道歉,這是本網站的目標:)請不要忘記接受爲您解決問題的答案。 – pimvdb

1

你需要通過他們循環使用每個:

$('.navitem').each(function(){ 
    if (pathname == $(this).attr('rel')) { 
     $(this).toggleClass('navitem selected_menu') 
    } 
}); 
1

你需要使用一個循環。試試這個:

$(".navItem").each(function() { 
    if (pathname == $(this).attr('rel')) { 
     $(this).toggleClass('navitem selected_menu') 
    } 
}); 
1

不需要檢查任何東西,讓選擇器全部做。

$('navitem[rel=' + pathname + ']').toggleClass('navitem selected_menu'); 

甚至不包括if語句。

0

嘗試使用JQuery的.each方法來測試所有匹配元素。就像這樣:

$('document').ready(function() { 
    var pathname = window.location.pathname; 
    pathname = pathname.replace('/MVC/', ''); 

    $('.navitem').each(function() { 
     if ($(this).attr('rel') == pathname) { 
      $(this).toggleClass('selected_menu'); 
     } 
    }); 

}); 
每個
相關問題