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

时间:2014-06-03 15:14:13

标签: javascript jquery arrays sorting jquery-datatables

我正在使用DataTables 1.10和Columnfilterwidget,

我面临的问题是 我有价值观 0,1.44,10,100,100.00,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 );
                            }
                    }
            };

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

还尝试设置选项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]}
                  ]

        },

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

感谢cyberhobo解决了这个问题。

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

刚刚在插件中突出显示了更改

               "oColumnFilterWidgets": {

                  "aoColumnDefs": [

                     { "bSort": false, "sSeparator": " / ", "aiTargets": [ 2 ] },

                     { "fnSort": function( a, b ) { return a-b; }, "aiTargets": [ 3 ] }

                  ]

               }

希望这会有所帮助。