2014-10-27 103 views
0

我有一個HTML表格,代表棋盤遊戲應用中的棋盤。它具有任意數量的行和列,'td'元素代表遊戲方塊。jquery addClass語法不正確?

我正試圖在隨機位置填充一些'class = play'板塊,並且有少量'class = hasAtoms'。 Console.log命令顯示初始選擇器返回合理數量的對象,'rnd'是一個有效的隨機數,但最終的console.log未能檢測到任何'class = hasAtom'對象 - 有什麼建議嗎?

function placeAtoms(numberOfAtoms) { 
    var rnd, len; 
    do { 
     len = $('#board .play:not(.hasAtom)').length; 
     rnd = Math.floor((Math.random() * len) + 1); 
     $($(this).get(rnd)).addClass('hasAtom'); 
     numberOfAtoms--; 
    } while (numberOfAtoms > 0); 
    console.log($('#board .play .hasAtom').length + ' squares have atoms'); 
} 
+1

剛一說明,但'$($(本)獲得(RND))addClass。 ()'可以是'$(this).eq(rnd).addClass()' – 2014-10-27 17:15:32

+2

'this'指的是什麼?你怎麼叫'placeAtoms'?另外,在第一個選擇器中,您正在尋找沒有class .hasAtom('.play:not(.hasAtom)')的'.play'元素。循環結束後,您需要查找'.AsaAtom'元素,它們是'.play'元素('.play .hasAtom')的*後代*。第二個可能應該是'.play.hasAtom'。 – 2014-10-27 17:16:07

+0

你能否提供HTML?看來問題在於$(this)選擇器 – CodeGodie 2014-10-27 17:17:01

回答

0

問題出在$(this)選擇器上。您需要聲明它或傳入參數。假設你想要的 「#board」 元素容器內的隨機 「.play」 孩子,我會試試這個:

function placeAtoms(numberOfAtoms) { 
     var rnd, len; 
     do { 
      len = $('#board .play:not(.hasAtom)').length; 
      rnd = Math.floor((Math.random() * len) + 1); 
      $($("#board .play").eq(rnd)).addClass('hasAtom'); 
      numberOfAtoms--; 
     } while (numberOfAtoms > 0); 
     console.log($('#board .hasAtom').length + ' squares have atoms'); 
    } 
+0

我建議'$(「#board .play」)。eq(rnd).addClass( 'hasAtom')'。這比$($(「#board .play」)。get(rnd))'乾淨。 – 2014-10-27 17:45:46

+0

另外,不應該是'$(「#board .play:not(.hasAtom)」)。eq(rnd).addClass('hasAtom')'? – 2014-10-27 17:46:45

+0

他/她必須根據他們的應用需求來決定。 – CodeGodie 2014-10-27 17:52:18