在纯 js 中从动态 table html 到 json 收集数据

collect data from dynamic table html to json in pure js

我需要帮助从 table 收集数据,我有一个动态 table,它从 <select> 标签中的所选项目添加一行,该行是用以下参数

function addRow(selectAnswer) {
 const empTab = document.getElementById('empTable');
 let rowCnt = empTab.rows.length;
 let tr = empTab.insertRow(rowCnt); 
 for (let c = 0; c < HeaderTable.length; c++) {
  let td = document.createElement('td'); 
  td = tr.insertCell(c);
  if (c == 0) {
   let button = document.createElement('button');
   button.textContent = "Удалить";
   button.setAttribute('id', selectAnswer);
   button.setAttribute("class", "clearBtn")
   button.setAttribute("onclick", "addSelect(this)")
   td.appendChild(button);
} else if (c == 1) {
   let ele = document.createElement('span');
   ele.textContent = selectAnswer
   td.appendChild(ele);
} else {
   let ele1 = document.createElement("input");
   ele1.setAttribute("type", "number")
   td.appendChild(ele1)
  };
 }
}

当您单击“计算”按钮时,应在 JSON 中收集每一行并进一步发送,

我收集资料如下

let btn = document.getElementById("btn").addEventListener("click", () => {
 let database = []
 const table = document.getElementById("empTable")
  for (let i = 1; row = table.rows[i]; i++) {
   database.push({ name: row.cells[1], massa: row.cells[2], W: row.cells[3], A: row.cells[4] })
 }
     console.log(database)
     calck(database)
 })

结果我得到

enter image description here

但我不知道如何从 span 中收集标题和从 input 中收集所有值,而不是从 [=33] 中收集单元格 (td) =]

如果您要返回td,则意味着您必须首先访问属性firstChild。从这里,您应该得到 value(来自 input 标签)或 innerText(来自 span)。请注意,这些 slice(1) 用于从数组中删除位置 0。看看:

const keys = ["name","massa","W","A"]
const table = document.getElementById("empTable")
let database = [];

const fillDatabase = () => {
  let getTdContent = (td) => (td.firstChild.value || td.firstChild.innerText);
  [...table.rows]
    .slice(1)
    .forEach(row => {
      let obj = {};
      [...row.cells]
        .slice(1)
        .forEach((td,index) => obj[keys[index]] = getTdContent(td))
      database.push(obj)
    })
}

const input = document.querySelector('#input')
input.onclick = () => {
  fillDatabase();
  console.log(database);
  database = []
}
 
<div id="table">
  <table id="empTable">
    <tbody>
      <tr>
        <th></th>
        <th>Название</th>
        <th>Масса,Т</th>
        <th>Влажность</th>
        <th>Зольность</th>
      </tr>
      <tr>
        <td><button id="Тестиль" class="clearBtn" onclick="addSelect(this)">Удалить</button></td>
        <td><span>Тестиль</span></td>
        <td><input type="number"></td>
        <td><input type="number"></td>
        <td><input type="number"></td>
      </tr>
    </tbody>
  </table>
</div>
<input id='input' type='submit' placeholder='Calculate'>