2010-07-08 3 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

для дальнейших ссылок, почему бы просто не дать общим вещам общее имя класса? –

+0

Хороший момент Брэндон - вернется и изменит это. Благодарю. – tonyf

+0

посмотреть [здесь] (http: // stackoverflow.com/questions/190253/jquery-selector-regular-expressions) – griegs

ответ

5

Если это единственный (или первый) класс, применяемый к элементу меню, вы можете использовать attribute starts with selector.

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

Лучше всего было бы дать им все общий класс, как menu-item, в дополнение к другому классу, который функционирует просто как селектор, чтобы сгруппировать их всех, а затем просто использовать:

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

+1 tho только для того, чтобы прояснить пункт меню, будет выглядеть примерно так: '

' –

+0

@Nick - это первое предложение в ответе. – tvanfosson

+0

Хахаха, мой экран прокручивался там, где эта линия была просто вне поля зрения, удалив этот неосведомленный комментарий :) –

2

Можете ли вы решить это несколько иначе?

Если у вас есть возможность управлять своим HTML, вы можете добавить дополнительный класс ко всем пунктам меню в качестве заполнителя (например, вызвать класс «m»).

Это позволит вам искать по: $ ("# боковой панели .m)

+0

пропустил пробел между двумя селекторами. –

+0

Спасибо, Габи, селектор зафиксирован – Boycs

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") 

Есть конечно других способов кожи этого кота, а также, это зависит только от того, что ваша разметка.

Смежные вопросы