#javascript #jquery #css
#javascript #jquery #css
Вопрос:
Мне нужно установить класс для элемента на моей странице. С помощью обычного JavaScript я бы написал что-то вроде:
document.getElementById('foo').className = "my_class";
Это просто устанавливает класс, который является именно тем, что я хочу. Но я использую jQuery на своей странице и поэтому хотел бы сделать это «способом jQuery», поскольку кажется странным смешивать старый стиль и стиль jQuery. Но jQuery, по-видимому, позволяет использовать только addClass () или removeClass (), вот так:
$('#foo').addClass("my_class");
Проблема в том, что он просто добавляет класс к элементу, он не заменяет существующий в данный момент класс. Означает ли это, что я должен отслеживать старый класс и сначала выполнять removeClass()? Нет ли способа указать jQuery заменить текущий класс, независимо от того, что это такое, и просто заменить его новым?
Ответ №1:
Чтобы удалить все классы из элемента:
$('#foo').removeClass();
Не указывая аргументов для removeClass, удаляются все классы. Итак, ваше решение было бы:
$('#foo').removeClass().addClass('my_class');
Комментарии:
1. Если вы действительно хотите использовать функции «класса», то объедините свои операции в цепочку, нет необходимости повторно назначать новый
$('#foo')
объект:$('#foo').removeClass().addClass('my_class');
-1 за не оптимизированный и не отвечающий на вопрос на самом деле (это решение уже объяснено в вопросе)2. На самом деле, я думал, что он ответил на мой вопрос довольно хорошо: функция removeClass () была ключом, о котором я не знал. Итак, я подумал, что это хороший ответ.
3. Да, извините, я думал, вы уже знали, что
removeClass()
удалит любой существующий класс, поскольку вы буквально вводили его таким образом в своем вопросеВ любом случае, часть оптимизации важна, вы должны использовать методы, объединяющие в цепочку, когда это возможно.
4. Да, иначе вы выполняете два поиска в DOM.
Ответ №2:
Установите class
атрибут напрямую с помощью .attr()
:
$('#foo').attr('class', 'my_class');
Ответ №3:
Вы могли бы использовать .attr()
функцию следующим образом:
$('#foo').attr('class', 'my_class');
Ответ №4:
Вы могли бы использовать это:
$('#foo').attr('class', 'my_class');
Он заменит любой класс на «my_class»
Ответ №5:
$('#foo').removeClass().addClass('my_class');
Ответ №6:
Ах, нашел ответ всего через несколько секунд после того, как опубликовал вопрос. Видимо, моих навыков в Google было недостаточно …
В любом случае, ответ находится в функции removeClass(). Итак, вы можете сделать:
$('#foo').removeClass().addClass("my_class");
Проще и быть не может.
Комментарии:
1. Вау, вы, ребята, быстрые: пока я набирал свой собственный ответ, несколько из вас уже ответили! Спасибо!
2. Как использовать,
attr()
не проще? Это всего лишь один вызов метода в отличие от двух отдельных вызовов.3. attr () проще и, вероятно, быстрее, но у меня нет под рукой тестов.
Ответ №7:
вы можете попробовать использовать .toggleClass()
Комментарии:
1. Нет, если вы не знаете название текущего класса, это не поможет.