2014-10-14 2 views
0

В JQuery Я пытаюсь выполнить следующиеНесколько шаблонов поиска (равно плюс не равно)

  1. Найти все ссылки на странице
  2. Если HREF свойство начинается с «#»
  3. И в ID значение не 'mobileMenu'

Это отлично работает:

$("a[href^='#']").each(function() { // links where HREF starts with # 
    if ($(this).attr('id') != 'mobileMenu') { // id not equal to mobileMenu 
     $(this).click(function() { 
      // logic 
     }) 
    } 
}); 

Но когда я пытаюсь объединить его в более емкое поиске, терпит неудачу (ссылка mobileMenu еще втягивается в массив):

$("a[href^='#'], a[id!='mobileMenu']").each(function() { 

} 

Что я делаю неправильно, пожалуйста?

ответ

2

Вы не должны использовать несколько селектор, потому что вы хотите иметь и состояние

$('a[href^="#"]:not(#mobileMenu)').each(...) 
+0

+1. ': not' более эффективен, чем' .not() 'http://jsperf.com/jquery-css3-not-vs-not – Terry

+0

@Terry, в документе говорится:« Лучше использовать .not() over $ (' x: not (y) ')' –

+0

Селекторы CSS3, как правило, быстрее. [Проверьте эту ссылку] (http://jsperf.com/jquery-css3-not-vs-not), проверьте его в своем браузере. У вас есть ответ. jQuery doc рекомендует '.not()' просто потому, что он [делает код более читаемым] (http://stackoverflow.com/a/8845863/395910) вместо объединения псевдоселекторов вместе. – Terry

1

Попробуйте это: используйте .not(), чтобы исключить элементы из выбранного списка элементов.

$("a[href^='#']").not('#mobileMenu').each(function() { 

}