Пока я должен сделать это:
elem.classList.add("first");
elem.classList.add("second");
elem.classList.add("third");
Хотя это возможно в jQuery, вот так
$(elem).addClass("first second third");
Я хотел бы знать, есть ли какой-либо родной способ добавить или удалить.
javascript
html
Энрике Морено Палатка
источник
источник
Новый оператор распространения облегчает применение нескольких классов CSS в виде массива:
источник
DOMTokenList
вместо массива? Я знаю, что DOMTokenList является объектом, похожим на массив. Таким образом, можно использовать его сclassList.add()
методом, или DOMTokenList должен быть преобразован в реальный массив?Это
classList
свойство гарантирует, что дубликаты классов не будут добавлены в элемент без необходимости. Чтобы сохранить эту функциональность, если вам не нравятся расширенные версии или версия jQuery, я бы предложил добавитьaddMany
функцию иremoveMany
вDOMTokenList
(типclassList
):Затем они могут быть использованы так:
Обновить
Согласно вашим комментариям, если вы хотите написать собственный метод для них, если они не определены, попробуйте следующее:
источник
Так как
add()
метод изclassList
just позволяет передавать отдельные аргументы, а не один массив, вам нужно вызыватьadd()
с помощью apply. Для первого аргумента вам нужно будет передатьclassList
ссылку из того же узла DOM, а в качестве второго аргумента - массив классов, которые вы хотите добавить:источник
Добавить класс к элементу
Удалить класс
источник
className
. Это ужасно для производительности (даже получение его значения вызывает перекомпоновку).Более новые версии спецификации DOMTokenList допускают множественные аргументы для
add()
иremove()
, а также второй аргументtoggle()
для принудительного вызова состояния.На момент написания Chrome поддерживает несколько аргументов
add()
иremove()
, но ни один из других браузеров не поддерживает . IE 10 и ниже, Firefox 23 и ниже, Chrome 23 и ниже и другие браузеры не поддерживают второй аргументtoggle()
.Я написал следующий небольшой polyfill, чтобы прикрыть меня, пока поддержка не расширится:
Ожидается, что это современный браузер с соответствием ES5
DOMTokenList
, но я использую это заполнение в нескольких специально предназначенных средах, поэтому он отлично работает для меня, но может потребоваться настройка сценариев, которые будут работать в устаревших браузерных средах, таких как IE 8 и ниже ,источник
Вы можете сделать как ниже
Добавить
удалять
Ссылка
TLDR;
В прямом случае выше удаление должно работать. Но в случае удаления, вы должны убедиться, что класс существует, прежде чем удалить их
источник
Вот обходной путь для пользователей IE 10 и 11, который казался довольно простым.
Или
источник
Стандартное определение позволяет только добавлять или удалять один класс. Пара небольших функций-оболочек может сделать то, что вы просите:
Эти оболочки позволяют указывать список классов как отдельные аргументы, как строки с пробелами или разделенными запятыми элементами, или их комбинации. Для примера смотрите http://jsfiddle.net/jstoolsmith/eCqy7
источник
Очень простое, не причудливое, но работающее решение, в которое я должен верить, очень кроссбраузерное:
Создать эту функцию
Назовите это так: removeAddClasses (node.classList, arrayToRemove, arrayToAdd);
... где arrayToRemove - это массив имен классов, которые нужно удалить: ['myClass1', 'myClass2'] etcetera
... и arrayToAdd - это массив имен классов для добавления: ['myClass3', 'myClass4'] и так далее
источник
Предположим, что у вас есть массив классов для добавления, вы можете использовать синтаксис ES6:
let classes = ['first', 'second', 'third']; elem.classList.add(...classes);
источник
Мне понравился ответ @ rich.kelly, но я хотел использовать ту же номенклатуру, что и
classList.add()
( разделенные запятыми строки), поэтому небольшое отклонение.Таким образом, вы можете использовать:
Мне нужно протестировать все браузеры, но это работало для Chrome.
Должны ли мы проверять что-то более конкретное, чем существование
DOMTokenList.prototype.addMany
? Что именно вызываетclassList.add()
сбой в IE11?источник
Другой polyfill для
element.classList
это здесь . Я нашел это через MDN .Я включаю этот сценарий и использую
element.classList.add("first","second","third")
его по назначению.источник