2013-11-27 4 views
0

Я пишу простую функцию jQuery для выбора селектора с html-страницы, а при нажатии клавиши (вверх или вниз) следует добавить к нему класс CSS.jQuery метод не находит селектор

Проблема в том, что он не определяет селектор для добавления класса.

Редактор HTML вложен глубоко в код.

html 
    body 
     div.fixed-header 
      div#main-nav.primary-nav.navbar 
       div.navbar-inner 
        div.primary-nav-right-content 
         ul.nav 
          li#global-search 
           div.search-results 
             ul.search-dropdown 
              ul.search-entry 

Я пытаюсь обнаружить селектор ul.search-entry в моем jquery.

Что я имею прямо сейчас в своем javascript.

var selector = $('ul.search-entry'); 
var selected; 
$(window).keydown(function(e){ 
    if(e.which === 40){ 
     if(selected){ 
      selected.removeClass('selected'); 
      next = selected.next(); 
      if(next.length > 0){ 
       selected = next.addClass('selected'); 
      }else{ 
       selected = selector.eq(0).addClass('selected'); 
      } 
     }else{ 
      selected = selector.eq(0).addClass('selected'); 
     } 
    }else if(e.which === 38){ 
     if(selected){ 
      selected.removeClass('selected'); 
      next = selected.prev(); 
      if(next.length > 0){ 
       selected = next.addClass('selected'); 
      }else{ 
       selected = selector.last().addClass('selected'); 
      } 
     }else{ 
      selected = selector.last().addClass('selected'); 
     } 
    } 
    else{ 
    } 
}); 

Я слишком долго ломаю голову, и я знаю, что у меня что-то действительно малое. Есть предположения?

+0

убедитесь, что код находится в готовом обработчике dom –

+2

'if (selected)', 'selected' никогда не получает значения. Вы хотите 'селектор'? – tymeJV

+0

@tymeJV Когда 'if (selected)' is true, 'selected' уже имеет значение, поэтому ему больше не нужно давать один. – Barmar

ответ

2

Установите selector на строку выбора, а не на коллекцию, которая будет получена, и позвоните по номеру jQuery, чтобы найти ее, когда это необходимо.

var selector = 'ul.search-entry'; 
var selected; 
$(window).keydown(function(e){ 
    if(e.which === 40){ 
     if(selected){ 
      selected.removeClass('selected'); 
      next = selected.next(); 
      if(next.length > 0){ 
       selected = next.addClass('selected'); 
      }else{ 
       selected = $(selector).eq(0).addClass('selected'); 
      } 
     }else{ 
      selected = $(selector).eq(0).addClass('selected'); 
     } 
    }else if(e.which === 38){ 
     if(selected){ 
      selected.removeClass('selected'); 
      next = selected.prev(); 
      if(next.length > 0){ 
       selected = next.addClass('selected'); 
      }else{ 
       selected = $(selector).last().addClass('selected'); 
      } 
     }else{ 
      selected = $(selector).last().addClass('selected'); 
     } 
    } 
    else{ 
    } 
}); 
+0

Да! Так оно и было. Я не могу поверить, что это было так просто: – Abhi

+0

@Abhi: Не забудьте принять ответ. –

+0

Просто сделал это. Спасибо Феликс. – Abhi

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