3

我们使用 DataTables jQuery 插件 ( http://www.datatables.net ) 创建可排序的表。该插件自动检测每列数据的数据类型。

当您想自己指定列的数据类型时,您在初始化数据表时添加“aoColumns”属性:

$('#accountTable').dataTable({
    "bPaginate": false,
    "sScrollX": "100%",
    "bScrollCollapse": true,
    "aoColumns": [
        null,
        null,
        { "sType": "currency" },
        { "sType": "currency" }
    ]
});

注意,我下载了数据表的货币数据类型插件。这很好用。

但是,我担心如果我们对表列进行更改,我们会忘记返回 JS 并更改数据表插件在该表上的初始化方式。

所以......根据需要直接在表中指定数据类型是理想的:

<table class="dataTables display">
    <thead>
        <tr>
        <th>Category</th>
        <th>Product</th>
        <th sType="currency">Cost</th>
        <th sType="currency">Retail</th>
        ...

有没有办法做到这一点,或者使用 DataTables 的默认功能(我找不到)或使用 JS 循环或其他东西来循环表的标签并更新存在“sType”属性的 sType?

4

4 回答 4

2

这是一个非常的方法:

您的标题 HTML:

<table id="sorted-table">
    <thead>
        <tr>
            <th data-s-type="string">Number</th>
            <th data-s-type="html">Complex Name</th>
            <th>Price</th>
            <th data-b-sortable="false">Action</th>
         </tr>
     </thead>
...

你的 JS:

$('#sorted-table').dataTable({
   ...
   "aoColumns": $('#sorted-table').find('thead tr th').map(function(){return $(this).data()})
});

注意:需要数据属性中的那些破折号。它们通过 jQuery 转换为camelCase形式,使其与数据表 API 兼容。

于 2014-08-19T20:11:44.303 回答
1

让你的 JS 循环并检查标题上的属性会起作用,但你不能只是发明一个sType属性并让它显示在 DOM 中。您必须颠覆一个有效但未使用的属性,例如headers(这可能会给屏幕阅读器带来麻烦;可能有更好的选择)。

编辑:

好的,在阅读了 CBroe 的评论后,我想可以元素一个任意属性。

因此,如果您想符合 HTML5,您可以命名该属性data-sType,然后执行以下操作:

var aoColumns = [];

$('#accountTable > th').each(function() {
   var sType = $(this).getAttribute("data-sType");
   aoColumns.push(sType ? sType : null);
});

$('#accountTable').dataTable({
   ...
   "aoColumns": aoColumns
});
于 2013-03-22T16:27:57.633 回答
1

接受 CBroe 的评论,这正是我所做的。只需确保您的自定义属性以 为前缀data-,例如根据data-stype='currency'HTML规范

于 2013-03-22T16:37:35.690 回答
1

感谢大家的帮助!我必须对 Russell Zahniser 的评论进行一些调整才能为我工作:

  1. 将 $('#accountTable > th') 更改为 $('#accountTable thead th')
  2. 将 aoColumns.push(sType ? sType : null) 更改为 aoColumns.push(sType ? { "sType" : "currency" } : null)

最终结果:

var aoColumns = [];

$('#accountTable thead th').each(function() {
   var sType = $(this).getAttribute("data-sType");
   aoColumns.push(sType ? { "sType" : "currency" } : null);
});

$('#accountTable').dataTable({
   ...
   "aoColumns": aoColumns
});
于 2013-03-22T21:03:47.080 回答