@Shimpanze

Почему этот цикл намертво вешает вкладку?

Здравствуйте!

Мне необходимо удалить все атрибуты у всех тегов, кроме атрибута «href».

Пишу код:

// Собираю все элементы в массив
[].forEach.call(document.querySelectorAll('.post *'), function(e) {
  // Получаю все атрибуты у текущего элемента
  // и запускаю по ним цикл
  while(e.attributes.length > 0) {
    // Если текущий атрибут в цикле это НЕ «href»
    if (! e.hasAttribute(e.attributes[0].href) {
      // То удаляем его
      e.removeAttribute(e.attributes[0].name);
    }
  }
});


Вешает вкладку браузера намертво...
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Array.prototype.forEach.call(document.querySelectorAll('.post *'), function(e) {
  for(var i = e.attributes.length; i--;) {
    if(e.attributes[i].nodeName !== 'href') {
      e.removeAttributeNode(e.attributes[i]);
    }
  }
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что условие e.attributes.length > 0 у вас всегда истинно и цикл никогда не завершается.
Ответ написан
Ваш ответ на вопрос

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

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