js獲取table指定列的內容如果這列每行內容相同時進行某一列的數量合并
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
![]() ![]() <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <table id="myTable"> <thead> <tr> <th>名稱</th> <th>類別</th> <th>數量</th> </tr> </thead> <tbody> <tr> <td>蘋果</td> <td>水果</td> <td>10</td> </tr> <tr> <td>蘋果</td> <td>水果</td> <td>15</td> </tr> <tr> <td>香蕉</td> <td>水果</td> <td>8</td> </tr> <tr> <td>香蕉</td> <td>水果</td> <td>7</td> </tr> </tbody> </table> </body> <script> function mergeQuantityByColumn(tableId, keyColumnIndex, quantityColumnIndex) { const table = document.getElementById(tableId); const tbody = table.tBodies[0]; const rows = Array.from(tbody.rows);
// 用一個Map來存儲每個key列的值對應的總數量和第一個對應行索引 const map = new Map();
for (let i = 0; i < rows.length; i++) { const key = rows[i].cells[keyColumnIndex].innerText.trim(); const quantity = parseFloat(rows[i].cells[quantityColumnIndex].innerText.trim()) || 0;
if (map.has(key)) { // 累加數量 const entry = map.get(key); entry.totalQuantity += quantity; entry.rows.push(rows[i]); } else { map.set(key, { totalQuantity: quantity, rows: [rows[i]] }); } }
// 遍歷Map,更新第一個對應行的數量列,隱藏其他行 for (const [key, entry] of map.entries()) { const firstRow = entry.rows[0]; firstRow.cells[quantityColumnIndex].innerText = entry.totalQuantity; // 如果有多余的重復行,隱藏它們 for (let i = 1; i < entry.rows.length; i++) { entry.rows[i].style.display = "none"; } } } //mergeQuantityByColumn("myTable", 0, 2); </script> </html> ?該文章在 2025/7/31 11:15:16 編輯過 |
關鍵字查詢
相關文章
正在查詢... |