Задать вопрос
  • Как создать двухмерный массив данные из нескольких input JS?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сколько tbody у таблицы? Одна штука:

    document.querySelector('tbody').addEventListener('input', function() {
      const data = Array.from(
        this.children,
        tr => Array.from(tr.querySelectorAll('input'), input => input.value)
      );
    
      console.log(data);
    });

    Несколько:

    document.querySelector('table').addEventListener('input', e => {
      const { map, flatMap } = Array.prototype;
      const data = flatMap.call(
        e.currentTarget.tBodies,
        tbody => map.call(
          tbody.rows,
          tr => map.call(tr.cells, td => td.lastElementChild.value)
        )
      );
    
      console.log(data);
    });
    
    // или
    
    document.querySelector('table').addEventListener('input', function() {
      const numHeadRows = this.querySelectorAll('thead tr').length;
      const data = [];
    
      for (const input of this.querySelectorAll('tbody input')) {
        const td = input.parentNode;
        const iCol = td.cellIndex;
        const iRow = td.parentNode.rowIndex - numHeadRows;
        (data[iRow] ??= [])[iCol] = input.value;
      }
    
      console.log(data);
    });
    Ответ написан
    4 комментария