我正在尝试从表中提取特定的信息,基于哪个单元格被单击。到目前为止,我已经创建了一个可以在单击时工作的函数。问题是它总是返回第一个单元格行的值。
HTML:
<table class="table table-striped">
<tr class="bg-info" style="text-align: center">
<th class="service" data-column="id" data-order="desc">ServiceID ▼</th>
<th class="service" data-column="visit.id" data-order="desc">VisitID ▼</th>
<th class="service" data-column="visit.vehicle.licensePlate" data-order="desc">License Plate ▼</th>
<th class="service" data-column="visit.service.name" data-order="desc">Repair Order ▼</th>
<th class="service" data-column="visit.service.name" data-order="desc">Repair Status ▼</th>
<th class="service" data-column="visit.service.name" data-order="desc">Repair End Date ▼</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);
}
和总是从表的第一行返回值,即使我单击第二行、第三行、第四行等。
我如何声明我想要的信息不仅来自第一个,而且来自我单击的行。提前谢谢!
您遇到的主要问题是在循环中创建的内容中重复了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 ▼</th>
<th class="service" data-column="visit.id" data-order="desc">VisitID ▼</th>
<th class="service" data-column="visit.vehicle.licensePlate" data-order="desc">License Plate ▼</th>
<th class="service" data-column="visit.service.name" data-order="desc">Repair Order ▼</th>
<th class="service" data-column="visit.service.name" data-order="desc">Repair Status ▼</th>
<th class="service" data-column="visit.service.name" data-order="desc">Repair End Date ▼</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循环的第一部分;然而,我不明白为什么有条件 是在场的。当代码第一次执行时,节
我找不到提取每个单元格中文本的方法