javascript - 数据表根据按钮单击事件隐藏和显示行

标签 javascript jquery html symfony datatables

所以我有这个由 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 并没有“ self 替换”。因此,例如,如果它有 25 页,它会保留 25 页,当您按下“下一个表格页面”按钮时,它会刷新“表格页面”并且不再隐藏任何内容。我搜索了很多,但找不到方法。我真的不想为此使用 ajax,因为它只需要用值填充一次,然后它只需要隐藏或显示取决于按钮是否处于事件状态......是否有可能使用这个 jQuery插件?

提前致谢。

最佳答案

是的,这确实是可能的,但您需要一种不同的方法。使用 jQuery 而不是通过 dataTables 本身隐藏行通常是一个坏主意,因为 dataTables 不知道对原始 <table> 所做的更改。 DOM 中的元素。没有“代码中的某处另一个脚本有隐藏的行”事件数据表可以 Hook 。这就是为什么 dataTables 似乎“忘记”了更改,它根本不知道这些更改,并且 dataTables 内部保持不变。

所以使用 custom filter反而。以下一小段代码可以满足您的需求 - 隐藏所有具有 data-user 的行属性不同于 5 .它适用于排序和分页。最后一段代码是一个重置按钮的例子。

$("#hide").click(function() {
    $.fn.dataTable.ext.search.push(
       function(settings, data, dataIndex) {
          return $(table.row(dataIndex).node()).attr('data-user') == 5;
       }
    );
    table.draw();
});    
$("#reset").click(function() {
    $.fn.dataTable.ext.search.pop();
    table.draw();
});

演示 -> http://jsfiddle.net/d5hre2ux/

关于javascript - 数据表根据按钮单击事件隐藏和显示行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30086341/

相关文章:

javascript - 正则表达式匹配上的Nodejs Socket io

javascript - 仅为特定值计算值

javascript - jQuery:绑定(bind) "CTRL+A"仅选择特定区域

javascript - jqplot 在 IE7 中运行不佳

javascript - Chrome 应用程序/内联脚本

html - 我想在所有内容图像上应用 css class(bootstrap) .img-responsive

javascript - e.stopPropagation 不工作

javascript - 将 JavaScript 变量添加到模型中

javascript - 在 $.when 中使用动态变量

javascript - 删除禁用字段上的括号