This commit is contained in:
Ilya Kantor 2016-03-04 19:06:22 +03:00
parent e78e527866
commit 05a93ced80
212 changed files with 3213 additions and 3968 deletions

View file

@ -1,13 +1,12 @@
Решение заключается в том, чтобы разбить `className` в массив классов, а затем пройтись по нему циклом. Если класс есть - удаляем его `splice`, заново объединяем массив в строку и присваиваем объекту.
```js
//+ run
```js run
function removeClass(obj, cls) {
var classes = obj.className.split(' ');
for (i = 0; i < classes.length; i++) {
if (classes[i] == cls) {
classes.splice(i, 1); // удалить класс
classes.splice(i, 1); // удалить класс
*!*
i--; // (*)
*/!*
@ -28,6 +27,6 @@ alert(obj.className) // open
В примере выше есть тонкий момент. Элементы массива проверяются один за другим. При вызове `splice` удаляется текущий, `i-й` элемент, и те элементы, которые идут дальше, сдвигаются на его место.
Таким образом, **на месте `i` оказывается новый, непроверенный элемент**.
Таким образом, **на месте `i` оказывается новый, непроверенный элемент**.
Чтобы это учесть, строчка `(*)` уменьшает `i`, чтобы следующая итерация цикла заново проверила элемент с номером `i`. Без нее функция будет работать с ошибками.

View file

@ -1,6 +1,8 @@
# Функция removeClass
importance: 5
[importance 5]
---
# Функция removeClass
У объекта есть свойство `className`, которое хранит список "классов" - слов, разделенных пробелами: