Метод jQuery не находит селектор

0

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

Проблема заключается в том, что он не обнаруживает, что селектор добавляет класс.

Селектор 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 никогда не получает значение. Вы хотите selector ?
Показать ещё 10 комментариев

1 ответ

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
    Да! Это сделал это. Я не могу поверить, что это было так просто
  • 0
    @Abhi: не забудьте принять ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню