如何仅使用 javascript 创建/添加新表行

Posted

技术标签:

【中文标题】如何仅使用 javascript 创建/添加新表行【英文标题】:how to create/add a new table row with javascript alone 【发布时间】:2022-01-19 02:27:21 【问题描述】:

我想做什么:


使用peopleDropdown 将新人员添加到createPerson 内的人员下拉列表中 使用peopleTablecreatePerson 中添加新的表格行

ma​​in.js:


class Dropdown 
    constructor(idSelector) 
      this.idSelector = idSelector;
    getCurrentSelection() 
      return $(this.idSelector).val();
    appendToDropdown(label, value) 
      $(this.idSelector).append(`<option value=$value>$label</option>`);


class Table 
    constructor(idSelector) 
      this.selector = idSelector;
     
    appendRow(data) 
      let tableRows = `
        <td class="name-col"></td>
        <td class="balance-col"></td>
        <td class="consumed-col"></td>
      `;
      $(this.selector).append(`<tr id="">$tableRows</tr>`);
    
    modifyRow(/*define inputs*/) 


const peopleDropdown = new Dropdown('#people-dropdown');
const peopleTable = new Table(`#person-table tbody`);

const allPeople = [];

const createPerson = () =>   
    let name = getNameInput();
    allPeople.push(name);
    //peopleDropDown code
    //peopleTable code
  

我一直纠结于如何添加表格,因为我的常规做法是使用 react 作为框架。 (这里不是一个选项)

HTML:


<div id="creator-row">
  <input id="name-input" placeholder="Name" />
  <button onclick="createPerson()">Create Person</button>
</div>

<div id="consume-row">
  <label for="person-list">Choose a person:</label>
  <select name="person-list" id="people-dropdown"></select>
</div>

<table id="person-table">
  <thead>
    <tr class="header-row">
      <th class="name-col">Name</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>

【问题讨论】:

【参考方案1】:

这个sn-p只回答了如何将行添加到表中的问题

const table = document.getElementById("person-table");
const tbody = table.querySelector("tbody");
const tr = document.getElementById("tr");

// some people
const people = [
    "name": "one",
    "balance": 1,
    "consumed": 1
  ,
  
    "name": "two",
    "balance": 2,
    "consumed": 2
  ,
  
    "name": "three",
    "balance": 3,
    "consumed": 3
  ,
];

// loop through the people and add them to the table
people.forEach(p => 
  const newRow = tr.content.cloneNode(true);
  const cells = newRow.querySelectorAll("td");
  cells[0].textContent = p.name;
  cells[1].textContent = p.balance;
  cells[2].textContent = p.consumed;
  tbody.appendChild(newRow);
);
td 
  border: 1px solid #000;
<table id="person-table">
  <thead>
    <tr class="header-row">
      <th class="name-col">Name</th>
      <th class="balance-col">Balance</th>
      <th class="consumed-col">Consumed</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>

<!-- a template of the row -->
<template id="tr">
<tr>
<td class="name-col"></td>
<td class="balance-col"></td>
<td class="consumed-col"></td>
</tr>
</template>

【讨论】:

以上是关于如何仅使用 javascript 创建/添加新表行的主要内容,如果未能解决你的问题,请参考以下文章

使用JSON动态添加表行

如何仅使用列标题创建JTable,不添加任何行

用于将数据粘贴到新表行中的 VBA 宏 - Excel

如何正确使用 Javascript 来定位 Shiny 中的 gt 表行元素

Angularjs:从使用 ng-repeat 创建的表中一次仅扩展一个表行

Javascript - 单击表行上的事件以更改HTML元素