2013-11-27 79 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 

我想在我的jquery中檢測選擇器ul.search-entry。

我現在在我的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

'如果(選擇)','selected'從未給出的值。你想要'選擇器'嗎? – tymeJV

+0

@tymeJV當'if(selected)'爲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

@Ahi:別忘了接受答案。 –

+0

剛剛做到了。謝謝Felix。 – Abhi