javascript - 如何使用唯一事件克隆表的不同行

标签 javascript

制作一个订购应用程序。有一个 div,其中包含一个表格,其中包含所有产品的价格和一个用于选择它的按钮。第二个 div 包含选定的产品。因此,我克隆所选产品并将其放入第二个 div 中。它可以运行,但我必须为每个产品创建一个事件,并且我想使用按钮类名称创建一个独特的函数来执行此操作。

我尝试创建一个 for() 但没有结果,但我是一个 js 初学者,我的语法有问题

HTML

<h1>CHOOSE</h1>

<table id="starters">
          <tr>
            <th>PRODUCT</th>
            <th>PRICE</th>
            <th>ADD TO CART</th>
          </tr>
          <tr>
            <td>Cherry</td>
            <td>6</td>
            <td><button id="s1" class="item_button"></button></td>
          </tr>
          <tr>
            <td>Peach</td>
            <td>8</td>
            <td><button id="s2" class="item_button"></button></td>
          </tr>
          <tr>
            <td>Strawberry</td>
            <td>12</td>
            <td><button id="s3" class="item_button"></button></td>
          </tr>
          <tr>
            <td>Banana</td>
            <td>7</td>
            <td><button id="s4" class="item_button"></button></td>
          </tr>
          <tr>
            <td>Apple</td>
            <td>7</td>
            <td><button id="s5" class="item_button"></button></td>
        </tr>          
</table>

<h1>YOUR CHOICE</h1>   

<table id="products_cart">

</table>

JavaScript

var s0ne = document.getElementById('s1');
var sTwo = document.getElementById('s2');
var sThree = document.getElementById('s3');
var sFour = document.getElementById('s4');
var sFive = document.getElementById('s5');
let boxes = document.getElementById("starters")
let basket = document.getElementById("products_cart")

s0ne.onclick = function() {
  let clone = boxes.getElementsByTagName("tr")[1].cloneNode(true);
  basket.appendChild(clone);
}

sTwo.onclick = function() {
  let clone = boxes.getElementsByTagName("tr")[2].cloneNode(true);
  basket.appendChild(clone);
}

sThree.onclick = function() {
  let clone = boxes.getElementsByTagName("tr")[3].cloneNode(true);
  basket.appendChild(clone);  
}

sFour.onclick = function() {
  let clone = boxes.getElementsByTagName("tr")[4].cloneNode(true);
  basket.appendChild(clone);  
}

sFive.onclick = function() {
  let clone = boxes.getElementsByTagName("tr")[5].cloneNode(true);
  basket.appendChild(clone);  
}

最佳答案

考虑到您可以使用 jQuery:

let basket = document.getElementById("products_cart")

$('.item_button').on('click', function(e) {
 let target = $(e.currentTarget);
 let clone = target.parents('tr')[0].cloneNode(true);
 basket.appendChild(clone);
})

使用纯 JS,你可以这样做:

let basket = document.getElementById("products_cart")

let buttons = document.querySelectorAll('.item_button');

for (button of buttons) {
 button.addEventListener('click', cloneLine);
}

function cloneLine(e) {
 let td = e.target.parentNode;
 let tr = td.parentNode;
 let clone = tr.cloneNode(true);
 basket.appendChild(clone);
}

关于javascript - 如何使用唯一事件克隆表的不同行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56371038/

相关文章:

javascript - 重写 Google map 信息窗口中的内容

javascript - 在 Laravel 中编辑期间保持选择选项值处于选中状态

javascript - 根据鼠标在输入字段中的移动查找字符位置

javascript - axios get 和 post 返回的 data/promise 有区别吗?

javascript - JS - 检查网页是否关闭

javascript - 从图像中获取像素颜色总是 0 0 0 0?

javascript - 如何映射对象数组并将它们作为按 "categories"排序的新对象数组返回

c# - 在 AngularJS $http 中传递日期到 ASP.NET Web Api

javascript - 切换一个不是这个父级的 div

Javascript OOP 和继承技术