@olya_097

Почему не i++ в шестой строке?

function removeClass(obj,cls){
var classes=obj.className.split(" ");
for(var i=0;i<classes.length;i++){
if(classes[i]==cls){
	classes.splice(i,1);
  i--; // почему здесь не i++ ?
			}
	}

obj.className=classes.join(" ");
}

var obj = {
  className: 'open menu menu'
}

removeClass(obj, 'blabla');
removeClass(obj, 'menu')
alert(obj.className) // open
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
Minifets
@Minifets
Hello world!!!
После удаления из массива например 4-ого элемента, 5-ый станет 4-ым, и нам нужно продолжить обход массива с 4-ого, вместо 5-ого. Если вставить i++, то обход продолжится на 6-ом элементе, т.е. мы пропустим 2 индекса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
for(var i=0;i <classes.length;i++
){
..
 i--; // почему здесь не i++ ?
..
			}
	}

А зачем перескакивать через элемент при срабатывании условия? Может, логичнее проверить условие еще раз, вдруг в classes[i] есть еще одно вхождение cls?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы