В объекте есть свойство className
, которое содержит список «классов» – слов, разделенных пробелом.Создайте функцию addClass(obj, cls)
, которая добавляет в список класс cls
, но только если его там еще нет.
Разбиваю список в объекте методом split
по (' '),а он отказывается этот пробел находить..
Актуальна ли проверка на наличие класса в списке через метод indexOf?Или надо проводить сравнение arr[i]==cls
?
function addClass(obj, cls) {
var arr = obj.className.split(' ');
for (var i = 0; i < arr.length; i++) {
if (!!(~arr.indexOf(cls))) {
return;
}
}
arr.push(cls);
obj.className = arr.join(' ');
}
var obj = {
className: 'open menu'
}
addClass(obj, 'new');
addClass(obj, 'open');
addClass(obj, 'me');
console.log(obj.className);
Ошибка в использовании метода indexOf
этот метод возвращает индекс найденного элемента, либо -1, если элемент не найден. Поэтому проверка !!(arr.indexOf(cls))
работает не так как ты ожидаешь.
этот метод уже проходит по массиву - нет нужды делать отдельный цикл.
Исходя из этого код можно исправить так:
function addClass(obj, cls) {
var arr = obj.className.split(' ');
if (arr.indexOf(cls) == -1) {
arr.push(cls);
obj.className = arr.join(' ');
}
}
var obj = {
className: 'open menu'
}
addClass(obj, 'new');
addClass(obj, 'open');
addClass(obj, 'me');
console.log(obj.className);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вот таким регулярным выражением удаляю все символы кроме цифр в строке
Пронормировать квадратную матрицу A [5] [5], разделив все элементы каждой строки на максимальный по модулю элемент матрицы
Выполняю простое решение задач, но попался на распространненую ошибку и не могу понять почему такПрошу объяснить