当前位置: > > > jQuery - 第三方表格插件DataTables使用详解10(列属性的详细设置)

jQuery - 第三方表格插件DataTables使用详解10(列属性的详细设置)

在之前的样例中,我们都是在 html 页面里的 thead 标签中配置表格列。
<table id="myTable">
    <thead>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>出生日期</th>
        </tr>
    </thead>
</table>

其实也可以在初始化 DataTables 时,直接通过 columns 属性来配置列。而且该属性还提供更加丰富的功能。

二十、每一列单独设置

1,基本用法

假设要显示如下表格:

(1)如果表格数据类型为数组可以这么配置:
$('#myTable').DataTable({
  "ajax": 'data.txt',
  "columns": [
        { title: '编号'},
        { title: '姓名'},
        { title: '出生日期'}
    ]
});

(2)如果表格数据类型为对象可以这么配置:
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id"},
        { title: '姓名', data: "name"},
        { title: '出生日期', data: "birthday"}
    ]
});

(3)这样 html 代码就很简单了:
<table id="myTable">
</table>

2,样式相关的属性

(1)下面几个属性可以设置列的样式:
  • width:列宽
  • className:这里的 class 会应用到 td 上面
  • visible:是否显示当前列
  • cellType:单元格类型。可选值为:thtd

(2)使用样例
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id", width:"20%", className:"col1"},
        { title: '姓名', data: "name", width:"40%", className:"col2"},
        { title: '出生日期', data: "birthday", width:"40%", className:"col3"}
    ]
});

3,内容相关的属性

(1)defaultContent 可以设置当内容为 null undefined 时,用于显示的值。
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id"},
        { title: '姓名', data: "name"},
        { title: '出生日期', data: "birthday", defaultContent:"--未知--"}
    ]
});

(2)使用 render 可以设置自定义渲染器。比如我们判断第三列内容的字数,如果超过 4 个则直接截断并附上省略号。
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id"},
        { title: '姓名', data: "name"},
        { title: '出生日期', data: "birthday",
          // data:当前cell的data,这个data和type有关
          // type:filter,display,type,sort
          // row:当前行数据
          // https://datatables.net/reference/option/columns.render
          render: function (data, type, row, meta) {
              return type === 'display' && data.length > 4 ?
              '<span title="' + data + '">' + data.substr(0, 4) + '...</span>' : data;
          },
        }
    ]
});

(3)我们可以把某列的 data 配置成 null,这样该列的 render 函数中就可以使用整行数据:
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id"},
        { title: '姓名', data: "name"},
        { title: '出生日期', data: null,
          render: function (data, type, row, meta) {
              return type === 'display' && data.birthday.length > 4 ?
              '<span title="' + data.birthday + '">' + data.birthday.substr(0, 4) + '...</span>' :
               data.birthday;
          },
        }
    ]
});


4、排序、搜索相关的属性

(1)属性介绍:
  • orderable:是否可排序。默认为 true
  • orderData:指定当前列进行排序操作的时候,实际用的是哪一列(或几列)的数据进行真正的排序(通常是隐藏的)
  • searchable:是否允许搜索此列。默认为 true
  • type:主要用于排序和筛选,指定当前列作为什么类型进行解析。该属性仅 ClientSide 有效。
    可选值有datenumnum-fmthtml-numhtml-num-fmthtmlstring

(2)使用样例 
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id"},
        { title: '姓名', data: "name"},
        { title: '出生日期', data: "birthday",
          orderable: true,
          orderData: [0, 1],
          searchable: false,
          type: "html"
        }
    ]
});

5,单元格创建完后的回调

createdCell 为单元格创建完后的回调,可以作为前面介绍的 render 的补充。比如下面将小于等于 3 的编号设置为红色。
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id",
          // cell:TD的dom
          // cellData:原始的单元格数据,如何render中进行了格式化,用$(cell).html()来取格式化后的数据
          // rowData:行数据
          // row:行号
          // col:列号
          createdCell: function (cell, cellData, rowData, row, col) {
              if ( cellData <= 3 ) {
                  $(cell).css('color', 'red')
              }
          }
        },
        { title: '姓名', data: "name"},
        { title: '出生日期', data: "birthday"}
    ]
});

二十一、多列同时设置

1,columnDefs 属性介绍

(1)除了上面的 columns,还有个 columnDefs 属性可以设置列。只要 columns 可以定义的属性,也都可以在这里定义。
(2)与 columns 不同的是,columnDefs 另外增加了 targets 属性用于指定列范围。即一个配置可以同时应用于多列。
(3)优先级方面,上面的 columns 高于 columnDefs

2,使用样例

(1)效果图
下面我们将第一个列和最后一列的内容变成使用 input 文本输入框显示。

(2)样例代码
$('#myTable').DataTable({
  "ajax": 'data.php',
  "columns": [
        { title: '编号', data: "id"},
        { title: '姓名', data: "name"},
        { title: '出生日期', data: "birthday"}
    ],
  "columnDefs": [
      {
          targets: [0, 2],
          render: function (data, type, row, meta) {
              if (type === 'display') {
                  return '<input type="input" class="form-control" value="' + data + '">';
              }
              return data;
          },
      }
    ],
});
评论0