2010-07-08 120 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") 
    

    当然也有其他方式对皮肤这只猫以及,它只是取决于您的标记是什么。