Потому что в:
public void init(ServletConfig config) throws ServletException
{
ServletContext sc = getServletContext();
}
вы не вызываете super.init(ServletConfig)
. В результате ServletConfig не сохраняется в экземпляре сервлета, а последующие вызовы getServletConfig возвращают значение null.
современные браузеры добавили 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)/) )
, Пока возможно записать 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, однако это - общая практика для использования или платформы или библиотеки для упрощения общих задач, а также преимущества от исправленных ошибок и пограничных случаев, о которых Вы не могли бы думать при записи кода.
, Пока некоторые люди считают его излишеством для добавления ~50 платформа КБ для того, чтобы просто изменить класс при выполнении какого-либо значительного количества работы JavaScript, или что-либо, что могло бы иметь необычное поведение перекрестного браузера, это определенно стоит рассмотреть.
(Очень примерно, библиотека является рядом инструментов, разработанных для определенной задачи, пока платформа обычно содержит несколько библиотек и выполняет полный набор обязанностей.)
примеры выше были воспроизведены ниже использования jQuery, вероятно, библиотека JavaScript, которой обычно пользуются (хотя существуют другие, которых стоит исследовать также).
(Отмечают, что $
вот объект jQuery.)
$('#MyElement').addClass('MyClass');
$('#MyElement').removeClass('MyClass');
if ( $('#MyElement').hasClass('MyClass') )
, Кроме того, jQuery обеспечивает ярлык для добавления класса, если это не применяется, или удаление класса, который делает:
$('#MyElement').toggleClass('MyClass');
$('#MyElement').click(changeClass);
или, не нуждаясь в идентификаторе:
$(':button:contains(My Button)').click(changeClass);
Никакое преступление, но это неумно для изменения класса на лету, поскольку это вынуждает интерпретатор CSS повторно вычислить визуальное представление всей веб-страницы.
причина состоит в том, что для интерпретатора CSS почти невозможно знать, могли ли какое-либо наследование или расположение каскадом быть изменены, таким образом, короткий ответ:
Никогда имя класса изменения на лету!-)
, Но обычно необходимо будет только изменить свойство или два, и это легко реализовано:
function highlight(elm){
elm.style.backgroundColor ="#345";
elm.style.color = "#fff";
}
Это является самым легким с библиотекой как jQuery:
<input type="button" onClick="javascript:test_byid();" value="id='second'" />
<script>
function test_byid()
{
$("#second").toggleClass("highlight");
}
</script>
Можно использовать node.className
как так:
document.getElementById('foo').className = 'bar';
Это должно работать в IE5.5 и согласно PPK.
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)
Вот немного стиля по сравнению с 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.
<час> Позволил, говорят, что мы имеем <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")
<час> Строка
document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace(/\bMyClass\b/','')
должна быть:
document.getElementById("MyElement").className = document.getElementById("MyElement").className.replace('/\bMyClass\b/','');