如何在html的行之间折叠/展开数据
How to collapse/expand data between rows in html
我有这样的需求,我必须像这样首先显示数据,对于每一行展开/折叠按钮应该显示。
工作数据
JobId JobName Descriptipn Type
-------------------------------------------
(+)(-) 1 A ABC Type1
(+)(-) 2 B ABC Type2
如果我单击扩展按钮,那么ajax方法将被调用并从DB加载作业及其相关数据。现在选中的职位数据应该显示在job1区域,这意味着,Job1行应该展开,job2,job3....约翰应该和以前一样。
如果我点击了job2,那么job1应该是折叠的,而job2应该是展开的。
我能够在上面显示一个表,但我无法实现这个展开/折叠功能。
所选作业的数据为大数据,大约有3,4个表。如此大的数据如何显示?
当我在谷歌中发现不建议在tr标签中使用div标签。
我的代码来了
<table class="data">
<thead>
<tr>
<th onclick="javascript:void(0);"><bean:message key="jsp.sp.jobs.jobData.jobNumber"/></th>
<th onclick="javascript:void(0);"><bean:message key="jsp.sp.jobs.jobData.jobName"/></th>
<th onclick="javascript:void(0);"><bean:message key="jsp.sp.jobs.jobData.jobDescription"/></th>
<th onclick="javascript:void(0);"><bean:message key="jsp.sp.jobs.jobData.jobType"/></th>
</tr>
</thead>
<% int i = 1; %>
<tbody>
<logic:iterate id="job" name="jobListe" type="com.abc.model.sp.job.JobVO">
<bean:define id="pk" name="job" property="primaryKey"/>
<bean:define id="rowClass">
<%=job.equals(serviceProtokollDRS.getSelectedJob()) ?
"mark" : Globalerie.EVEN_OR_ODD[i]%>
</bean:define>
<tr class="<bean:write name="rowClass"/>" id="<bean:write name="pk"/>"
onclick="javascript:Job.select('<bean:write name="pk"/>');">
<td><bean:write name="job" property="jobNummer"/></td>
<td><bean:write name="job" property="jobName"/></td>
<td><bean:write name="job" property="desc"/></td>
<td><bean:write name="job" property="type"/></td>
</tr>
<% i = 1 -i; %>
</logic:iterate>
</tbody>
</table>
他们没有使用jquery,只有javascript。
我将在每行下面创建一行,并使用div来保存展开的数据(使用colspan填充表的宽度),然后在该单元格内构建内容。跟踪当前展开的单元格元素,这将允许您在扩展另一个单元格元素时轻松删除它。
这不是最干净的解决方案,但是如果没有像jQuery这样的库,你就没有很多选择。
var expanded = null;
expand = function(target, jobId) {
// retrieve data for jobId
if (expanded) {
expanded.parentNode.removeChild(expanded);
}
var dataRow = target.parentNode.parentNode.nextElementSibling,
dataCol = dataRow.firstElementChild.nextElementSibling;
appendData(dataCol, jobId);
};
collapse = function(target) {
if (expanded) {
var dataRow = target.parentNode.parentNode.nextElementSibling;
if (expanded.parentNode.parentNode === dataRow) {
expanded.parentNode.removeChild(expanded);
expanded = null;
}
}
};
var appendData = function(cell, jobId) {
var dataTable = document.createElement('TABLE'),
tr = document.createElement('TR'),
td = document.createElement('TD');
var t = document.createTextNode("Job data for " + jobId);
td.appendChild(t);
tr.appendChild(td);
dataTable.appendChild(tr);
cell.appendChild(dataTable);
expanded = dataTable;
}
th, td {
padding: 5px;
}
.actionCol a {
text-decoration: initial;
}
td table {
border: 1px solid black;
width: 100%;
}
<table class="table">
<thead class="header">
<th class="actionCol">
<!-- empty for header -->
</th>
<th class="colHeader">
Job ID
</th>
<th class="colHeader">
Job Name
</th>
<th class="colHeader">
Job Description
</th>
</thead>
<tr class="row">
<td class="actionCol">
<a href="javascript:void(0)" onclick="expand(this, 'j-1');">+</a> |
<a href="javascript:void(0)" onclick="collapse(this);">-</a>
</td>
<td class="colCell">
j-1
</td>
<td class="colCell">
Job 1
</td>
<td class="colCell">
This is the first job
</td>
</tr>
<tr class="data"><td></td><td colspan="3"></td></tr>
<tr class="row">
<td class="actionCol">
<a href="javascript:void(0)" onclick="expand(this, 'j-2');">+</a> |
<a href="javascript:void(0)" onclick="collapse(this);">-</a>
</td>
<td class="colCell">
j-2
</td>
<td class="colCell">
Job 2
</td>
<td class="colCell">
This is the second job
</td>
</tr>
<tr class="data"><td></td><td colspan="3"></td></tr>
</table>
相关文章:
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- ASP.Net VB - 显示数据折叠样式
- 引导程序 3 折叠面板中的 Jquery 数据表响应插件
- d3.js强制可折叠图-输入数据是对象数组
- 如何删除 jquery 可折叠数据角色=“可折叠”
- 从 CSV 数据创建 D3.js 可折叠树
- 数据表 - 展开和折叠嵌套行时出现问题
- 我是否可以在 Bootstrap 3 中为折叠手风琴指定一个相对的“数据目标”,同时保留“折叠其他”功能
- 具有非树数据的可折叠 D3 力定向图
- 使用引导选项卡窗格和折叠项的数据绑定错误
- Bootstrap 3可折叠面板,没有id或数据
- 在数据表中折叠表头会破坏我的表格式
- 展开/折叠树数据
- jqGrid Treegrid在动态加载数据后不展开和折叠行
- Ng-Grid将在数据刷新后折叠行,如何防止这种情况
- 如何在html的行之间折叠/展开数据
- 禁用数据切换元素中的链接折叠
- 来自php的Ajax响应不会将接收到的数据显示为可折叠的- jquery移动