Good day.
There is a table in it <td class="sum"> , it is necessary to calculate the sum of all these cells.
Also tell me how to implement a change in the value of the cell Price <td class="price"> depending on the value of the entered number in the <input> field, for example, to 50 = 88, from 50 to 100 = 70
Thank you in advance.
https://jsfiddle.net/Dumb/3xLrrdws/3/
|
2 answers
Something like this:
function calculateSum(inp,tr ) { if (inp.tagName === "INPUT") { tr.querySelector(".sum").textContent = tr.querySelector(".price").textContent * inp.value; } } function changePrice(inp, tr) { tr.querySelector(".price").textContent = parseInt(inp.value) <= 50 ? 88 : 70; } function total() { table = document.getElementById('table-price-box').getElementsByTagName('tr'); var sum = 0; for(var i = 0; i < table.length; i++) { if(table[i].querySelector('.sum') && table[i].querySelector('.sum').textContent) { sum +=parseInt(table[i].querySelector('.sum').textContent); } } return sum; } document.getElementById("table-price-box").addEventListener("input", function (e) { var inp = e.target; var tr = inp.parentElement.parentElement; changePrice(inp, tr); calculateSum(inp, tr); document.getElementById("total").textContent = total(); }); table{ width:100%; border: 1px solid black; } <table id="table-price-box"> <tr><td>Наименование<td>Классификатор<td>Свойства<td>Количество<td>Цена<td>Итого</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum"></tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum"></tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum"></tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum"></tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum"></tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum"></tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum"></tr> </table> <p>всего <span id="total">0</span></p> |
Amount:
let arr = Array .from(document.querySelectorAll('.sum')) // собираем массив из нод с классом .sum .map((item) => { return item.innerHTML // трансформируем массив в массив содержащий уже не ноды, а их содержимое }) .map(Number); // приводим к числовому типу let total = arr.reduce((sum, item) => { return sum+item; // считаем сумму массива }); console.log(total); <table id="table-price-box"> <tr><td>Наименование<td>Классификатор<td>Свойства<td>Количество<td>Цена<td>Итого</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <p>всего <span id="total"></span></p> </table> Replacing values depending on the input to input[type=number] :
let arr = Array.from(document.querySelectorAll('input[type=number]')).forEach(function(item) { item.addEventListener('change', handler.bind("", item)); }); function handler(el) { let itemValue = +el.value; if(itemValue < 50) { el.parentElement.nextSibling.innerHTML = 88; } else if (itemValue >= 50 && itemValue <100 ) { el.parentElement.nextSibling.innerHTML = 70; } } <table id="table-price-box"> <tr><td>Наименование<td>Классификатор<td>Свойства<td>Количество<td>Цена<td>Итого</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <tr><td>Корпус<td>ТТБ<td>Пластик<td><input type="number"><td class="price">88<td class="sum">11</tr> <p>всего <span id="total"></span></p> </table> |
rows, andnextSiblingyou can find the cells throughnextSibling. - nick_n_a