Дополнительно
Как добавить класс к данному элементу?
У меня есть элемент, который уже имеет класс:
< div class = "someclass" >
& Лт; img ... id = "image1" name = "image1" / >
& Лт; / div >
Теперь я хочу создать функцию JavaScript, которая добавит класс в div
(не заменяет, а добавляет).
Как я могу это сделать?
1101
22
Добавьте пробел плюс имя вашего нового класса в свойство
className
элемента. Сначала поместитеid
на элемент, чтобы вы могли легко получить ссылку.Затем
Обратите внимание на пробел перед
otherclass
. Важно включить пространство, иначе оно скомпрометирует существующие классы, которые предшествуют ему, в список классов.См. Также element.className на MDN.
Самый простой способ сделать это без какой-либо структуры - использовать метод element.classList.add.
Редактировать: И если вы хотите удалить класс из элемента -
Я предпочитаю не добавлять пустое пространство и дублировать обработку записи самостоятельно (что требуется при использовании подхода
document.className
). Есть некоторые ограничения браузера, но вы можете обойти их, используя многозаливки.найдите свой целевой элемент "d", как вы хотите, а затем:
Вы можете обернуть это более четкими способами, чтобы проверить предсуществование, проверить наличие мест и т. д..
Добавить класс
В следующем примере мы добавляем
classname
к элементу< body >
. Это совместимо с IE-8.Это сокращение для следующего..
Если вы больше озабочены производительностью, превышающей перекрестную совместимость, вы можете сократить ее до следующего, что на 4% быстрее.
В качестве альтернативы вы можете использовать jQuery, но результирующая производительность значительно медленнее. На 94% медленнее по jsPerf
Удаление класса
Выборочное использование jQuery - лучший метод для удаления класса, если вы заинтересованы в производительности
Без jQuery это на 32% медленнее
Рекомендации
Использование прототипа
Использование YUI
Еще один подход, чтобы добавить класс к элементу, используя чистый JavaScript
Для добавления класса:
Для удаления класса:
Когда работа, которую я делаю, не гарантирует использование библиотеки, я использую эти две функции:
Предполагая, что вы делаете больше, чем просто добавляете этот один класс (например, у вас есть асинхронные запросы и так далее), я бы порекомендовал библиотеку, такую как Прототип или jQuery ,.
Это сделает почти все, что вам нужно сделать (включая это), очень простым.
Итак, допустим, у вас есть jQuery на вашей странице сейчас, вы можете использовать такой код, чтобы добавить имя класса к элементу (в данном случае при загрузке):
Проверьте браузер jQuery API для других вещей.
Вы можете использовать метод classList.add OR classList.remove, чтобы добавить / удалить класс из элемента.
Приведенный выше код добавит (и НЕ заменит) класс «anyclass» для nameElem. Точно так же вы можете использовать метод classList.remove () для удаления класса.
Чтобы добавить дополнительный класс к элементу:
Чтобы добавить класс к элементу, не удаляя / не влияя на существующие значения, добавьте пробел и новое имя класса, например:
Чтобы изменить все классы для элемента:
Чтобы заменить все существующие классы одним или несколькими новыми классами, установите атрибут className:
(Вы можете использовать разделенный пробелами список для применения нескольких классов.)
Если вы не хотите использовать jQuery и хотите поддерживать старые браузеры:
Я знаю, что IE9 официально отключен, и мы можем достичь этого с помощью
element.classList
, как многие говорили выше, но я просто попытался узнать, как это работает безclassList
с помощью многих ответов выше, которые я мог бы выучить.Ниже код расширяет многие ответы выше и улучшает их, избегая добавления дублирующих классов.
Просто чтобы уточнить, что говорили другие, несколько классов CSS объединяются в одну строку, разделенную пробелами. Таким образом, если бы вы хотели жестко кодировать это, это бы просто выглядело так:
Оттуда вы можете легко получить JavaScript, необходимый для добавления нового класса... просто добавьте пробел, за которым следует новый класс, в свойство className элемента. Зная это, вы также можете написать функцию для удаления класса позже, если возникнет такая необходимость.
Чтобы добавить, удалить или проверить классы элементов простым способом:
Вы можете использовать современный подход, похожий на jQuery
Если вам нужно изменить только один элемент, первый, который JS найдет в DOM, вы можете использовать это:
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- конец фрагмента - >
Имейте в виду оставить одно место перед именем класса.
Если у вас есть несколько классов, в которые вы хотите добавить новый класс, вы можете использовать его следующим образом
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- конец фрагмента - >
Я тоже думаю, что самый быстрый способ - использовать Element.prototype.classList, как в es5:
document.querySelector (".my.super-class") .classList.add ('новый класс')
но в ie8 нет такой вещи, как Element.prototype.classList, в любом случае вы можете заполнить его этим фрагментом (вы можете редактировать и улучшать его):& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- конец фрагмента - >
Я думаю, что лучше использовать чистый JavaScript, который мы можем запустить на DOM браузера.
Вот функциональный способ его использования. Я использовал ES6, но не стесняйтесь использовать ES5 и выражение функции или определение функции, в зависимости от того, что подходит для вашего JavaScript StyleGuide.
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- конец фрагмента - >
Образец с чистым JS. В первом примере мы получаем идентификатор нашего элемента и добавляем, например,. 2 класса.
Во втором примере мы получаем имя класса элемента и добавляем еще 1.
Для тех, кто использует Lodash и хочет обновить строку
className
:сначала дайте div идентификатор. Затем вызовите функцию appendClass:
Вы можете использовать API querySelector, чтобы выбрать свой элемент, а затем создать функцию с элементом и новым именем класса в качестве параметров. Использование classlist для современных браузеров, иначе для IE8. Затем вы можете вызвать функцию после события.