У меня есть элемент, который уже имеет класс:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
Теперь я хочу создать функцию JavaScript, которая будет добавлять класс в div
(не заменять, а добавлять).
Как я могу это сделать?
javascript
css
dom-manipulation
Бланкмэн
источник
источник
element.classList.add("my-class")
вместо этого.Ответы:
Если вы ориентируетесь только на современные браузеры:
Используйте element.classList.add, чтобы добавить класс:
И element.classList.remove, чтобы удалить класс:
Если вам нужна поддержка Internet Explorer 9 или ниже:
Добавьте пробел плюс имя вашего нового класса к
className
свойству элемента. Сначала поместитеid
элемент, чтобы вы могли легко получить ссылку.затем
Обратите внимание на пространство раньше
otherclass
. Важно включить пробел, иначе он скомпрометирует существующие классы, стоящие перед ним в списке классов.Смотрите также element.className на MDN .
источник
Самый простой способ сделать это без какой-либо инфраструктуры - использовать метод element.classList.add .
Редактировать: И если вы хотите удалить класс из элемента -
Я предпочитаю не добавлять пустое пространство и обрабатывать дубликаты записей самостоятельно (что требуется при использовании
document.className
подхода). Существуют некоторые ограничения браузера , но вы можете обойти их, используя полифилы .источник
найдите целевой элемент "d", как хотите, а затем:
Вы можете обернуть это более умными способами, чтобы проверить предсуществование и проверить требования к пространству и т. д.
источник
split
имя класса в пробеле, удалите тот, который вам не нужен, из результирующего массива, затемjoin
снова в массив ... или используйтеelement.classList.remove
.Добавить класс
Кросс-совместимость
В следующем примере мы добавим
classname
к<body>
элементу. Это совместимо с IE-8.Это сокращение для следующего ..
Представление
Если вас больше беспокоит производительность по сравнению с перекрестной совместимостью, вы можете сократить ее до следующего, что на 4% быстрее.
удобство
В качестве альтернативы вы могли бы использовать jQuery, но результирующая производительность значительно ниже. На 94% медленнее по данным jsPerf
Удаление класса
Представление
Выборочное использование jQuery - лучший метод удаления класса, если вы обеспокоены производительностью
Без jQuery это на 32% медленнее
Ссылки
Использование прототипа
Использование YUI
источник
a.classList ? ...
) иметь разницу в скорости по сравнению с обычной (if (a.classList) { ....
)?classList.remove()
. Почему ты не использовал это? это намного быстрее, чем jQuery jsperf.com/remove-class-vanilla-vs-jqueryclassList
для всего, кроме удаления классов, поэтому я и спрашиваю.Другой подход для добавления класса к элементу с использованием чистого JavaScript
Для добавления класса:
Для удаления класса:
источник
Когда работа, которую я выполняю, не требует использования библиотеки, я использую эти две функции:
источник
if( cn.indexOf( classname ) != -1 ) { return; }
Помните, что если вы добавите класс «btn» с классом «btn-info», который уже находится здесь, это не удастся.element.className.split(" ");
чтобы предотвратить проблему @AlexandreDieulot, о которой сообщалось здесь.Предполагая, что вы делаете больше, чем просто добавление этого одного класса (например, у вас есть асинхронные запросы и так далее), я бы порекомендовал библиотеку, такую как Prototype или jQuery. .
Это сделает все, что вам нужно сделать (включая это), очень простым.
Допустим, на вашей странице теперь есть jQuery, вы можете использовать такой код, чтобы добавить имя класса к элементу (в данном случае при загрузке):
Проверьте браузер jQuery API для других вещей.
источник
Вы можете использовать метод classList.add ИЛИ classList.remove, чтобы добавить / удалить класс из элемента.
Приведенный выше код добавит (и НЕ заменит) класс «anyclass» в nameElem. Точно так же вы можете использовать метод classList.remove () для удаления класса.
источник
Чтобы добавить дополнительный класс к элементу:
Чтобы добавить класс к элементу, не удаляя / не затрагивая существующие значения, добавьте пробел и новое имя класса, например, так:
Чтобы изменить все классы для элемента:
Чтобы заменить все существующие классы одним или несколькими новыми классами, установите атрибут className:
(Вы можете использовать разделенный пробелами список для применения нескольких классов.)
источник
Если вы не хотите использовать jQuery и хотите поддерживать старые браузеры:
источник
Я знаю, что IE9 официально закрыт, и мы можем добиться этого,
element.classList
как было сказано выше, но я просто попытался узнать, как он работает безclassList
с помощью многих приведенных выше ответов, и я смог это узнать.Код ниже расширяет многие ответы выше и улучшает их, избегая добавления дублирующих классов.
источник
Я тоже думаю, что самый быстрый способ - это использовать Element.prototype.classList, как в es5:
document.querySelector(".my.super-class").classList.add('new-class')
но в ie8 нет такой вещи, как Element.prototype.classList, в любом случае вы можете заполнить его этим фрагментом (свободно редактировать и улучшать его ):источник
Просто чтобы пояснить, что говорили другие, несколько классов CSS объединяются в одну строку, разделенную пробелами. Таким образом, если бы вы хотели жестко закодировать его, он бы просто выглядел так:
Оттуда вы можете легко получить javascript, необходимый для добавления нового класса ... просто добавьте пробел, за которым следует новый класс, к свойству className элемента. Зная это, вы также можете написать функцию для удаления класса позже, если возникнет такая необходимость.
источник
Чтобы добавить, удалить или проверить классы элементов простым способом:
источник
Вы можете использовать современный подход, похожий на jQuery
Если вам нужно изменить только один элемент, первый, который JS найдет в DOM, вы можете использовать это:
Не забывайте оставлять один пробел перед именем класса.
Если у вас есть несколько классов, где вы хотите добавить новый класс, вы можете использовать его следующим образом
источник
Я думаю, что лучше использовать чистый JavaScript, который мы можем запустить на DOM браузера.
Вот функциональный способ его использования. Я использовал ES6, но не стесняйтесь использовать ES5 и выражение функции или определение функции, в зависимости от того, что подходит вашему стилю JavaScript StyleGuide.
источник
Образец с чистым JS. В первом примере мы получаем идентификатор нашего элемента и добавляем, например, 2 класса.
Во втором примере мы получаем имя класса элемента и добавляем еще 1.
источник
Для тех, кто использует Lodash и хочет обновить
className
строку:источник
во-первых, дайте div идентификатор. Затем вызовите функцию appendClass:
источник
indexOf
является наивным решением и уже указал на проблему .Вы можете использовать API querySelector, чтобы выбрать свой элемент, а затем создать функцию с элементом и новым именем класса в качестве параметров. Использование списка классов для современных браузеров, иначе для IE8. Затем вы можете вызвать функцию после события.
источник
самый короткий
Показать фрагмент кода
источник
ИЛИ:
Первый подход помог в добавлении класса, когда второй подход не сработал.
Не забудьте оставить место перед
' someclassname'
первым подходом.Для удаления вы можете использовать:
источник
Этот код JS работает для меня
обеспечивает замену имени класса
Добавить просто использовать
Удалить использование
Надеюсь, что это полезно для кого-то
источник
В YUI, если вы включаете yuidom , вы можете использовать
YAHOO.util.Dom.addClass('div1','className');
НТН
источник