当前位置: 首页 > 知识库问答 >
问题:

用JavaScript从表单元格中提取数据

微生新翰
2023-03-14

我正在尝试从表中提取特定的信息,基于哪个单元格被单击。到目前为止,我已经创建了一个可以在单击时工作的函数。问题是它总是返回第一个单元格行的值。

HTML:

<table class="table table-striped">
            <tr class="bg-info" style="text-align: center">
                <th class="service" data-column="id" data-order="desc">ServiceID &#9660</th>
                <th class="service" data-column="visit.id" data-order="desc">VisitID &#9660</th>
                <th class="service" data-column="visit.vehicle.licensePlate" data-order="desc">License Plate &#9660</th>
                <th class="service" data-column="visit.service.name" data-order="desc">Repair Order &#9660</th>
                <th class="service" data-column="visit.service.name" data-order="desc">Repair Status &#9660</th>
                <th class="service" data-column="visit.service.name" data-order="desc">Repair End Date &#9660</th>
            </tr>
            <tbody id="serviceOrdersTable">
            </tbody>
        </table>

Javascript that builds the table from Ajax Request:
function buildServiceOrdersTable(data) {
        var table = document.getElementById('serviceOrdersTable')
        table.innerHTML = ''
        var text = "To Be Implemented"
        for (var i = 0; i < data.length; i++) {
            var row = `<tr onclick="clickableRow()" id="test14">
                    <td>${data[i].id}</td>
                    <td>${data[i].visit.id}</td>
                    <td>${data[i].visit.vehicle.licensePlate}</td>
                    <td onclick="clickableRow()" id="test10">${data[i].service.name}</td>
                    <td>${text}</td>
                    <td>${text}</td>
                    </tr>`
            table.innerHTML += row
        }
    }

如您所见,我尝试了和来启用提取槽ID。这是单击时调用的函数。

function clickableRow(){
        alert("test called");
        var serviceID = document.getElementById('test14').innerHTML
        var test10 = document.getElementById('test10').innerHTML
        console.log(serviceID);
        console.log(test10);
        alert("serviceID :: " + serviceID);
    }

和总是从表的第一行返回值,即使我单击第二行、第三行、第四行等。

我如何声明我想要的信息不仅来自第一个,而且来自我单击的行。提前谢谢!

共有1个答案

邢洋
2023-03-14

您遇到的主要问题是在循环中创建的内容中重复了id属性。这是无效的HTML,因为id必须在DOM中唯一。

要解决此问题,您可以使用tbody上的委托事件处理程序来处理对其中tr的单击。从那里,您可以遍历DOM以提取相关信息。

由于您已经用jQuery标记了这个问题,下面是一个使用该框架的示例:

null

let $tbody = $('#serviceOrdersTable')

$tbody.on('click', 'tr', e => {
  let $tr = $(e.currentTarget);
  let rowHtml = $tr.html();
  let serviceName = $tr.find('.test10').text();
  
  console.log(rowHtml);
  console.log(serviceName);
});


function buildServiceOrdersTable(data) {
  var text = "To Be Implemented";
  let html = data.map(item => `<tr>
    <td>${item.id}</td>
    <td>${item.visit.id}</td>
    <td>${item.visit.vehicle.licensePlate}</td>
    <td class="test10">${item.service.name}</td>
    <td>${text}</td>
    <td>${text}</td>
  </tr>`).join('');
  $tbody.html(html);
}

// note data has been minified for brevity
buildServiceOrdersTable([{id: 1,visit: {id: 'visit1',vehicle: {licensePlate: 'foobar1'}},service: {name: 'service1'}}, {id: 2,visit: {id: 'visit2',vehicle: {licensePlate: 'foobar2'}},service: {name: 'service2'}}]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table table-striped">
  <thead>
    <tr class="bg-info" style="text-align: center">
      <th class="service" data-column="id" data-order="desc">ServiceID &#9660</th>
      <th class="service" data-column="visit.id" data-order="desc">VisitID &#9660</th>
      <th class="service" data-column="visit.vehicle.licensePlate" data-order="desc">License Plate &#9660</th>
      <th class="service" data-column="visit.service.name" data-order="desc">Repair Order &#9660</th>
      <th class="service" data-column="visit.service.name" data-order="desc">Repair Status &#9660</th>
      <th class="service" data-column="visit.service.name" data-order="desc">Repair End Date &#9660</th>
    </tr>
  </thead>
  <tbody id="serviceOrdersTable"></tbody>
</table>
 类似资料:
  • 有人知道从工作簿中的每个工作表中提取某个单元格值的命令吗?或者我可以写一个简单的宏?

  • 我正在开发一个基于Web的应用程序,需要从Excel 97-2003(. xls)电子表格中提取数据,该电子表格在单个工作表上有几个小表。 我目前正在尝试使用以下代码打开和阅读工作表: 问题是它会拖拽整个工作表,而所有的数值都是空白的。我认为这不是我试图构建的应用程序所需的代码。 我一直在查看以下代码: 根据如何读取单个Excel单元格值,但我相信,由于没有提及,它可能不会用于基于web的使用。n

  • 在hbase中,我有很多列:name,city,... 不是所有列都有值(例如,有些行只能有'name') 我想提取一行中的所有列+列的时间戳(按特定顺序),如果值为null,我想返回空字符串。 我面临的问题是,我必须通过'family'和'qualifier'访问中的列(我不能通过的索引访问,因为空值被跳过)

  • 我正在尝试编写一个方法,该方法接受整数n,并返回一个新列表,其中包含当前对象list的前n个元素,其顺序与它们在当前列表中出现的顺序相同。 我的解决方案如下: 我知道该方法从声明一个新列表开始。从那里,它声明了“旅行”节点,用于在当前列表中迭代。此外,我相信“最后”只是为了跟踪当前对象中的最后一个节点。 我也理解while循环的第一部分;然而,我不明白为什么有条件 是在场的。当代码第一次执行时,节

  • 我找不到提取每个单元格中文本的方法