Давайте сломаем это.
Сначала нам нужно получить доступ к элементу DOM на странице, поэтому мы делаем это, используя метод самого document
, который возвращает элемент, которым мы хотим манипулировать.
var buttons = document.getElementsByTagName("button");
Переменная buttons
будет списком ВСЕХ кнопок на странице. Мы хотим что-то сделать со всеми ними, поэтому сначала кэшируем длину списка, т. е. подсчитываем, сколько кнопок у нас есть.
var len = buttons.length;
Затем мы в основном говорим: установите i равным 0 и увеличивайте его на единицу, пока он не будет равен количеству кнопок, которые у нас есть.
for (i = 0; i < len; i++) {
Теперь, чтобы получить доступ к одной кнопке из списка, нам нужно использовать обозначение скобок. Итак, buttons[0]
— это первый элемент, buttons[1]
— второй и т. д. Поскольку i
начинается с 0, мы помещаем i
в скобки, чтобы на каждой итерации он обращался к следующей кнопке в списке.
buttons[i].onclick = function() {
var className = this.innerHTML.toLowerCase();
document.body.className = className;
};
}
Это эквивалентно выполнению:
buttons[0].onclick = function() {
var className = this.innerHTML.toLowerCase();
document.body.className = className;
};
buttons[1].onclick = function() {
var className = this.innerHTML.toLowerCase();
document.body.className = className;
};
buttons[2].onclick = function() {
var className = this.innerHTML.toLowerCase();
document.body.className = className;
};
// etc.
Но, конечно, это супер неэффективно, и мы можем не знать, сколько кнопок на странице. Итак, мы получаем там все кнопки, узнаем, сколько их, затем проходим по каждой кнопке и назначаем ей обработчик событий вместе с новым классом.
Теперь, взглянув на сам обработчик onclick, мы видим, что он сначала находит HTML внутри кнопки, по которой нажимают, преобразует его в строчные буквы и присваивает его переменной:
var className = this.innerHTML.toLowerCase();
Используя this
, мы гарантируем, что каждая кнопка будет получать собственный innerHTML при нажатии. Мы не отслеживаем, какая кнопка какая, мы просто говорим каждой кнопке проверять свое собственное содержимое.
Затем он изменяет класс HTML-элемента body
на то, что мы только что проанализировали.
document.body.className = className;
Итак, скажите, что у вас есть что-то вроде
<button>success</button>
<button>failure</button>
<button>warning</button>
Нажатие первой кнопки установит класс элемента <body>
на success
, нажатие второй кнопки установит его на failure
, а третье — на warning
.
person
Aweary
schedule
06.02.2015
<button>
, который устанавливает класс тела для текста кнопки - person Tomanow   schedule 07.02.2015