jQuery选择器问题

时间:2010-07-08 00:15:44

标签: jquery jquery-selectors

我有以下jQuery代码,一切正常:

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

我的问题是,而不是单独指定$(“#sidebar .m3,#sidebar .m5”),我的菜单项可能包含m1,m2,m3,m4,m5等类, 无论如何都有这样的东西:

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

那将满足“.m”之后的任何数字,所以我不需要硬编码m3或m5?

感谢。

4 个答案:

答案 0 :(得分:5)

如果这是应用于菜单项的唯一(或第一个)类,则可以使用attribute starts with selector

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

更好的方法是给它们所有公共类,比如menu-item,除了你的其他类只是作为一个选择器来组合它们,然后简单地使用:

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

答案 1 :(得分: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")

当然还有其他方法来修饰这只猫,它只取决于你的标记。

答案 2 :(得分:2)

你能用稍微不同的方式解决它吗?

如果你能够操纵你的HTML,可以在所有菜单项中添加一个额外的类作为占位符(例如,调用类'm')。

这将允许您搜索:      $(“#sidebar .m)

答案 3 :(得分:0)

您可以使用begin-with选择器:

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