Как изменить класс элемента с помощью JavaScript?

Потому что в:

public void init(ServletConfig config) throws ServletException
{
    ServletContext sc = getServletContext();
}

вы не вызываете super.init(ServletConfig). В результате ServletConfig не сохраняется в экземпляре сервлета, а последующие вызовы getServletConfig возвращают значение null.

2587
задан Kamil Kiełczewski 14 April 2019 в 10:59
поделиться

7 ответов

Современные Методы HTML5 для изменения классов

современные браузеры добавили classList, который предоставляет методы, чтобы облегчить управлять классами, не нуждаясь в библиотеке:

document.getElementById("MyElement").classList.add('MyClass');

document.getElementById("MyElement").classList.remove('MyClass');

if ( document.getElementById("MyElement").classList.contains('MyClass') )

document.getElementById("MyElement").classList.toggle('MyClass');

, К сожалению, они не работают в Internet Explorer до v10, хотя существует контейнер для добавления поддержки его к IE8 и IE9, доступному от [1 119] эта страница . Это, тем не менее, добирается, все больше поддерживало .

Простое решение

перекрестного браузера стандартный JavaScript способ выбрать элемент использует document.getElementById("Id") , который является тем, что используют следующие примеры - можно, конечно, получить элементы другими способами, и правильной ситуацией может просто использовать this вместо этого - однако, вдавание в подробности об этом выходит за рамки ответа.

Для изменения всех классов для элемента:

Для замены всех существующих классов одним или несколькими новыми классами установите атрибут имени класса:

document.getElementById("MyElement").className = "MyClass";

(Можно использовать разделенный пробелами список для применения нескольких классов.)

Для добавления дополнительного класса к элементу:

Для добавления класса к элементу, не удаляя/влияя существующие значения, добавляют пространство и новое имя класса, как так:

document.getElementById("MyElement").className += " MyClass";

Для удаления класса из элемента:

Для удаления единого класса к элементу, не влияя на другие потенциальные классы, простая замена regex требуется:

document.getElementById("MyElement").className =
   document.getElementById("MyElement").className.replace
      ( /(?:^|\s)MyClass(?!\S)/g , '' )
/* Code wrapped for readability - above is all one statement */

объяснение этого regex следующие:

(?:^|\s) # Match the start of the string, or any single whitespace character

MyClass  # The literal text for the classname to remove

(?!\S)   # Negative lookahead to verify the above is the whole classname
         # Ensures there is no non-space character following
         # (i.e. must be end of string or a space)

Эти g флаг говорит замене повторяться как требуется, в случае, если имя класса было добавлено многократно.

, Чтобы проверить, применяется ли класс уже к элементу:

тот же regex, используемый выше для удаления класса, может также использоваться в качестве проверки относительно того, существует ли конкретный класс:

if ( document.getElementById("MyElement").className.match(/(?:^|\s)MyClass(?!\S)/) )


Присвоение этих действий к onclick событиям:

, Пока возможно записать JavaScript непосредственно в атрибутах события HTML (такой как [1 115]) этому не рекомендуют поведения. Особенно на объемных приложениях, больше удобного в сопровождении кода достигается путем разделения разметки HTML от логики взаимодействия JavaScript.

первый шаг к достижению этого путем создания функции и вызывания функции в атрибуте onclick, например:

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }
</script>
...
<button onclick="changeClass()">My Button</button>

(Это не требуется, чтобы иметь этот код в тегах script, это просто для краткости примера, и включая JavaScript в отличном файле может быть более соответствующим.)

второй шаг должен переместить onclick событие из HTML и в JavaScript, например, с помощью [1 122] addEventListener

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }

    window.onload = function(){
        document.getElementById("MyElement").addEventListener( 'click', changeClass);
    }
</script>
...
<button id="MyElement">My Button</button>

(Обратите внимание, что window.onload часть требуется так, чтобы содержание той функции было выполнено после , HTML закончил загружаться - без этого, MyElement не мог бы существовать, когда код JavaScript называют, так, чтобы строка перестала бы работать.)


Платформы JavaScript и Библиотеки

вышеупомянутый код - все в стандартном JavaScript, однако это - общая практика для использования или платформы или библиотеки для упрощения общих задач, а также преимущества от исправленных ошибок и пограничных случаев, о которых Вы не могли бы думать при записи кода.

, Пока некоторые люди считают его излишеством для добавления ~50  платформа КБ для того, чтобы просто изменить класс при выполнении какого-либо значительного количества работы JavaScript, или что-либо, что могло бы иметь необычное поведение перекрестного браузера, это определенно стоит рассмотреть.

(Очень примерно, библиотека является рядом инструментов, разработанных для определенной задачи, пока платформа обычно содержит несколько библиотек и выполняет полный набор обязанностей.)

примеры выше были воспроизведены ниже использования jQuery, вероятно, библиотека JavaScript, которой обычно пользуются (хотя существуют другие, которых стоит исследовать также).

(Отмечают, что $ вот объект jQuery.)

Изменяющиеся Классы с jQuery:

$('#MyElement').addClass('MyClass');

$('#MyElement').removeClass('MyClass');

if ( $('#MyElement').hasClass('MyClass') )

, Кроме того, jQuery обеспечивает ярлык для добавления класса, если это не применяется, или удаление класса, который делает:

$('#MyElement').toggleClass('MyClass');


Присвоение функции к событию щелчка с jQuery:

$('#MyElement').click(changeClass);

или, не нуждаясь в идентификаторе:

$(':button:contains(My Button)').click(changeClass);


3673
ответ дан Poorna Senani Gamage 14 April 2019 в 10:59
поделиться

Никакое преступление, но это неумно для изменения класса на лету, поскольку это вынуждает интерпретатор CSS повторно вычислить визуальное представление всей веб-страницы.

причина состоит в том, что для интерпретатора CSS почти невозможно знать, могли ли какое-либо наследование или расположение каскадом быть изменены, таким образом, короткий ответ:

Никогда имя класса изменения на лету!-)

, Но обычно необходимо будет только изменить свойство или два, и это легко реализовано:

function highlight(elm){
    elm.style.backgroundColor ="#345";
    elm.style.color = "#fff";
}
-58
ответ дан Peter Mortensen 14 April 2019 в 10:59
поделиться

Это является самым легким с библиотекой как jQuery:

<input type="button" onClick="javascript:test_byid();" value="id='second'" />

<script>
function test_byid()
{
    $("#second").toggleClass("highlight");
}
</script>
-20
ответ дан Jon Galloway 14 April 2019 в 10:59
поделиться
  • 1
    Если проблема все еще сохраняется после выполнения выше шагов, просто перезапустите компьютер, и это будет решено. – Mehul Joisar 15 June 2013 в 06:23

Можно использовать node.className как так:

document.getElementById('foo').className = 'bar';

Это должно работать в IE5.5 и согласно PPK.

74
ответ дан Eric Wendelin 14 April 2019 в 10:59
поделиться
  • 1
    Это было решением, которое зафиксировало его! – Daniel Morris 10 March 2014 в 15:56
function classed(el, class_name, add_class) {
  const re = new RegExp("(?:^|\\s)" + class_name + "(?!\\S)", "g");
  if (add_class && !el.className.match(re)) el.className += " " + class_name
  else if (!add_class) el.className = el.className.replace(re, '');
}

использование принятого ответа выше вот является простой функцией перекрестного браузера, чтобы добавить и удалить класс

, добавляет класс:

classed(document.getElementById("denis"), "active", true)

удаляют класс:

classed(document.getElementById("denis"), "active", false)
0
ответ дан donatso 14 September 2019 в 15:59
поделиться
  • 1
    Необходимо было бы программно отключить/скрыть сводку проверки, если Вы хотите использовать это решение тем способом. – Matthew Jones 28 July 2009 в 19:26
<час>

ОПЦИИ.

Вот немного стиля по сравнению с classList примерами, чтобы заставить Вас видеть то, что является опциями, которые Вы имеете в наличии и как использовать classList, чтобы сделать то, что Вы хотите.

style по сравнению с [1 126] classList

различие между style и classList - то, что с style Вы добавляете к свойствам стиля элемента, но classList вид управления классом (классами) элемента (add, remove, toggle, contain), я покажу Вам, как использовать add и remove метод, так как это - популярные.

<час>

Пример Стиля

, Если бы Вы хотите добавить margin-top свойство в элемент, Вы выполнили бы в таком:

// Get the Element
const el = document.querySelector('#element');

// Add CSS property 
el.style.margintop = "0px"
el.style.margintop = "25px" // This would add a 25px to the top of the element.
<час>

classList Пример

Позволил, говорят, что мы имеем <div class="class-a class-b">, в этом случае, у нас уже есть 2 класса, добавленные к нашему элементу отделения, class-a и class-b, и мы хотим управлять что классы remove и что класс к [1 138] add . Это - то, где classList становится удобным.

Удаляют class-b

// Get the Element
const el = document.querySelector('#element');

// Remove class-b style from the element
el.classList.remove("class-b")

, Добавляют class-c

// Get the Element
const el = document.querySelector('#element');

// Add class-b style from the element
el.classList.add("class-c")

<час>
0
ответ дан 22 November 2019 в 19:51
поделиться

Строка

document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace(/\bMyClass\b/','')

должна быть:

document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace('/\bMyClass\b/','');
9
ответ дан 22 November 2019 в 19:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: