jquery - 为什么不能显示数据表上的子行?
问题描述
我想要的是,如果单击每一行,它会自行扩展,显示更多详细信息(称为子行)。我尝试按照该链接上的教程进行操作,这是我的代码:
<!DOCTYPE html>
<html lang="en">
<style>
.elementID {
color: #dc3545;
/* text-shadow: 1px 1px 1px #ccc; */
font-size: 1.5em;
}
td.details-control {
background: url('../public/img/details_open.png') no-repeat center center;
cursor: pointer;
}
tr.details td.details-control {
background: url('../public/img/details_close.png') no-repeat center center;
}
</style>
<body class="hold-transition sidebar-mini" id="Identity-check">
<div class="wrapper">
<div class ="row">
<div class="col-md-12">
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header bg-danger back-ops-okp2p">
<h3 class="card-title"><b>History Log</b></h3>
</div>
<div class="card-body">
<hr style="margin-top:20px;">
<table id="history_log" class="display table table-hover table-striped table-bordered" data-toggle="collapse" data-target="#collapsible-detail" aria-expanded="true" aria-controls="collapsible-detail" style="width:100%">
<thead>
<tr>
<th>CRON DATE</th>
<th>CREATED AT</th>
<th>UPDATED AT</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</body>
</html>
<script type="text/javascript">
function showDetail( d ) {
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Full name:</td>'+
'<td>Steve Johnson</td>'+
'</tr>'+
'<tr>'+
'<td>Extension number:</td>'+
'<td>123456</td>'+
'</tr>'+
'<tr>'+
'<td>Extra info:</td>'+
'<td>And any further details here (images etc)...</td>'+
'</tr>'+
'</table>';
}
$(document.ready).ready(function(){
var dTable = $('#history_log').DataTable({
lengthChange: true,
fixedHeader: true,
searching: true,
ordering: true,
serverSide: true,
processing: true,
ajax: {
url: "{{ route('get_all_log') }}",
data: ''
},
paging: true,
info: true,
autoWidth: true,
scrollY: 300,
scrollX: true,
columns:
[
/*
{
className: 'details-control',
orderable: false,
defaultContent: '<i class = "glyphicon glyphicon-plus-sign"> </ i>',
},*/
{ data: "date_cron" },
{data: "created_at" },
{data: "updated_at" }]
});
$('#history_log tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = table.row( tr );
if ( row.child.isShown() ) {
row.child.hide();
tr.removeClass('shown');
}
else {
row.child(showDetail()).show();
tr.addClass('shown');
}
} );
});
</script>
请注意评论部分。如果我取消注释,我会收到此错误:
未捕获的类型错误:无法读取未定义的属性“样式”
哪个指向 var dTable = $('#history_log').DataTable({
。当然,没有用于显示 +/- 图标的附加列。
如何解决这个问题?
解决方案
以下是关于我所做更改的一些说明。进行这些更改后,显示/隐藏逻辑将起作用。
1 示例 JSON 不是有效的 JSON。它在几个地方缺少双引号和逗号。
这是清理后的 JSON:
{
"draw": 1,
"recordsTotal": 2,
"recordsFiltered": 2,
"data": [
{
"date_cron": "20210318",
"created_at": "2021-03-18 17:08:31",
"updated_at": "2021-03-18 17:08:31",
"detail_1": "aaaaa",
"detail_2": "bbbbb",
"detail_3": "ccccc",
"detail_4": "ddddd"
},
{
"date_cron": "20210319",
"created_at": "2021-03-19 00:00:09",
"updated_at": "2021-03-19 00:00:09",
"detail_1": "eeeee",
"detail_2": "fffff",
"detail_3": "ggggg",
"detail_4": "hhhhh"
}
]
}
2 DataTable 被分配给一个变量dTable
,但在代码中,它没有被使用。代码指的是table
:
var row = table.row( tr );
我改变了这些以保持一致。
3 您的 DataTable 预计 HTML 表中有 4 列:屏幕截图中的 3 列,再加上折叠/展开列中的 1 列。您的 HTML 表只明确定义了 3 列,所以我又添加了 1 列:
<thead>
<tr>
<th></th>
<th>CRON DATE</th>
<th>CREATED AT</th>
<th>UPDATED AT</th>
</tr>
</thead>
现在,您的注释掉的逻辑可以在某个地方放置其输出。
推荐阅读
- c++ - 使用 openssl 编译代码时出现错误 undefined reference to `SSL_new'
- ruby-on-rails - 如何在循环中选择性地从数组中删除元素并输出回字符串
- python - 赋值前引用的 django 局部变量 't'
- node.js - How can I configure my node js project with admin LTE template?
- python - 将字典列表转换为 numpy 数组
- json - Swift - How to assign URLSession.dataTask(with:) decoded data to an external variable?
- apache-kafka - what happens if a replica leader in kafka dies after committing a message but before sending Highwater mark to ISR replicas?
- python - how to scrape all the pages on a real estate website using pyton?
- android - In Android Studio XML source code, if I reference something by writing "@color/primaryColor", would it only look for a class named "color"?
- sql - retrieve data from the table where only those defects are included on which the progress is not updated for more than 1 hour