mk3mk
@mk3mk
занимаюсь вёрсткой (иногда)

Перебор массива циклом for с целью обращения ко всем остальным элементам кроме i-го?

Всем привет!
Как при переборе коллекции элементов циклом for
обратиться ко всем остальным, кроме i-го элемента ?
let arr = document.querySelectorAll('.item');
for ( let i=0;  i<arr.length; i++ ){
      arr[i].style = 'background:red';
      arr[ все остальные элементы ].style = 'background:green';
};

Или может для этой цели использовать не for , а другой цикл ?
  • Вопрос задан
  • 211 просмотров
Пригласить эксперта
Ответы на вопрос 3
hzzzzl
@hzzzzl
arr[i].style = (i === 13) ? 'background:red' : 'background:green'
Ответ написан
@afanasiyz
Javascript-разработчик
Расскажите, какую задачу вам надо решить.
что-то типа прогресс бара, как я понимаю?

Самый простой вариант, который чуть более правилен с точки зрения алгоритмики

let arr = document.querySelectorAll('.item');
arr.forEach((elem)=>{
  elem.style = "background: green";
});
 arr[0].style = 'background:red';
for ( let i=1;  i<arr.length; i++ ){
      arr[i].style = 'background:red';
      arr[i-1].style = 'background:green';
};
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно проверять, равен ли очередной кандидат – кликнутому элементу:
const onClick = event => {
  const nodeList = document.querySelectorAll('.item');
  for (let i=0;  i<nodeList.length; i++ ) {
    nodeList[i].style = (nodeList[i] === event.target ? 'background:red' : 'background:green');
  };
}


Лучше не пихать инлайн стили, а обойтись классами:
.item {background: green } // по умолчанию все зелёные
.item-red {background: red } // тот самый

используя classList
// clickedEl — item, по которому кликнули
[...document.querySelectorAll('.item')].forEach(el => {
  if (clickedEl === el) el.classList.add('item-red');
  else el.classList.remove('item-red');
});
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
NewTech Екатеринбург
от 70 000 до 120 000 руб.
от 2 000 до 2 500 usd.