【问题标题】:DataTable JS Unable to Filter on Column With DecimalsDataTable JS 无法过滤小数列
【发布时间】:2022-02-12 03:21:56
【问题描述】:

我想对包含带小数的数字的 DataTable 列启用过滤。我能够让代码在没有小数的表上成功运行,但它不能用小数排序。有什么办法可以修改以下内容以适应小数?

/* Custom filtering function which will search data in column four between two values */
        $.fn.dataTable.ext.search.push(
            function( settings, data, dataIndex ) {
                var min = parseInt( $('#min').val(), 10 );
                var max = parseInt( $('#max').val(), 10 );
                var age = parseFloat( data[1] ) || 0; // use data for the age column

                if ( ( isNaN( min ) && isNaN( max ) ) ||
                     ( isNaN( min ) && age <= max ) ||
                     ( min <= age   && isNaN( max ) ) ||
                     ( min <= age   && age <= max ) )
                {
                    return true;
                }
                return false;
            }
        );

        $(document).ready(function() {
            var table = $('#example').DataTable();

            // Event listener to the two range filtering inputs to redraw on input
            $('#min, #max').keyup( function() {
                table.draw();
            });
        });

我想知道将 parseInt 从 min 和 max 变量更改为 parseFloat 是否可行,但我不确定是否需要修改 isNaN?

【问题讨论】:

  • 我会在逗号替换为点的值上尝试parseFloat()parseFloat( data[1].replace(",",".") ) || 0;
  • @LouysPatriceBessette 你能解释一下吗?我的表没有逗号,只有小数。您是说 parseInt 将我表中的小数作为逗号相互贯穿吗?我的理解是问题在于 parseInt,因为带小数的数字是错误的。
  • 嗬...对不起,我想我幻觉出了昏迷问题...
  • 所以 parseFloat 应该这样做...为什么以 25 为底(parseInt 的第二个参数)?通常,小数以 10 为底...
  • @LouysPatriceBessette 哦!确实应该是 10。

标签: javascript jquery datatables filtering


【解决方案1】:

应将 min 和 max 变量上的 parseInt 更改为 parseFloat 以启用对十进制值的过滤,因为 parseInt 将带小数的数字返回为 NaN。

【讨论】:

    【解决方案2】:

    对于该列,您可以使用 Datatables 过滤器属性

    “数据过滤器”

    <td data-filter="62,5">62.5</td>
    

    然后在搜索栏中替换小数点“。”用“,”

    if(colIdx == 5){
           var searchval = this.value.replace(".",",");
    }else{
          var searchval = this.value;
    }
    

    colIdx 是列 ID,因为我使用了自定义搜索文件

    你可以直接使用var searchval = this.value.replace(".",",");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-27
      • 2011-10-18
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2014-09-08
      • 2019-05-23
      • 1970-01-01
      相关资源
      最近更新 更多