【发布时间】:2019-01-11 11:37:07
【问题描述】:
我是 Jquery 的新手。我有一个数据表,其中每个单独的行都可以展开/折叠,以在单击父行时将子项显示为包含更多行的动态表。单独单击行时,我的代码可以轻松运行。
代码如下:
//expand or collapse any case
$(".dataTables_scrollBody").find(".details-control").on("click", function () {
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
} else {
// Open this row
var td = $(this).parent('td');
row.child(format(row)).show()
tr.addClass('shown');
}
});
这是我的 format() 函数:
function format(row) {
//we already stored formatted CKEY info on the formattedCKEY node. So get it from the selected case row
var formattedCKEY = row.data()[1];
var cases = $(soapGetResultslist.responseXml).find("formattedCKEY:contains(" + formattedCKEY + ")").prevAll("issue");
var issuetable = '<table id="IssuesTable" class="stripe nowrap" style="position:relative; top:0px; width:95%;">' +
'<thead>' +
'<tr>' +
'<th>Issue ID</th>' +
'<th>Subject</th>' +
'<thead>' +
'</tr>' + '<tbody>' + '<tr>';
$.each(cases, function () {
issuetable = issuetable + '<tr>' + '<td>' + $(this).find("IKEY").text() + '</td>' +
'<td>' + $(this).find("SUBJECT").text() + '</td>' + '</tr>'
});
issuetable = issuetable + '</tbody>' + '</tr>' + '</table>';
return issuetable;
}
在上面的函数中soapGetResultslist.responseXml只是xml响应。
现在我想只使用一个按钮 +/- 一次展开/折叠所有行,如下所示:
<td style="width:135px;" ><button id="expand-collapse-button" >+/-</button></td>
我添加了以下 jquery 代码来一次展开/折叠:
// Handle click on "+/-(expand all or collapse all)"
$("#expand-collapse-button").click( function() {
// Expand row details
table.rows(':not(.parent)').nodes().to$().find('td:first-child').trigger('click');
});
只有当任何一行之前没有单独展开/折叠时,我才能一次展开/折叠所有行。
例如:
如果一行被单独展开(比如说第一行)一次,那么如果我们尝试通过点击按钮+/- 一次展开所有行,除了第一行(第一行)之外的所有行都会被展开这次第一行将按预期折叠)。
有人可以分享他们关于如何克服这种情况的想法/代码吗?
如果我的问题不清楚,请告诉我。
【问题讨论】:
标签: javascript jquery datatables