使用JavaScript实现表格编辑器(实例讲解)

下面我将详细讲解如何使用JavaScript实现表格编辑器:

1. 准备工作

在实现表格编辑器之前,我们需要在HTML中添加一个空表格,具体代码如下所示:

<table id="myTable">
  <thead>
    <tr>
      <th>姓名</th>
      <th>年龄</th>
      <th>性别</th>
      <th>操作</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

2. 添加JavaScript代码

接下来,我们需要在JavaScript中添加一些代码,来实现表格的编辑功能。首先,我们需要添加以下代码,来获取表格元素和表格行数:

var table = document.getElementById('myTable');
var rowCount = table.rows.length;

接着,我们需要为表格添加一个空行,代码如下:

var newRow = table.insertRow(rowCount);

然后,我们需要往新行中添加单元格,并添加相关的HTML代码和样式:

newRow.innerHTML = '<td><input type="text" name="name"></td>' + '<td><input type="text" name="age"></td>' + '<td><select name="gender"><option value="male">男</option><option value="female">女</option></select></td>' + '<td><input type="button" value="编辑" onclick="editRow(this)">' + '<input type="button" value="保存" onclick="saveRow(this)">' + '<input type="button" value="删除" onclick="deleteRow(this)"></td>';
newRow.className = 'editableRow';

其中,editRow()saveRow()deleteRow()是用来编辑、保存和删除表格行的函数。

3. 编辑、保存和删除表格行

下面,我们来详细讲解如何实现编辑、保存和删除表格行的功能。

3.1 编辑表格行

编辑表格行需要我们在点击编辑按钮时,将当前行的单元格中的数据保存到input中,并将该单元格变为可编辑状态。编辑完成后,我们需要点击“保存”按钮将数据保存到表格中,并将该单元格变为不可编辑状态。

函数代码如下:

function editRow(row) {
  var currentRow = row.parentNode.parentNode;
  var cells = currentRow.getElementsByTagName('td');
  for (var i = 0; i < cells.length - 1; i++) {
    var cell = cells[i];
    var cellValue = cell.innerText || cell.textContent;
    cell.innerHTML = '<input type="text" value="' + cellValue + '">';
  }
  row.style.display = 'none';
  currentRow.getElementsByClassName('saveBtn')[0].style.display = 'inline-block';
}

编辑操作的核心在于将单元格中的数据保存到input中,并将该单元格变为可编辑状态。innerTexttextContent兼容不同浏览器的文本内容获取方法。

3.2 保存表格行

保存表格行需要我们在点击“保存”按钮时,获取该行单元格中input的值,然后将该值赋值给单元格,同时将该单元格变为不可编辑状态。

函数代码如下:

function saveRow(row) {
  var currentRow = row.parentNode.parentNode;
  var cells = currentRow.getElementsByTagName('td');
  for (var i = 0; i < cells.length - 1; i++) {
    var cell = cells[i];
    var cellInput = cell.getElementsByTagName('input')[0];
    cell.innerHTML = cellInput.value;
  }
  row.style.display = 'none';
  currentRow.getElementsByClassName('editBtn')[0].style.display = 'inline-block';
}

保存操作的核心在于获取单元格中input的值,并将值赋值给单元格,同时将该单元格变为不可编辑状态。

3.3 删除表格行

删除表格行需要我们在点击“删除”按钮时,删除当前行。

函数代码如下:

function deleteRow(row) {
  var currentRow = row.parentNode.parentNode;
  currentRow.parentNode.removeChild(currentRow);
}

4. 示例展示

下面给出两个示例,分别为添加新行和编辑保存表格行:

4.1 添加新行

在点击“添加行”按钮时,将会在表格的最后一行添加一行空数据。

示例代码如下:

function addRow() {
  var table = document.getElementById('myTable');
  var rowCount = table.rows.length;
  var newRow = table.insertRow(rowCount);
  newRow.innerHTML = '<td><input type="text" name="name"></td>' + '<td><input type="text" name="age"></td>' + '<td><select name="gender"><option value="male">男</option><option value="female">女</option></select></td>' + '<td><input type="button" value="编辑" onclick="editRow(this)">' + '<input type="button" value="保存" onclick="saveRow(this)">' + '<input type="button" value="删除" onclick="deleteRow(this)"></td>';
  newRow.className = 'editableRow';
}

4.2 编辑保存表格行

在点击“编辑”按钮时,将会将该行数据变为可编辑状态,同时将“编辑”按钮变为“保存”按钮。在点击“保存”按钮时,将会将该行数据保存到表格中。

示例代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>表格编辑器</title>
  <style>
    table, th, td {
      border: 1px solid #333;
      border-collapse: collapse;
      text-align: center;
      padding: 5px;
    }

    .editableRow td input[type='text'], .editableRow td select {
      width: 80%;
    }

    .editableRow input[type='button'] {
      display: none;
    }
  </style>
</head>
<body>
  <table id="myTable">
    <thead>
      <tr>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>操作</th>
      </tr>
    </thead>
    <tbody>
      <tr class="editableRow">
        <td><input type="text" value="张三"></td>
        <td><input type="text" value="18"></td>
        <td>
          <select>
            <option value="male">男</option>
            <option value="female">女</option>
          </select>
        </td>
        <td>
          <input type="button" value="编辑" onclick="editRow(this)" class="editBtn">
          <input type="button" value="保存" onclick="saveRow(this)" class="saveBtn">
          <input type="button" value="删除" onclick="deleteRow(this)">
        </td>
      </tr>
      <tr class="editableRow">
        <td><input type="text" value="李四"></td>
        <td><input type="text" value="20"></td>
        <td>
          <select>
            <option value="male">男</option>
            <option value="female">女</option>
          </select>
        </td>
        <td>
          <input type="button" value="编辑" onclick="editRow(this)" class="editBtn">
          <input type="button" value="保存" onclick="saveRow(this)" class="saveBtn">
          <input type="button" value="删除" onclick="deleteRow(this)">
        </td>
      </tr>
    </tbody>
  </table>
  <input type="button" value="添加行" onclick="addRow()">
  <script>
    function editRow(row) {
      var currentRow = row.parentNode.parentNode;
      var cells = currentRow.getElementsByTagName('td');
      for (var i = 0; i < cells.length - 1; i++) {
        var cell = cells[i];
        var cellValue = cell.innerText || cell.textContent;
        cell.innerHTML = '<input type="text" value="' + cellValue + '">';
      }
      row.style.display = 'none';
      currentRow.getElementsByClassName('saveBtn')[0].style.display = 'inline-block';
    }

    function saveRow(row) {
      var currentRow = row.parentNode.parentNode;
      var cells = currentRow.getElementsByTagName('td');
      for (var i = 0; i < cells.length - 1; i++) {
        var cell = cells[i];
        var cellInput = cell.getElementsByTagName('input')[0];
        cell.innerHTML = cellInput.value;
      }
      row.style.display = 'none';
      currentRow.getElementsByClassName('editBtn')[0].style.display = 'inline-block';
    }

    function deleteRow(row) {
      var currentRow = row.parentNode.parentNode;
      currentRow.parentNode.removeChild(currentRow);
    }

    function addRow() {
      var table = document.getElementById('myTable');
      var rowCount = table.rows.length;
      var newRow = table.insertRow(rowCount);
      newRow.innerHTML = '<td><input type="text" name="name"></td>' + '<td><input type="text" name="age"></td>' + '<td><select name="gender"><option value="male">男</option><option value="female">女</option></select></td>' + '<td><input type="button" value="编辑" onclick="editRow(this)">' + '<input type="button" value="保存" onclick="saveRow(this)">' + '<input type="button" value="删除" onclick="deleteRow(this)"></td>';
      newRow.className = 'editableRow';
    }
  </script>
</body>
</html>

以上就是使用JavaScript实现表格编辑器的完整攻略,希望能对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用JavaScript实现表格编辑器(实例讲解) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS文本超出2行就隐藏并且显示省略号

    CSS提供了一个非常方便的属性text-overflow,可以用于超出指定行数的文本隐藏并显示省略号。 下面是一个完整的示例: <style> .text { width: 200px; overflow: hidden; display: -webkit-box; /* 为了兼容性,需要加上前缀 */ -webkit-line-clamp: 2…

    css 2023年6月10日
    00
  • jQuery实现根据滚动条位置加载相应内容功能

    当网页上某个区域的内容比较多,导致用户页面滚动增加时,我们可以通过jQuery实现根据滚动条位置加载相应内容的功能,以提升用户体验。具体实现步骤如下: Step 1:获取滚动条位置 使用jQuery的scroll()方法,当滚动条发生滚动时,触发回调函数。在回调函数中使用scrollTop()方法获取页面的滚动高度。 $(window).scroll(fun…

    css 2023年6月10日
    00
  • 利用CSS3的3D效果制作正方体

    制作3D正方体这个过程通常可以分为以下几个步骤: 1.确定一个容器,为3D场景提供空间,可以设定宽、高、以及透视效果的角度。 2.设置立方体的六个面,让它们呈现出正方形。 3.将六个面浮起来,让立方体看起来具有体积感。 下面将详细讲解如何实现以上的步骤,其中包括两个样例说明: 1.基础版3D正方体: HTML代码如下: <div class=&quot…

    css 2023年6月10日
    00
  • 浮动的div自适应居中显示的js代码

    首先要明确的是,实现“浮动的div自适应居中显示”的效果有多种方法,其中一种是使用JavaScript计算浮动div的位置并修改CSS样式来实现。下面是一个实现该效果的完整攻略,包含两个示例说明。 一、理解问题 首先,我们要清楚如何定义“浮动的div自适应居中显示”。具体来说,它应该符合以下要求: div元素是浮动的,也就是说它将脱离文档流并且没有固定位置。…

    css 2023年6月10日
    00
  • jQuery动画效果实现图片无缝连续滚动

    下面是详细的讲解“jQuery动画效果实现图片无缝连续滚动”的完整攻略。 1. 项目基础 我们将会使用jQuery来实现图片滚动效果。因此,为了确保我们的代码可以正常工作,我们需要确保以下内容已经准备就绪: 1.1. 引入 jQuery 首先,需要在 HTML 文件中引入 jQuery。保证你的项目中包含以下代码: <script src="…

    css 2023年6月10日
    00
  • 利用CSS控制SELECT中的OPTION是否不允许选

    实现这个需求主要涉及到CSS的伪类选择器和属性设置。 首先,我们需要明确的是,SELECT元素是由浏览器渲染的,因此我们需要针对其中的OPTION元素进行样式控制。 要实现禁止某些选项被选择,可以使用CSS的pointer-events属性。将pointer-events属性的值设置为none可以禁用元素的交互,包括鼠标事件和键盘事件。这样一来,即使用户点击…

    css 2023年6月9日
    00
  • Ajax Control Toolkit 34个服务器端控件第1/2页

    Ajax Control Toolkit 是一套基于 ASP.NET 的 AJAX 扩展控件库,该控件库扩展了 ASP.NET 的功能,提供了一些常用的应用程序控件,例如自动完成、模态窗口等等,大大提高了 Web 应用程序的用户体验。 在使用 Ajax Control Toolkit 之前,需要先将 Ajax Control Toolkit 下载下来并解压,…

    css 2023年6月10日
    00
  • 浅谈Webpack 持久化缓存实践

    浅谈Webpack 持久化缓存实践 前言 Webpack 是现代前端工程化不可或缺的重要工具。但是随着项目的复杂度增加,Webpack 的构建时间也会越来越长。为了优化构建时间,我们通常会启用持久化缓存(Persistent Cache)来避免重新构建。 本文将详细阐述 Webpack 持久化缓存实践中的一些细节和经验。 Webpack 持久化缓存如何提升构…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部