javascript - 如何更改多个具有相同名称的类的每个值

标签 javascript html

我有一个网页,上面有一些产品,我想做的是每次用户单击删除按钮时计算新数量,但我有这么多产品,而且我使用的是相同的类名,所以我不知道如何在用户单击每个产品的特定按钮时操纵或更改数量的值

现在,当我单击删除 ( supprimer ) 按钮时,它适用于所有产品,但我希望在单击每个产品的特定按钮时更改值?

const qte = document.querySelectorAll('.qte');
const suppr = document.querySelectorAll('.suppr');

suppr.forEach(function(button) {
  button.onclick = (event => {
    for (let i = 0; i < qte.length; i++) {
      qte[i].innerText = parseInt(qte[i].innerText) - 1;
    }
  })
});
<div class="col-lg-6">
  <div class="card">
    <ul class="list-group list-group-flush">
      <li class="list-group-item">
        <div class="row">
          <div class="col-md-4">
            <img src="../img/produit_newyork_0.jpeg" class="img-fluid float-left mr-5" width="80" height="60" />
          </div>
          <div class="col-md-4">
            <p class="mb-auto">Lego Architecture</p>
            <p class="font-weight-bold">New York City</p>
            <p class="font-italic">Quantité : <span class="qte">1</span></p>
          </div>
          <div class="col-md-4">
            <h4 class="text-right prix">49,99€</h4>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            <button class="btn btn-outline-danger btn-sm float-right suppr">Supprimer <i class="fas fa-trash-alt"></i></button>
          </div>
        </div>
      </li>
      <li class="list-group-item">
        <div class="row">
          <div class="col-md-4">
            <img src="../img/produit_londres_0.jpeg" class="img-fluid float-left mr-5" width="80" height="60" />
          </div>
          <div class="col-md-4">
            <p class="mb-auto">Lego Architecture</p>
            <p class="font-weight-bold">Londres City</p>
            <p class="font-italic">Quantité : <span class="qte">3</span></p>
          </div>
          <div class="col-md-4">
            <h4 class="text-right prix">49,99€</h4>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            <button class="btn btn-outline-danger btn-sm float-right suppr">Supprimer <i class="fas fa-trash-alt"></i></button>
          </div>
        </div>
      </li>
    </ul>
  </div>
</div>

最佳答案

相对寻址。使用 this.closest("container") 或 event.target.closest...

两个版本,每个按钮一个

document.querySelectorAll('.suppr').forEach(button => {
  button.onclick = (event => {
    event.preventDefault();
    const qte = event.target.closest(".list-group-item").querySelector(".qte");
    let val = qte.innerText;
    val--;
    if (val >= 0) qte.innerText = val;
  })
});
<div class="col-lg-6">
  <div class="card">
    <ul class="list-group list-group-flush">
      <li class="list-group-item">
        <div class="row">
          <div class="col-md-4">
            <img src="../img/produit_newyork_0.jpeg" class="img-fluid float-left mr-5" width="80" height="60" />
          </div>
          <div class="col-md-4">
            <p class="mb-auto">Lego Architecture</p>
            <p class="font-weight-bold">New York City</p>
            <p class="font-italic">Quantité : <span class="qte">1</span></p>
          </div>
          <div class="col-md-4">
            <h4 class="text-right prix">49,99€</h4>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            <button class="btn btn-outline-danger btn-sm float-right suppr">Supprimer <i class="fas fa-trash-alt"></i></button>
          </div>
        </div>
      </li>
      <li class="list-group-item">
        <div class="row">
          <div class="col-md-4">
            <img src="../img/produit_londres_0.jpeg" class="img-fluid float-left mr-5" width="80" height="60" />
          </div>
          <div class="col-md-4">
            <p class="mb-auto">Lego Architecture</p>
            <p class="font-weight-bold">Londres City</p>
            <p class="font-italic">Quantité : <span class="qte">3</span></p>
          </div>
          <div class="col-md-4">
            <h4 class="text-right prix">49,99€</h4>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            <button class="btn btn-outline-danger btn-sm float-right suppr">Supprimer <i class="fas fa-trash-alt"></i></button>
          </div>
        </div>
      </li>
    </ul>
  </div>
</div>

替代方案是容器上的事件处理程序:

document.querySelector(".card").addEventListener("click", event => {
  const tgt = event.target;
  if (tgt.classList.contains("suppr")) {
    event.preventDefault();
    const qte = tgt.closest(".list-group-item").querySelector(".qte");
    let val = qte.innerText;
    val--;
    if (val >= 0) qte.innerText = val;
  }
});
<div class="col-lg-6">
  <div class="card">
    <ul class="list-group list-group-flush">
      <li class="list-group-item">
        <div class="row">
          <div class="col-md-4">
            <img src="../img/produit_newyork_0.jpeg" class="img-fluid float-left mr-5" width="80" height="60" />
          </div>
          <div class="col-md-4">
            <p class="mb-auto">Lego Architecture</p>
            <p class="font-weight-bold">New York City</p>
            <p class="font-italic">Quantité : <span class="qte">1</span></p>
          </div>
          <div class="col-md-4">
            <h4 class="text-right prix">49,99€</h4>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            <button class="btn btn-outline-danger btn-sm float-right suppr">Supprimer <i class="fas fa-trash-alt"></i></button>
          </div>
        </div>
      </li>
      <li class="list-group-item">
        <div class="row">
          <div class="col-md-4">
            <img src="../img/produit_londres_0.jpeg" class="img-fluid float-left mr-5" width="80" height="60" />
          </div>
          <div class="col-md-4">
            <p class="mb-auto">Lego Architecture</p>
            <p class="font-weight-bold">Londres City</p>
            <p class="font-italic">Quantité : <span class="qte">3</span></p>
          </div>
          <div class="col-md-4">
            <h4 class="text-right prix">49,99€</h4>
          </div>
        </div>
        <div class="row">
          <div class="col-md-12">
            <button class="btn btn-outline-danger btn-sm float-right suppr">Supprimer <i class="fas fa-trash-alt"></i></button>
          </div>
        </div>
      </li>
    </ul>
  </div>
</div>

关于javascript - 如何更改多个具有相同名称的类的每个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55903140/

相关文章:

javascript - 在采取行动的情况下获取单选按钮的选定值

html - Angular 2 - 子组件不从父组件继承样式

javascript - 将数据传递给单个文件 Vue 组件

html - 纯 CSS 下拉问题

javascript - 如何使用javascript实现验证?

Javascript( typescript )Chrome 扩展,函数回调如 promise ?

html - 全尺寸封面正在缩放

javascript - 显示特定 URL 的 DIV

javascript - KnockoutJS - 模板上的点击事件

javascript - Angular JS - 使用 CoffeeScript 确认对话框