renovations
This commit is contained in:
parent
4b8b168fd2
commit
c7d4c7e3ff
172 changed files with 869 additions and 244 deletions
|
@ -0,0 +1,31 @@
|
|||
Решение заключается в том, чтобы разбить `className` в массив классов, а затем пройтись по нему циклом. Если класс есть - удаляем его `splice`, заново объединяем массив в строку и присваиваем объекту.
|
||||
|
||||
```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); // удалить класс
|
||||
*!*
|
||||
i--; // (*)
|
||||
*/!*
|
||||
}
|
||||
}
|
||||
obj.className = classes.join(' ');
|
||||
|
||||
}
|
||||
|
||||
var obj = { className: 'open menu menu' }
|
||||
|
||||
removeClass(obj, 'blabla');
|
||||
removeClass(obj, 'menu')
|
||||
alert(obj.className) // open
|
||||
```
|
||||
|
||||
В примере выше есть тонкий момент. Элементы массива проверяются один за другим. При вызове `splice` удаляется текущий, `i-й` элемент, и те элементы, которые идут дальше, сдвигаются на его место.
|
||||
|
||||
Таким образом, **на месте `i` оказывается новый, непроверенный элемент**.
|
||||
|
||||
Чтобы это учесть, строчка `(*)` уменьшает `i`, чтобы следующая итерация цикла заново проверила элемент с номером `i`. Без нее функция будет работать с ошибками.
|
Loading…
Add table
Add a link
Reference in a new issue