2010-07-08 131 views
0

我有以下的jQuery代碼,一切工作正常:jQuery選擇問題

     $("#sidebar .m3, #sidebar .m5").toggle(function() {                   
       $(this).find("img").attr({­src:"images/Up.png"});                  
       }, function() { 
       $(this).find("img").attr({­src:"images/Down.png"});            
     }); 

我的問題是,不是單獨指定$( 「#側邊欄.m3,#sidebar .m5」),那裏有我的菜單項目可能有類M1,M2,M3,M4,M5等, 反正是有其類似的:

$("#sidebar .m[*]"). 

,將滿足任何數量的「.M」後,所以我不需要硬編碼m3或m5?

謝謝。

+0

爲了將來的參考,爲什麼不給普通的東西一個普通的類名呢? – 2010-07-08 00:23:11

+0

好點布蘭登 - 會回去改變這一點。謝謝。 – tonyf 2010-07-08 02:16:05

+0

看看[這裏](http:// stackoverflow。com/questions/190253/jquery-selector-regular-expressions) – griegs 2010-07-08 00:21:01

回答

5

如果這是應用於菜單項的唯一(或第一)類,則可以使用attribute starts with selector

$('#sidebar [class^=m]')... 

一個更好的辦法是讓他們所有的公共課,像menu-item,除了你的其他類功能僅僅作爲一種選擇他們組的所有,然後只需使用:

$('#sidebar .menu-item')... 
+1

+1 tho只是澄清菜單項最終會看起來像'

  • ... ...
  • ' – 2010-07-08 00:28:55

    +0

    @Nick - 這是答案中的第一句話。 – tvanfosson 2010-07-08 00:39:40

    +0

    哈哈哈,讓我的屏幕滾動到那條線剛剛出來的地方,消除了無知的評論:) – 2010-07-08 00:42:08

    2

    你可以解決它稍微不同的方式?

    如果您有操縱HTML的能力,可以爲所有菜單項添加一個額外的類作爲佔位符(例如,調用類'm')。

    這將使您在搜索: $(「#側邊欄.M)

    +0

    錯過了兩個選擇器之間的空間.. – 2010-07-08 00:25:41

    +0

    感謝Gaby,選擇器固定 – Boycs 2010-07-08 00:56:16

    0

    您可以使用開始,與選擇:

    $("#sidebar *[class^='m']") 
    
    3

    你也可以這樣做:

    $(".m3, .m5", "#sidebar") 
    

    但是......你不限於一個班級,你可以只使用多個班級嗎?使用多個班級只需在它們之間留有空格,例如:

    <div class="m5 myClass">Stuff</div> 
    <div class="m3 myClass">Stuff 2</div> 
    

    然後你可以使用類,像這樣:

    $("#sidebar .myClass") 
    

    或者說你的結構是這樣的:

    <div id="sidebar"> 
        <div class="m5">Stuff</div> 
        <div class="m3">Stuff 2</div> 
    </div> 
    

    您可以只使用child-selector ,像這樣:

    $("#sidebar > div") 
    

    當然也有其他方式對皮膚這隻貓以及,它只是取決於您的標記是什麼。