数据表中的columnfilterwidget过滤器排序问题

columnfilterwidget in Datatables Filter sort issue

本文关键字:排序 问题 过滤器 columnfilterwidget 数据表      更新时间:2023-09-26

我使用的是带有Columnfilterwidget的数据表1.10,

我面临的问题是我的价值观是0, 1.44, 10100100, 20日

20.13

现在Columnfilterwidget正在按字母顺序对这些值排序

0
1.44
10
100
100.00
20
20.13

但是我想用数字过滤

0
1.44
10
20
20.13
100
100.00

,

这是我到目前为止所尝试的

在Columnfilterwidget.js文件

          ColumnFilterWidget.prototype.fnDraw = function() {
                    var widget = this;
                    var oDistinctOptions = {};
                    var aDistinctOptions = [];
                    var aData;
                    if ( widget.asFilters.length === 0 ) {
                            // Find distinct column values
                            aData = widget.oDataTable.fnGetColumnData( widget.iColumn );
                            $.each( aData, function( i, sValue ) {
                                    var asValues = widget.sSeparator ? sValue.split( new RegExp( widget.sSeparator ) ) : [ sValue ];
                                    $.each( asValues, function( j, sOption ) {
                                            if ( !oDistinctOptions.hasOwnProperty( sOption ) ) {
                                                    oDistinctOptions[sOption] = true;
                                                    aDistinctOptions.push( sOption );
                                            }
                                    } );
                            } );
                            // Build the menu
                            widget.$Select.empty().append( $( '<option></option>' ).attr( 'value', '' ).text( widget.oColumn.sTitle ) );
//                             aDistinctOptions.sort();
                          aDistinctOptions.sort(function(a,b){return a - b});
                            $.each( aDistinctOptions, function( i, sOption ) {
                                    var sText;
                                    if(sOption==='')
                                            sText = $( '<div> (Blank )</div>' ).text();
                                    else
                                            sText = $( '<div>' + sOption + '</div>' ).text();
                                    widget.$Select.append( $( '<option></option>' ).attr( 'value', sOption ).text( sText ) );
                            } );
                            if ( aDistinctOptions.length > 1 ) {
                                    // Enable the menu
                                    widget.$Select.attr( 'disabled', false );
                            } else {
                                    // One option is not a useful menu, disable it
                                    widget.$Select.attr( 'disabled', true );
                            }
                    }
            };

我将排序函数更改为数字,但我如何识别即将到来的值是数字,我也检查了sValue值是字符串,所以是否有任何方法可以定义我想要数字的列。

还尝试设置options oColumnFilterWidgets,但仍然不起作用。

oColumnFilterWidgets: {
        "aiExclude": [ 0, 1, 10 ],
      "aoColumnDefs": [
//                     { "bSort": false, "sSeparator": " / ", "aiTargets": [ 5 ] },
                    { "fnSort": function( a, b ) { return a-b; }, "aiTargets": [6] },
      {"sType": "numeric", "aiTargets":[6]}
                  ]
        },

我做错了什么?

感谢cyberhobo修复此问题。

[https://github.com/cyberhobo/ColumnFilterWidgets/commit/01efef439c557154bad3d61aa00d47285b6d21d6 diff - 72250 - e81389e20ff2fa22ff884fcb6aar309] [1]

只是做了他在插件和

中突出显示的更改
               "oColumnFilterWidgets": {
                  "aoColumnDefs": [
                     { "bSort": false, "sSeparator": " / ", "aiTargets": [ 2 ] },
                     { "fnSort": function( a, b ) { return a-b; }, "aiTargets": [ 3 ] }
                  ]
               }

希望这对你有帮助。