通过传递参数筛选 JQuery 数据表

Filter JQuery Datatable By Passing Parameter

我正在构建一个 ASP.Net MVC 5 网络应用程序,它使用 JQuery Datatables (1.10.4) 在我的一个 Razor 视图中显示表格数据。因为 table 只会显示最多 300 条记录,所有记录都会一次显示,即没有 Ajax/ JSon 用于根据需要提取数据。

我已使用此 https://datatables.net/examples/api/multi_filter_select.html 向某些数据 table 列添加下拉菜单以允许过滤。这很好用(见下面的代码)。

<script>
    $(document).ready(function () {


        $('#dataTables-example').dataTable({
            "columnDefs": [
                            { "width": "1%", "targets": 0, "orderable": false },
                            { "width": "5%", "targets": 1 },
                            { "width": "10%", "targets": 2 },
                            { "width": "5%", "targets": 3 },
                            { "width": "1%", "targets": 4 },
                            { "width": "1%", "targets": 5 },
                            { "width": "1%", "targets": 6 },
                            { "width": "1%", "targets": 7, "orderable": false }
                          ]
                          ,
            initComplete: function () {
                var api = this.api();

                api.columns().indexes().flatten().each(function (i) {
                    var column = api.column(i);

                    //Only show filter for these columns
                    if (i == 1 || i == 2 || i == 3) {

                        var select = $('<select style="width: 170px;"><option value="">Select</option></select>')
                    .appendTo($(column.footer()).empty())
                    .on('change', function () {
                        var val = $.fn.dataTable.util.escapeRegex(
                            $(this).val()
                        );

                        column
                            .search(val ? '^' + val + '$' : '', true, false)
                            .draw();
                    });

                    column.data().unique().sort().each(function (d, j) {
                        select.append('<option value="' + d + '">' + d + '</option>')
                    });

                    }

                });

            }
        });
    });
</script>

我的问题是,当页面加载时,我在查询字符串中传递了一个值 http://localhost:55437/Shift?value1=testValue,我希望使用该查询字符串值 (Value1) 并将其传递给其中一个下拉过滤器,以便Datatable 数据根据从查询字符串接收到的值自动过滤。这有意义吗?

如果是这样,有人可以帮我解决这个问题吗?

非常感谢。

如果我正确理解您的问题,这可能有助于解决您的问题。尝试

$('#dataTables-example').fnFilter('value1');

之后
$('#dataTables-example').dataTable({ your code... });

括号中的值 1 是您必须以 .net 格式写入的获取值。

我自己想出来了。我需要做的是检索查询字符串值,然后设置下拉值并重绘 table 数据。请参阅下面的代码,希望对其他人有所帮助。

<script>
    $(document).ready(function () {

        function getParameterByName(name) {
            name = name.replace(/[\[]/, "\[").replace(/[\]]/, "\]");
            var regex = new RegExp("[\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
            return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
        }

        var trust = getParameterByName('trust');
        //alert(trust);

        //$.fn.dataTable.ext.legacy.ajax = true;
        $('#dataTables-example').dataTable({
            "columnDefs": [
                            { "width": "1%", "targets": 0, "orderable": false },
                            { "width": "5%", "targets": 1 },
                            { "width": "10%", "targets": 2 },
                            { "width": "5%", "targets": 3 },
                            { "width": "1%", "targets": 4 },
                            { "width": "1%", "targets": 5 },
                            { "width": "1%", "targets": 6 },
                            { "width": "1%", "targets": 7, "orderable": false }
                          ]
                          ,
            initComplete: function () {
                var api = this.api();

                api.columns().indexes().flatten().each(function (i) {
                    var column = api.column(i);


                    if (i == 1 || i == 2 || i == 3) {
                        //alert("2");

                        var select = $('<select style="width: 170px;"><option value="">Select</option></select>')
                    .appendTo($(column.footer()).empty())
                    .on('change', function () {
                        var val = $.fn.dataTable.util.escapeRegex(
                            $(this).val()
                        );

                        column
                            .search(val ? '^' + val + '$' : '', true, false)
                            .draw();
                    });

                        column.data().unique().sort().each(function (d, j) {

                            if (i == 2) {
                                //Decode ampersand
                                var decoded = d.replace(/&amp;/g, '&');

                                if (decoded == trust) {
                                    select.append('<option value="' + d + '" selected>' + d + '</option>')

                                    column
                            .search(decoded ? '^' + decoded + '$' : '', true, false)
                            .draw();

                                }
                                else {
                                    select.append('<option value="' + d + '">' + d + '</option>')
                                }

                            }
                            else {
                                select.append('<option value="' + d + '">' + d + '</option>')
                            }

                        });

                    }

                });

            }
        });

    });
</script>