微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何对表格中的部分进行分组?

如何解决如何对表格中的部分进行分组?

我正在使用 Vue 和 Element UI 创建一个表格。目前,我正在尝试找出一种可能的方法,将 year/name 添加到弹出窗口并点击保存以使其显示为 ss 中显示标题之一,旁边带有“添加修剪”它?添加修剪按钮会将这些行添加到表格中,但仅适用于该模型年份/名称组。

总而言之,我正在寻找一种方法将某些行与标有型号名称/年份的标题相关联。

enter image description here

<template>
  <div class="home">
    <div class="table-container">
      <div class="top-buttons">
        <div @click="override = true">add new override</div>
        <h1>Assigned checklist items</h1>
        <div @click="vehicle = true">add vehicle model</div>
      </div>
      <input type="text" placeholder="filter" class="filter" />
      <el-table :data="tableData" height="600" style="width: 100%">
        <el-table-column prop="trim" label="TRIM" width="200"> </el-table-column>
        <el-table-column prop="technical" label="TECHNICAL" width="170"> </el-table-column>
        <el-table-column prop="customer_delivery" label="CUSTOMER DELIVERY" width="170"> </el-table-column>
        <el-table-column prop="customer_acceptance" label="CUSTOMER ACCEPTANCE" width="170"> </el-table-column>
        <el-table-column prop="off_the_truck" label="OFF THE TRUCK" width="170"> </el-table-column>
        <el-table-column prop="vim" label="VIM" width="170"> </el-table-column>
      </el-table>
    </div>

    <!-- Add Vehicle Model -->
    <el-drawer title="Add vehicle model" :visible.sync="vehicle" :direction="direction" :before-close="handleClose">
      <div class="vehicle">
        <span>
          <label for="year">MODEL YEAR</label>
          <input type="text" id="year" v-model="modelYear" placeholder="Model Year" />
        </span>
        <span>
          <label for="model">MODEL NAME</label>
          <input type="text" id="model" v-model="modelName" placeholder="Model NAME" />
        </span>
      </div>
      <div class="buttons">
        <el-button type="primary">Save</el-button>
        <button class="cancel" @click="vehicle = false">Cancel</button>
      </div>
    </el-drawer>

    <!-- Add New Override -->
    <el-drawer title="Add new override" :visible.sync="override" :direction="direction" :before-close="handleClose">
      <span>Hi,there!</span>
    </el-drawer>
  </div>
</template>

<script>
export default {
  name: 'Home',data() {
    return {
      modelYear: '',modelName: '',vehicle: false,override: false,direction: 'rtl',filter: '',tableData: [
        {},{},{
          trim: '2016-05-03',technical: 'Tom',customer_delivery: '123',customer_acceptance: '123',off_the_truck: '123',vim: '123',},{
          trim: '2016-05-02',{
          trim: '2016-05-04',{
          trim: '2016-05-01',{
          trim: '2016-05-08',{
          trim: '2016-05-06',{
          trim: '2016-05-07',],};
  },methods: {
    handleClose(done) {
      this.$confirm('Are you sure you want to close this?')
        .then(() => {
          done();
        })
        .catch(() => {});
    },};
</script>

解决方法

您可能希望将 multiple tbody elements 添加到您的表格中,每个车型对应一个。这让您可以对行进行分组,以便您的“添加修剪”脚本可以针对它所属的任何组。

这个例子很草率,使用了 .insertAdjacentHTML 和一些格式化技巧。在现实生活中,我会使用一系列 .createElement.appendChild 调用(或者更好的 <template> 元素,其内容可以在每次按钮点击时重复使用)——但希望在至少使想法清晰。

(我预先填充了输入字段以使演示更易于使用。)

// Identifies some DOM elements
const
  yearInput = document.getElementById("year"),nameInput = document.getElementById("model"),saveBtn = document.getElementById("saveBtn"),table = document.getElementById("table");

// Adds click listeners
saveBtn.addEventListener("click",addModel);
table.addEventListener("click",addTrim); // Clicks will bubble up to table


// Defines click listeners

function addModel(){
// Adds a model-specific `tbody` element when "Save" is clicked

  if(!yearInput.value || !nameInput.value){ return; } // Requires both inputs

  // Creates the new markup
  const
    modelText = `${yearInput.value} ${nameInput.value}`,tbodyMarkup = `<tbody><tr><th><span class="model">${modelText}</span><button class="addTrim">Add trim</button></th><th></th><th></th></tr></tbody>`;

  // Clears the inputs
  yearInput.value = "";
  nameInput.value = "";

  // Inserts the tbody markup
  table.insertAdjacentHTML("beforeend",tbodyMarkup);
}


function addTrim(event){
  // Adds rows in the current `tbody` when "Add trim" is clicked

  const btn = event.target; // Remembers which element was clicked
  if(!btn.classList.contains("addTrim")){return;} // Ignores irrelevant clicks

  // Finds the ancestor `tbody`,and creates the new markup
  const
    tbody = btn.closest("tbody"),trimMarkup = `<tr><td>GLI (255)</td><td>xxx</td><td>xxx</td></tr><tr><td>R-LINE (222)</td><td>xxx</td><td>xxx</td></tr><tr><td>S (220)</td><td>xxx</td><td>xxx</td></tr>`;

  // Inserts the markup,and disables the button
  tbody.insertAdjacentHTML("beforeend",trimMarkup);
  btn.setAttribute("disabled","");
}
input {width: 50px;}
button {margin-left: 15px;}
tbody>tr,td:first-child {text-align: left;}
th {border-top: 1px solid grey;}
th + th,td + td {border-left: 1px solid grey;}
<label>YEAR<input id="year" value="2010"/></label>
<label>NAME<input id="model" value="Corolla"/></label>
<button id="saveBtn">Save</button>
<hr/>
<table id="table">
  <thead>
    <tr><th>Trim</th><th>Technical </th><th>Delivery</th></tr>
  </thead>
  <tbody>
    <tr>
      <th><span class="yearAndModel">2019 Jetta </span><button class="addTrim" disabled>Add trim</button></th>
      <th></th>
      <th></th>
    </tr>
    <tr><td>GLI (255)</td><td>xxx</td><td> xxx</td></tr>
    <tr><td>R-LINE (222)</td><td>xxx</td><td> xxx</td></tr>
    <tr><td>S (220)</td><td>xxx</td><td> xxx</td></tr>
  </tbody>
</table>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?