在 jQuery DataTables 中使用锚标记对列进行排序

Posted

技术标签:

【中文标题】在 jQuery DataTables 中使用锚标记对列进行排序【英文标题】:Sorting column with anchor tags in jQuery DataTables 【发布时间】:2010-12-26 08:24:18 【问题描述】:

我使用 jQuery 数据表插件对表格数据进行排序。如果列包含简单文本,则排序工作正常。如果我在文本上放置任何锚标记条件,则列排序不会正确排序。

我以下列方式显示这些值:

<td><?php if ($allAptArr[$d][27]['staffinactive'] == 1)  ?>
        <?=ucwords(stripslashes($allAptArr[$d][5]['staff_name']));?>
    <?php  else  ?>
        <a href='#' onClick="redirectToStaff('<?=$allAptArr[$d][10]['staff_id']?>');">
        <?=ucwords(stripslashes($allAptArr[$d][5]['staff_name']));?>
        </a>
<?php  ?> </td>

使用此代码,列排序失败。

【问题讨论】:

相关***.com/questions/1898621/… 我有同样的问题***.com/questions/41836619/… 【参考方案1】:

在准备函数之前添加:

    //sets up numeric sorting of links
    jQuery.fn.dataTableExt.oSort['num-html-asc'] = function(a,b) 
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y || isNaN(y) ) ? -1 : ((x > y || isNaN(x)) ? 1 : 0));
    ;

    jQuery.fn.dataTableExt.oSort['num-html-desc'] = function(a,b) 
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y || isNaN(x)) ? 1 : ((x > y || isNaN(y) ) ? -1 : 0));
    ;

在就绪函数中:

        "aoColumns": [
           "sType": "num-html" ,
          null,
          etc. etc.
        ]

这就是我对锚的工作方式,整数按应有的顺序排列。

【讨论】:

【参考方案2】:

将列类型设置为“html”:

$('#example').dataTable( 
    "aoColumns": [ 
         "sType": "html" ,
        null,
        null,
        null,
        null
    ]
 );

这将在排序前去除 HTML 标签。

见documentation for sType parameter

【讨论】:

【参考方案3】:

我只是在涉及链接时使用数据表进行排序时遇到问题 - 我有一列在某些单元格中有链接,而在其他单元格中没有链接。它似乎是在排序,但它是先排序所有链接,然后再排序所有非链接,而不是同时将链接和非链接排序。问题原来是标记中的间距。当我去掉任何 a 标签周围的所有非必要间距时,我的列排序完美。

【讨论】:

【参考方案4】:

答案已经很晚了,但对其他读者仍然有帮助,您可以采取一个虚拟专栏。还隐藏该虚拟列并按虚拟列对实际列进行排序。假设我有三列,然后将第四列添加为 dummy 并将其放入数据表调用中

$('#example').dataTable( "aoColumns": [null, null, "iDataSort":3 ,  "bVisible": false]);

【讨论】:

正是我想要的。谢谢!【参考方案5】:

我使用DataTables HTML5 data attributes 来获取包装在锚标记中的可排序日期的所需功能。

这是许多表格单元格之一的 HTML sn-p:

<td data-order="20180115"><a href="#">01/15/2018</a></td>

【讨论】:

【参考方案6】:

我认为这是因为您没有将锚点与同一列中的锚点数据混合。您也不应该使用 onClick,特别是与 jquery 一起使用,只需使用正确的选择器设置一个 click() 函数。

【讨论】:

【参考方案7】:

正如他们所说,并非您放入 tds 的所有内容都是可排序的。例如,需要专门禁用链接。下面的代码 sn-p 将禁用表格中第一列的排序。

<script type="text/javascript">
$(document).ready(function ()

    $('#example').dataTable(
            "aoColumnDefs":["bSortable": false, "aTargets": [0]]);
);
</script>

【讨论】:

【参考方案8】:

我的数据表有 2 列,第一列有 &lt;a&gt; 元素,我试图对我的第一列进行排序,但排序不起作用。我尝试了很多方法,但没有奏效,所以我添加了一个带有 @Html.Raw 的隐藏列,它绑定到我绑定到 &lt;a&gt; 的同一模型属性,并在我的隐藏列上排序。请看下面的链接

Jquery/JavaScript : Sort a datatable on column that has <a>

【讨论】:

以上是关于在 jQuery DataTables 中使用锚标记对列进行排序的主要内容,如果未能解决你的问题,请参考以下文章

JQuery Datatables 在输入中搜索并选择

使用 jquery.dataTables 从 observableArray 中删除项目后 UI 不更新

当我从 ajax 发送数据时,如何在 jQuery 中使用 DataTables 对列进行排序?

$().DataTables 不是一个函数 - Jquery

在 dataTables.js jQuery 插件中使列不可排序

在 jQuery DataTables 中使用锚标记对列进行排序