1

как не добавлять элемент в массив если такой уже есть там? если я уже кликнул на элемент с id="elem-2" то его не нужно добавлять снова, если я второй раз кликнул по элементу то убрать его из массива. Можно добавлять несколько элементов не только один

function ready() {
  let elem = document.querySelectorAll(".btn"),
    items = [];

for (let i = 0; elem.length > i; i++) { elem[i].onclick = function() { let ind = this.getAttribute("id"); items.push(ind); console.log(items); }; } };

document.addEventListener("DOMContentLoaded", ready);

<button class="btn" id="id-1">elem 1</button>
<button class="btn" id="id-2">elem 2</button>
<button class="btn" id="id-3">elem 3</button>
<button class="btn" id="id-4">elem 4</button>
Air
  • 14,505
dmitriy
  • 1,354
  • Ищите элемент через indexof, если нашли то удаляйте через splice, иначе пуште его. – yolosora Mar 10 '18 at 22:34

1 Answers1

3

function ready() {
  let items = [];
  document.querySelectorAll(".btn").forEach(e => {
    e.addEventListener('click', function() {
      let indx = items.indexOf(this.id);
      if (~indx) items.splice(indx, 1);
      else items.push(this.id);
  console.log(items);
});

}); };

document.addEventListener("DOMContentLoaded", ready);

<button class="btn" id="id-1">elem 1</button>
<button class="btn" id="id-2">elem 2</button>
<button class="btn" id="id-3">elem 3</button>
<button class="btn" id="id-4">elem 4</button>
  • Даже и не заметил, что еще и удалять надо.... – Air Mar 11 '18 at 00:24
  • можете пожалуйста обьяснить что это за условие ~indx, что этот символ делает – dmitriy Mar 12 '18 at 10:39
  • @DimaVleskov https://ru.stackoverflow.com/questions/625878/javascript-%D0%94%D0%B2%D0%BE%D0%B9%D0%BD%D0%BE%D0%B5-%D0%BE%D1%82%D1%80%D0%B8%D1%86%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B8-%D0%BF%D0%BE%D0%B1%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B9-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-%D0%A2%D0%B8%D0%BB%D1%8C%D0%B4%D0%B0 – Rostyslav Kuzmovych Mar 12 '18 at 12:24