@kamisarlapsha

Как удалить все блоки, кроме того, по которому нажали?

Привет! Есть допустим 4 блока <div class="table-cart--section"></div> и у каждого есть атрибут data-productid="тут id". И внутри этих блоков есть <button class="btn-buy"></button>.

И нужно сделать, чтобы при клике <button class="btn-buy"></button> совершалось событие cart.remove со значением каждого атрибута data-productid, кроме значения, которое у родительского .

Должно получиться как то так.
cart.remove() // Внутри функции должны находить все значения атрибутов (productid), кроме того, у которого по дочерней кнопки был клик.


К примеру, мы нажали на кнопку у которой у родителя значение атрибута 7. И есть остальные 3 блока со значением атрибутов - 8,9,10.
Получается такой код:

cart.remove(8,9,10)

И ещё не поминаю, как собирать все эти значения атрибутов.

Запутался уже. Заранее спасибо за помощь!
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
freislot
@freislot
Frontend-разработчик
Можно так, возможно кто-то сделает лучше, я накидал по-быстрому)
ключевой метод each() собираем все productid на странице кроме того где нажали, и складываем в массив
https://codepen.io/freislot/pen/bmrEJG

$(document).on('click', '.btn-buy', function(){
  var ids = []; //обьявляем пустой массив
  var clickedId = $(this).parent().data('productid'); //запоминаем id кликнутой кнопки точнее ее родителя
  $('.btn-buy').each(function(){
    var id = $(this).parent().data('productid'); //ищем остальные id и исключаем наш кликнутый id
    if(id !== clickedId){
      ids.push(id)
    }
  })
  alert(ids) //выводим массив id 
  // свою функцию cart.remove(ids) вызываем здесь
})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@darknefrit
Если button в каждм блоке то почему бы не сделать
<button class="btn-buy" onclick=cart.remove({"кроме":7})>

а уже в
cart={
remove(data){
let blocks = document.getElementsByClassName("table-cart--section");
for (let block in blocks){
if (blocks[block].dataset.productid !== data["кроме"])
 blocks[block].ParrentNode.RemoveChilde(blocks[block])
}
}
}

Если я правильно понял...

Можно конечно и по вашему, вначале перебрать все блоки выбрать их dataset отправить их в вашу функцию и там опять их перебрать и удалить... Ну как то так эскпереминтируйте
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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