1

我想问是否有办法在初始化中过滤数据表服务器端?

我试过这样的代码:

function listTable(arg1, param2, value3) {
var searchTbl = $("#tblsearch").dataTable({
                    "bRetrieve": true,
                    "bProcessing": true,
                    "bServerSide": true,                   
                    "sAjaxSource": "server-side.php",
                    "bPaginate": false,
                    "bLengthChange": false,
                    "bFilter": false,
                    "bSort": true,
                    "bInfo": false,
                    "bAutoWidth": false
                });

searchTbl.filter(arg1, param2, value3);
searchTbl.fnDraw();
}

但它没有用。

4

2 回答 2

5

致敬布罗德,

据我了解。您正在尝试从您的服务器端server-side.php脚本过滤您的记录以显示在 jquery dataTables 上。

仅当您可以提供server-side.php脚本示例时,它才会起作用。

但是,为了让您更好地理解和输入,您所需的过滤器将全部取决于在服务器端脚本上执行的数据库查询。例如:

"SELECT column_1, column_2, column_3WHERE column_1= 'some value' AND column_2LIKE '%another value%' GROUP BY column_3"

一个很好的例子在这个链接中:DataTables server-side processing example

您可以在哪里修改此部分:

/* Individual column filtering */
    for ( $i=0 ; $i<count($aColumns) ; $i++ )
    {
        if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
        {
            if ( $sWhere == "" )
            {
                $sWhere = "WHERE ";
            }
            else
            {
                $sWhere .= " AND ";
            }
            $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
        }
    }

并且以这种方式,将构成要传递给 jquery dataTable 并由 jquery dataTable 解析的 json 输出的数据将被理想地过滤。

于 2013-10-24T17:18:08.583 回答
1

您是否正在尝试搜索表中的数据?如果是这样,下面是部分

function doSearch() {
        var searchText = document.getElementById('searchTerm').value;
        var targetTable = document.getElementById('mytable');
        var targetTableColCount;

        //Loop through table rows
        for (var rowIndex = 0; rowIndex < targetTable.rows.length; rowIndex++) {
            var rowData = '';

            //Get column count from header row
            if (rowIndex == 0) {
                targetTableColCount = targetTable.rows.item(rowIndex).cells.length;
                continue; //do not execute further code for header row.
            }

            //Process data rows. (rowIndex >= 1)
            for (var colIndex = 0; colIndex < targetTableColCount; colIndex++) {
                var cellText = '';

                if (navigator.appName == 'Microsoft Internet Explorer')
                    cellText = targetTable.rows.item(rowIndex).cells.item(colIndex).innerText;
                else
                    cellText = targetTable.rows.item(rowIndex).cells.item(colIndex).textContent;

                rowData += cellText;

            }

            //If search term is not found in row data
            //then hide the row, else show
            if (rowData.indexOf(searchText) == -1)
                targetTable.rows.item(rowIndex).style.display = 'none';
            else
                targetTable.rows.item(rowIndex).style.display = 'table-row';
        }
    }
于 2013-09-02T06:38:58.097 回答