【问题标题】:Datatables: Need to sort a column numerically by data in HTML数据表:需要按 HTML 中的数据对列进行数字排序
【发布时间】:2012-12-10 21:23:39
【问题描述】:

我有一张像这样的桌子......

<table id="myTable">
    <tr>
        <td><a href="site.com?id=1">1</a></td>
        <td>Foo</td>
    </tr>
    <tr>
        <td><a href="site.com?id=9">9</a></td>
        <td>Bar</td>
    </tr>
    <tr>
        <td><a href="site.com?id=10">10</a></td>
        <td>Baz</td>
    </tr>
</table>

我需要这样做,以便我的Bootstrap Datatables 脚本将按锚标记的内部 HTML 进行排序,并按数字对其进行排序。目前它是这样排序的......

1   Foo
10  Baz
9   Bar

但我需要它像这样排序......

1   Foo
9   Bar
10  Baz

我真的不知道该怎么做。我对其进行了排序,但它认为内部 HTML 是一个字符串,而不是一个数字 :(

【问题讨论】:

  • 这可能是重复的帖子:stackoverflow.com/questions/10305552/…
  • 根据您链接到的页面,“数据通常是数字和字母的复杂组合(文件名是一个常见的例子),以自然的方式对它们进行排序是一个相当困难的问题。幸运的是其他作者已经在该领域进行了大量工作 - 以下插件使用 Jim Palmer 的 naturalSort() 函数(在此处下载)在 DataTables 中提供自然排序。”看起来该页面列出了处理这种情况的各种方法。
  • 我假设这是服务器端数据?

标签: javascript jquery sorting twitter-bootstrap datatables


【解决方案1】:

我假设您是在服务器端生成链接。您最好在客户端上呈现这些内容,原因有两个:

  1. 您的排序将起作用
  2. 您的有效负载会更小

为此,您需要使用类似于下面的 aoColumnsDef 和 aTargets

    "aoColumnDefs": [
    {
        "aTargets": [ 1 ],
        "fnRender": function ( o, val ) {
          var link = "<a class='' href='site.com?id=" + o.aData[0] + "'>" + o.aData[0] + "</a>";
          return link;
        }
    },

希望这会有所帮助。

【讨论】:

  • 这很有用,谢谢,但它没有排序。是否可以同时进行排序和渲染?我试过 bSortable: true,但它什么也没做。
  • 好的,我想通了,你需要使用:bUseRendered : false 谢谢!
  • 这取决于最终用户的浏览器 - DataTables 的优点之一是它可以优雅地降级 - 如果在浏览器上关闭 JS,它只会显示一个标准的 HTML 表格。使用您的解决方案,纯 HTML 表格将不包含链接。这也可能会导致机器人抓取页面出现问题...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多