【问题标题】:DataTables columnFilter text-range searchDataTables columnFilter 文本范围搜索
【发布时间】:2015-09-15 22:01:59
【问题描述】:

这里是columnFilter number-range filter的代码:

   function fnCreateRangeInput(oTable) {

        //var currentFilter = oTable.fnSettings().aoPreSearchCols[i].sSearch;
        th.html(_fnRangeLabelPart(0));
        var sFromId = oTable.attr("id") + '_range_from_' + i;
        var from = $('<input type="text" class="number_range_filter form-control" id="' + sFromId + '" rel="' + i + '"/>');
        th.append(from);
        th.append(_fnRangeLabelPart(1));
        var sToId = oTable.attr("id") + '_range_to_' + i;
        var to = $('<input type="text" class="number_range_filter form-control" id="' + sToId + '" rel="' + i + '"/>');
        th.append(to);
        th.append(_fnRangeLabelPart(2));
        th.wrapInner('<span class="filter_column filter_number_range form-control" />');
        var index = i;
        aiCustomSearch_Indexes.push(i);



        //------------start range filtering function


        /*  Custom filtering function which will filter data in column four between two values
        *   Author:     Allan Jardine, Modified by Jovan Popovic
        */
        //$.fn.dataTableExt.afnFiltering.push(
        oTable.dataTableExt.afnFiltering.push(
        function (oSettings, aData, iDataIndex) {
            if (oTable.attr("id") != oSettings.sTableId)
                return true;
            // Try to handle missing nodes more gracefully
            if (document.getElementById(sFromId) == null)
                return true;
            var iMin = document.getElementById(sFromId).value * 1;
            var iMax = document.getElementById(sToId).value * 1;
            var iValue = aData[_fnColumnIndex(index)] == "-" ? 0 : aData[_fnColumnIndex(index)] * 1;
            if (iMin == "" && iMax == "") {
                return true;
            }
            else if (iMin == "" && iValue <= iMax) {
                return true;
            }
            else if (iMin <= iValue && "" == iMax) {
                return true;
            }
            else if (iMin <= iValue && iValue <= iMax) {
                return true;
            }
            return false;
        }
    );
        //------------end range filtering function



        $('#' + sFromId + ',#' + sToId, th).keyup(function () {

            var iMin = document.getElementById(sFromId).value * 1;
            var iMax = document.getElementById(sToId).value * 1;
            if (iMin != 0 && iMax != 0 && iMin > iMax)
                return;

            oTable.fnDraw();
            fnOnFiltered();
        });


    }

我如何编辑它以便它过滤的不是数字范围而是文本范围?就像我们说在 sql 中做的事情

在“BC-01-01”和“BC-06-29”之间选择*来自animalBIRTH_CODE

如果用户输入

发件人:BC-01-01 收件人:BC-06-29

【问题讨论】:

    标签: javascript jquery filter datatables


    【解决方案1】:

    过滤是在服务器还是客户端进行?

    如果是客户端,您希望过滤功能最终得到您可以正确排序的内容。因此,如果您愿意,可以去掉 BC-s 并 parseInt 数字...例如

    var bcInt = parseInt(data.replace(/\D/g, ''), 10);
    

    然后你需要遍历每一行并检查它是否与你给它的范围相匹配......我认为这应该可行。基本上,您需要获取整数并根据您的范围检查它们。此外,该函数不包含该范围,因此我在创建的 JSFiddle 中对其进行了更改以说明我的意思。

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2017-06-19
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多