【发布时间】:2015-07-17 03:45:47
【问题描述】:
所以我有这个由 php 动态生成的数据表。但是一旦它被加载,我不想重新加载整个表,因为我正在做的只有一个小的 javascript if 语句。当您按下按钮时,我会比较我的 tr 上的数据属性。如果不合适,我想隐藏它们,否则,我想显示它们。所以这是我到目前为止所尝试的。
HTML
<div style="margin: 30px 0;">
<button class="btn btn-primary" id="myClientButton">Voir mes clients seulements</button>
</div>
<table id="advancedSearchTable">
<thead>
<tr>
<th>Name</th>
<th>Phone</th>
<th>Email</th>
<th>Subject</th>
<th>Date</th>
<th>Profile</th>
</tr>
</thead>
<tbody>
{% for entity in entities %}
<tr data-user="{{ entity.user.id }}" class="values">
<td>{{ entity }}</td>
<td>{{ entity.mainphone }}</td>
<td>{{ entity.email }}</td>
<td>{{ entity.tagline }}</td>
<td>{{ entity.createdDate|date('d-m-Y') }}</td>
<td><a href="{{ path('clients_show', {id: entity.id}) }}" class="btn btn-success"><span class="glyphicon glyphicon-eye-open"></span></a></td>
</tr>
{% endfor %}
</tbody>
</table>
循环是在 Symfony 2 中制作的(使用 Twig 模板,如果您不理解它并不重要),您所需要了解的是“data-user”上的属性是由 PHP 创建的,并且我的数据库的每个条目都在这个循环中。
然后,在 jQuery 中我有这个:
<script>
$('#advancedSearchTable').DataTable(
{
"language": {
"url": "//cdn.datatables.net/plug- ins/9dcbecd42ad/i18n/French.json"
},
responsive: true
});
$('#myClientButton').on('click', function(){
if ($(this).hasClass('active')){
$(this).removeClass('active');
$('tr.values').show();
}
else{
$(this).addClass('active');
$('tr.values').each(function(){
if ($(this).attr('data-user') != 5){
$(this).hide();
}
});
}
});
</script>
效果很好。唯一的问题是 DataTable 并没有“替换自己”。因此,例如,如果它有 25 个页面,它会保留 25 个页面,当您按下“下一个表格页面”按钮时,它会刷新“表格页面”并且不再隐藏内容。我搜索了很多,但我找不到方法。我真的不想为此使用ajax,因为它只需要用值填充一次,然后它只需要根据按钮是否处于活动状态来隐藏或显示......甚至可以使用这个jQuery插件?
提前致谢。
【问题讨论】:
-
我认为这是因为您隐藏了客户端元素,并且当您对数据表进行分页时,它会检索一组新数据,该数据集不知道您之前隐藏的内容。实际上,您正在尝试将服务器端数据与客户端过滤一起使用。
-
不,我正在使用客户端隐藏。它显然不起作用,因为我隐藏的数据不是在数据表中计算的。例如,我隐藏了一半的行,但它仍然说“显示 150 个项目中的 20 个”(例如)......我可以刷新数据表吗?
-
如果您刷新数据表,您的行将再次显示,因为基础数据没有更改。
标签: javascript jquery html symfony datatables