2014-10-27 4 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

Просто к сведению, но '$ ($ (это) .get (RND)) addClass.() 'может быть' $ (this) .eq (rnd) .addClass() ' –

+2

Что это значит? Как вы называете 'placeAtoms'? Кроме того, в первом селекторе вы ищете элементы '.play', которые не имеют класса' .hasAtom' ('.play: not (.hasAtom)'). После цикла вы ищете элементы '.hasAtom', которые являются * потомками * элементов' .play' ('.play .hasAtom'). Второй должен быть, скорее, '.play.hasAtom'. –

+0

Не могли бы вы также указать HTML. Кажется, что проблема заключается в селекторе $ (this) – CodeGodie

ответ

0

Проблема заключается в селекторе $ (this). Вам нужно либо объявить его, либо передать в него параметр. Предполагая, что вы хотите, случайный ".play" ребенок внутри "#board" элемент контейнера, я хотел бы попробовать это:

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))'. –

+0

Кроме того, не должно быть '$ (" # board .play: not (.hasAtom) "). Eq (rnd) .addClass ('hasAtom')'? –

+0

Он/она должен будет решить это в зависимости от того, что им нужно для их применения. – CodeGodie

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