Как я могу изменить класс элемента HTML в ответ на onclick
событие, используя JavaScript?
javascript
html
dom
Натан Смит
источник
источник
element.setAttribute(name, value);
Заменитьname
наclass
. Заменитеvalue
тем именем, которое вы дали классу, заключенным в кавычки. Это избавляет от необходимости удалять текущий класс и добавлять другой. Этот пример jsFiddle показывает полный рабочий код.<input type='button' onclick='addNewClass(this)' value='Create' />
и в разделе javascript:function addNewClass(elem){ elem.className="newClass";
} ОнлайнОтветы:
Современные методы HTML5 для изменения классов
Современные браузеры добавили classList, который предоставляет методы, облегчающие манипулирование классами без необходимости в библиотеке:
К сожалению, они не работают в Internet Explorer до v10, хотя есть некоторая поддержка, чтобы добавить поддержку для IE8 и IE9, доступную на этой странице . Это, однако, становится все более и более поддерживаемым .
Простое кросс-браузерное решение
Используется стандартный способ выбора элемента в JavaScript
document.getElementById("Id")
, который используют следующие примеры - вы, конечно, можете получить элементы другими способами, и в правильной ситуации можете просто использоватьthis
вместо этого - однако, вдаваясь в подробности, это выходит за рамки ответа.Чтобы изменить все классы для элемента:
Чтобы заменить все существующие классы одним или несколькими новыми классами, установите атрибут className:
(Вы можете использовать разделенный пробелами список для применения нескольких классов.)
Чтобы добавить дополнительный класс к элементу:
Чтобы добавить класс к элементу, не удаляя / не затрагивая существующие значения, добавьте пробел и новое имя класса, например, так:
Чтобы удалить класс из элемента:
Чтобы удалить отдельный класс для элемента, не затрагивая другие потенциальные классы, требуется простая замена регулярного выражения:
Объяснение этого регулярного выражения следующее:
g
Флаг указует заменить на повторение по мере необходимости, в случае , если имя класса было добавлено несколько раз.Чтобы проверить, применяется ли класс к элементу:
Тот же самый regex, использованный выше для удаления класса, может также использоваться как проверка того, существует ли определенный класс:
Назначение этих действий событиям onclick:
Хотя возможно написать JavaScript непосредственно внутри атрибутов события HTML (например,
onclick="this.className+=' MyClass'"
), это не рекомендуемое поведение. Особенно в больших приложениях, более поддерживаемый код достигается путем отделения разметки HTML от логики взаимодействия JavaScript.Первый шаг к достижению этого - создание функции и вызов функции в атрибуте onclick, например:
(Не обязательно иметь этот код в тегах скрипта, это просто для краткости примера, и более подходящим может быть включение JavaScript в отдельный файл.)
Второй шаг - переместить событие onclick из HTML в JavaScript, например, используя addEventListener.
(Обратите внимание, что часть window.onload необходима для того, чтобы содержимое этой функции выполнялось после завершения загрузки HTML - без этого MyElement может не существовать при вызове кода JavaScript, так что строка не будет работать.)
Фреймворки и библиотеки JavaScript
Приведенный выше код написан на стандартном JavaScript, однако обычной практикой является использование инфраструктуры или библиотеки для упрощения общих задач, а также для исправления ошибок и крайних случаев, о которых вы могли не подумать при написании кода.
Хотя некоторые люди считают излишним добавлять среду ~ 50 КБ для простого изменения класса, если вы выполняете какой-либо значительный объем работы с JavaScript или что-то, что может иметь необычное поведение в разных браузерах, это стоит рассмотреть.
(Грубо говоря, библиотека - это набор инструментов, предназначенных для конкретной задачи, в то время как среда обычно содержит несколько библиотек и выполняет полный набор обязанностей.)
Приведенные выше примеры были воспроизведены ниже с использованием jQuery , вероятно, наиболее часто используемой библиотеки JavaScript (хотя есть и другие, заслуживающие изучения).
(Обратите внимание, что
$
здесь находится объект jQuery.)Изменение классов с помощью jQuery:
Кроме того, jQuery предоставляет ярлык для добавления класса, если он не применяется, или удаления класса, который делает:
Назначение функции событию click с помощью jQuery:
или без идентификатора:
источник
class="button MyClass MyClass MyClass"
Вы также можете просто сделать:
И переключить класс (удалить, если существует, добавить его):
источник
classList
.classList
.В одном из моих старых проектов, в которых не использовался jQuery, я построил следующие функции для добавления, удаления и проверки наличия элемента:
Так, например, если я хочу
onclick
добавить некоторый класс к кнопке, я могу использовать это:Теперь наверняка было бы лучше использовать jQuery.
источник
Вы можете использовать
node.className
так:Это должно работать в IE5.5 и выше в соответствии с PPK .
источник
Ух ты, удивляешься, что здесь так много ответов ...
источник
Используя чистый код JavaScript:
источник
Это работает для меня:
источник
el.setAttribute('class', newClass)
или лучшеel.className = newClass
. Но нетel.setAttribute('className', newClass)
.Также вы можете расширить объект HTMLElement, чтобы добавить методы для добавления, удаления, переключения и проверки классов ( gist ):
А затем просто используйте вот так (по клику добавит или удалит класс):
Вот демо .
источник
Просто для добавления информации из другой популярной среды, Google Closures, посмотрите их класс dom / classes :
Одним из вариантов выбора элемента является использование goog.dom.query с селектором CSS3:
источник
Пара небольших заметок и изменений в предыдущих регулярных выражениях:
Вы захотите сделать это глобально, если список классов имеет имя класса более одного раза. И вы, вероятно, захотите убрать пробелы из концов списка классов и преобразовать несколько пробелов в один пробел, чтобы избежать получения пробелов. Ничто из этого не должно быть проблемой, если единственный код, помеченный именами классов, использует приведенное ниже регулярное выражение и удаляет имя перед его добавлением. Но. Ну, кто знает, кто может пить из списка имен классов.
Это регулярное выражение не учитывает регистр, поэтому ошибки в именах классов могут отображаться до того, как код будет использован в браузере, который не заботится о регистре в именах классов.
источник
Измените класс CSS элемента с помощью JavaScript в ASP.NET :
источник
Я бы использовал jQuery и написал бы что-то вроде этого:
Этот код добавляет функцию, которая вызывается при нажатии элемента id some-element . Функция добавляет клик к атрибуту class элемента, если он еще не является его частью, и удаляет его, если он там есть.
Да, вам нужно добавить ссылку на библиотеку jQuery на своей странице, чтобы использовать этот код, но, по крайней мере, вы можете быть уверены, что большинство функций в библиотеке будут работать практически во всех современных браузерах, и это сэкономит ваше время на реализацию свой собственный код, чтобы сделать то же самое.
Спасибо
источник
jQuery
в длинном виде только один раз.jQuery(function($) { });
делает$
доступным внутри функции во всех случаях.Линия
должно быть:
источник
Изменить класс элемента в обычном JavaScript с поддержкой IE6
Вы можете попытаться использовать
attributes
свойство узла, чтобы сохранить совместимость со старыми браузерами, даже IE6:источник
Вот моя версия, полностью рабочая:
Применение:
источник
foobar
если вы попытаетесь удалить классfoo
. JS в атрибутах встроенного обработчика событий был нарушен перед редактированием. 4-летний принятый ответ намного лучше.foobar
проблема. Смотрите тест здесьВот toggleClass для переключения / добавления / удаления класса элемента:
см jsfiddle
Также смотрите мой ответ здесь для создания нового класса динамически
источник
Я использую следующие ванильные функции JavaScript в моем коде. Они используют регулярные выражения и
indexOf
не требуют кавычек специальных символов в регулярных выражениях.Вы также можете использовать element.classList в современных браузерах.
источник
ВАРИАНТЫ.
Вот несколько примеров стилей и классов, чтобы вы могли увидеть, какие опции у вас есть и как использовать
classList
то, что вы хотите.style
противclassList
Разница между
style
иclassList
в том , что сstyle
вы добавляете в свойствах стиля элемента, ноclassList
это своего рода контроль класс (ы) элемента (add
,remove
,toggle
,contain
), я покажу вам , как использоватьadd
иremove
метод , так как те популярные.Пример стиля
Если вы хотите добавить
margin-top
свойство в элемент, вы должны сделать это:Пример classList
Допустим, у нас есть
<div class="class-a class-b">
, в этом случае мы уже добавили 2 класса к нашему элементу div,class-a
иclass-b
, и мы хотим контролировать , какие классыremove
и что класс кadd
. Это гдеclassList
становится удобно.Удалить
class-b
Добавить
class-c
источник
Просто думал, что я добавлю это:
источник
просто скажите,
myElement.classList="new-class"
если вам не нужно поддерживать другие существующие классы, в этом случае вы можете использоватьclassList.add, .remove
методы.источник
Хорошо, я думаю, что в этом случае вы должны использовать jQuery или написать свои собственные методы на чистом javascript, я предпочитаю добавлять свои собственные методы, а не вставлять все jQuery в мое приложение, если мне это не нужно по другим причинам.
Я хотел бы сделать что-то похожее на приведенное ниже в качестве методов в моей структуре JavaScript, чтобы добавить несколько функций, которые обрабатывают добавление классов, удаление классов и т. Д., Аналогично jQuery, это полностью поддерживается в IE9 +, также мой код написан на ES6, поэтому вам нужно чтобы убедиться, что ваш браузер поддерживает его или вы используете что-то вроде babel, в противном случае необходимо использовать синтаксис ES5 в вашем коде, также таким образом мы находим элемент по идентификатору, что означает, что элемент должен иметь идентификатор для выбора:
и вы можете просто вызвать использование их, как показано ниже, представьте, что ваш элемент имеет идентификатор «id» и класс «class», убедитесь, что вы передаете их в виде строки, вы можете использовать утилиту, как показано ниже:
источник
classList
DOM API:Очень удобным способом добавления и удаления классов является
classList
DOM API. Этот API позволяет нам выбирать все классы определенного элемента DOM, чтобы изменить список с помощью JavaScript. Например:В журнале мы можем наблюдать, что мы получаем объект не только с классами элемента, но также со многими вспомогательными методами и свойствами. Этот объект наследуется от интерфейса DOMTokenList , интерфейса, который используется в DOM для представления набора разделенных пробелами токенов (например, классов).
Пример:
источник
Да, есть много способов сделать это. В синтаксисе ES6 мы можем легко достичь. Используйте этот код для переключения добавления и удаления класса.
источник
с помощью принятого ответа выше здесь простая кросс-браузерная функция для добавления и удаления класса
добавить класс:
удалить класс:
источник
Много ответов, много хороших ответов.
ИЛИ
Вот и все.
И, если вы действительно хотите знать причину и обучать себя, тогда я предлагаю прочитать ответ Питера Боутона , он идеален.
Примечание:
это возможно с ( документ или событие ):
getElementById()
getElementsByClassName()
querySelector()
querySelectorAll()
источник
В javascript есть свойство className для изменения имени класса HTML-элемента. Существующее значение класса будет заменено новым значением, назначенным в className.
Кредит - https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html
источник
Вопрос ОП был: Как я могу изменить класс элемента с помощью JavaScript?
Современные браузеры позволяют вам делать это с одной строкой javascript :
document.getElementById('id').classList.replace('span1','span2')
classList
Атрибут обеспечивает DOMTokenList , который имеет различные методы . Вы можете работать с classList элемента, используя простые манипуляции, такие как add () , remove () или replace () . Или получить очень сложные и манипулировать классами, как вы бы объект или карту с ключами () , значения () , записи ()Ответ Питера Боутона - отличный, но ему уже более десяти лет. Все современные браузеры теперь поддерживают DOMTokenList - см. Https://caniuse.com/#search=classList. и даже IE11 поддерживает некоторые методы DOMTokenList
источник
пытаться
Показать фрагмент кода
источник
Рабочий код JavaScript:
Вы можете скачать рабочий код по этой ссылке .
источник
Вот простой код JQuery для этого.
Вот,
Удачи.
источник