Как я могу использовать setAttribute для установки нескольких классов на элемент? - PullRequest
15 голосов
/ 28 июля 2011

Как я могу установить элемент для нескольких классов?

Начальная попытка:

element.setAttribute("class","class1","class2");
element.className="class1 , class2";
element.class="class1 , class2";

Ответы [ 9 ]

33 голосов
/ 28 июля 2011

Просто установите атрибут как обычно. Он просто устанавливает атрибут для любой передаваемой вами строки, он не знает о каких-либо специальных правилах обработки значения.

Атрибут принимает список классов, разделенных пробелами, так:

element.setAttribute("class","class1 class2");

Однако… в более старых версиях (на мой взгляд 7 и ниже) Internet Explorer есть серьезные ошибки в реализации setAttribute, поэтому не используйте их. Вместо этого используйте свойство className.

element.className = "class1 class2";

Также обратите внимание, что это HTML-классы . Они используют за пределами применения стилей. Не существует такого понятия, как класс CSS (хотя есть селекторы классов, другие селекторы, наборы правил и свойства, которые все (неправильно и путанно) назывались «классами» в тот или иной момент).

7 голосов
/ 28 июля 2011

Атрибут className - это список значений, разделенных пробелами.

5 голосов
/ 28 июля 2011

Попробуйте это:

document.getElementById("MyElement").className = "class1 class2";

(обратите внимание на пробел вместо запятой между двумя именами)

Или, если вы хотите добавить к уже существующим классам:

    document.getElementById("MyElement").className += " class1 class2";
2 голосов
/ 28 июля 2011

если вы хотите добавить (не уничтожать текущие классы), я бы сделал

element.className = element.className + " anotherclass yetanotherclass"
2 голосов
/ 28 июля 2011

Не используйте запятые. Просто установите имя класса с пробелами между несколькими классами. Я бы использовал jQuery метод addClass - если вы используете jQuery:).

1 голос
/ 06 сентября 2011

Безопасно использовать element.className += "classname", чтобы новый класс добавлялся в список уже существующих классов.

1 голос
/ 06 сентября 2011

Не будет ли это правильным ответом:

var yourDiv = document.getElementById("divName");
yourDiv.SetAttribute("class","RedClass"); 
yourDiv.SetAttribute("className","RedClass"); 

Никогда не видел, чтобы это делалось с использованием className таким образом (например, yourDiv.className ...).

1 голос
/ 28 июля 2011

Легко, если вы можете подключить его к ID

document.getElementById("a").className = "newClass anotherClass";

http://jsfiddle.net/jasongennaro/qaBQv/1/

1 голос
/ 28 июля 2011
`element.className = "class1" + " class2" + " class3"`;

или даже

element.className = ["class1","class2","class3"].join(" ")

Это с переписать все предыдущие классы.В современных браузерах каждый элемент DOM также имеет коллекцию classList, к которой вы можете получить доступ.Он имеет методы add, remove и toggle.Это хороший пример того, как фреймворки javascript влияют на стандартные API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...