2015-09-21 4 views
0

Я использую .map для получения массива идентификаторов элементов (это называется «идентификаторы»), которые имеют класс «по умолчанию». После удаления этого класса в mouseenter я хочу вернуть этот класс к этим конкретным идентификаторам (в основном, оставьте его, как я его нашел).Добавить класс в массив ID в Javascript

две вещь вызывает у меня неприятности прямо сейчас:

  1. Когда я динамически добавлять данные идентификаторов к элементам TD, а затем использовать эти данные идентификаторы, чтобы создать массив «ид» моего MouseEnter останавливается добавляя «HIGHLIGHT» класс (не знаю, почему это происходит)
  2. на MouseLeave я не могу петлю через «ид» и вернуть «по умолчанию-блик» класса к элементам они были первоначально на

I Я должен использовать что-то вроде этого, но, очевидно, это не так king:

$.each(ids, function() { 
    $(this).addClass('default-highlight'); 
}); 

Я пробовал несколько вещей, но держусь коротким. Я привязываю ссылку на codepen.io where I use data-ids, которые динамически добавляются в таблицу (это не работает), и codepen one, где я использую регулярные идентификаторы для выделения по умолчанию, и все работает так, как будто это должно быть (Это не так, поскольку я хочу использовать динамически сгенерированные идентификаторы данных, а затем созданный впоследствии массив для повторного применения этих классов).

Оба эти кодекса имеют gif наверху, показывающие, как взаимодействие должно работать.

Если что-то неясно, сообщите мне. Спасибо за прочтение!

+0

'Uncaught TypeEr ror: ids.get не является функцией'. Заменить '$ ('# output'). Text (ids.get(). Join (','));' с '$ ('# output'). Text (ids.join (','));' [codepen] (HTTP: // codepen.io/anon/pen/EVyopd) –

+0

Thanks @ ᴀʀᴛᴜʀғɪʟɪᴘɪᴀᴋ for pointing out out - зафиксировал его –

ответ

1

Похоже хранения идентификаторов и с помощью них является излишеством, когда вы можете сохранить ссылку на элемент JQuery непосредственно:

$highlightCells = $('.default-highlight').removeClass('default-highlight') 

А потом дать класс обратно:

$highlightCells.addClass('default-highlight') 

Вот codepen вилка: http://codepen.io/anon/pen/ZbOvZR?editors=101

4

Вам нужно добавить # перед тем селекторе

$.each(ids, function() { 
    $('#'+this).addClass('default-highlight'); 
}); 

или вы можете использовать общий селектор в помощи map() и join()

$(ids.map(function(i, v) { 
    return '#' + v; 
}).join()).addClass('default-highlight'); 

или вы можете добавить # при получении идентификаторов, а затем вам просто необходимо присоединиться к ним

var ids = $('.default-highlight').map(function(i) { 
    return '#'+$(this).data('id'); 
}).get(); 
... 
... 
... 
$(ids.join()).addClass('default-highlight'); 
+0

Сказал (-ам) –

+0

@NealJones: рад помочь –

0

Используйте этот способ:

$.each(ids, function() { 
    $("#" + this).addClass('default-highlight'); 
}); 
+0

'this' в строчном массиве не то, что вы хотите, чтобы это было – charlietfl

+0

Это будет то же самое, что отображение всех элементов массива с помощью '#' и добавление права класса? –

+0

не уверен, почему ... но '$ .each' не присваивает элементу массива' this', когда это строка, только объект – charlietfl

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