学而实习之 不亦乐乎

jQuery DataTables的数据源

2020-07-26 16:14:09

一、DataTables支持的数据源类型
DataTables 使用的数据源必须是一个数组,数组里的每一项将显示在你定义的行上面,DataTables 可以使用三种基本的 JavaScript 数据类型来作为数据源:
数组(Arrays [])
对象(objects {})
实例(new myclass())

DataTables 可以用 columns.dataOption 或者 columns.renderOption 选项来设定显示数据,默认操作模式是数组(Arrays),而对象(Objects)和实例(Instance)能处理更复杂的数据.


1.数组
数组在 DataTables 中很容易使用当使用数组作为数据源,每个数组元素的数量必须等于表中的列数。如:

var data = [
    [
        "Tiger Nixon",
        "System Architect",
        "Edinburgh",
        "5421",
        "2011/04/25",
        "$3,120"
    ],
    [
        "Garrett Winters",
        "Director",
        "Edinburgh",
        "8422",
        "2011/07/25",
        "$5,300"
    ]
];

//然后 DataTables 这样初始化:
$('#table').DataTable( {
	data: data
} );

2.对象
对象看起来很直观,使用起来和数组略有不同。通过对象获得特定的数据非常简单, 你只需要使用一个属性的名字,而不是记住这个数组的索引,比如data.name,而不是data[0].
根据表格的需求显示,对象可以包含更多的信息,例如包括数据库的主键而用户是看不见的.
使用对象前,你需要明确告诉 DataTables 那个属性对应那一列, 通过使用 columns.dataOption 或者 columns.dataOption 选项完成。
如:

var data = [
    {
        "name":       "Tiger Nixon",
        "position":   "System Architect",
        "salary":     "$3,120",
        "start_date": "2011/04/25",
        "office":     "Edinburgh",
        "extn":       "5421"
    },
    {
        "name":       "Garrett Winters",
        "position":   "Director",
        "salary":     "$5,300",
        "start_date": "2011/07/25",
        "office":     "Edinburgh",
        "extn":       "8422"
    }
];

//object可以如下初始化表格
$('#table').DataTable( {
	data: data,
	//使用对象数组,一定要配置columns,告诉 DataTables 每列对应的属性
	//data 这里是固定不变的,name,position,salary,office 为你数据里对应的属性
	columns: [
		{ data: 'name' },
		{ data: 'position' },
		{ data: 'salary' },
		{ data: 'office' }
	]
} );

3.实例
DataTables 从实例中获取数据显示是非常有用的,这些实例可以定义成抽象的方法来更新数据。
注意,name,salary,position 是属性而office是一个方法,DataTables 允许这样使用,他会自动识别。
如:

functionEmployee ( name, position, salary, office ) {
    this.name = name;
    this.position = position;
    this.salary = salary;
    this._office = office;
    this.office = function() {
        returnthis._office;
    }
};   

$('#table').DataTable( {
    data: [
        newEmployee( "Tiger Nixon", "System Architect", "$3,120", "Edinburgh"),
        newEmployee( "Garrett Winters", "Director", "$5,300", "Edinburgh")
    ],
    columns: [
        { data: 'name'},
        { data: 'salary'},
        { data: 'office'},
        { data: 'position'}
    ]
} );

二、DataTables的数据来源
DataTables 支持三种数据源显示:DOM、JavaScript、Ajax。

1.DOM
DataTables 初始化后,它会自动检查表格中的数据,如果存在即作为表的显示数据 (注意,如果你这时使用data或者ajax传递数据将不会显示),这是使用 DataTables 最简单的方法,渲染已经存在的table。

注意,当使用DOM显示表,DataTables 会把表格中数据当做数组数据源。

DataTables还可以直接把 DOM 数据转化为自己的内部数据对象。如下:

<button id="table_id_example_button">获取选中的行</button>
<table id="table_id_example" class="display">
	<thead>
		<tr>
			<th>Column 1</th>
			<th>Column 2</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>Row 1 Data 1</td>
			<td>Row 1 Data 2</td>
		</tr>
		<tr>
			<td>Row 2 Data 1</td>
			<td>Row 2 Data 2</td>
		</tr>
	</tbody>
</table>

$(document).ready( function () {
	var table = $('#table_id_example').DataTable({
		 //这样配置后,即可用DT的API来访问表格数据
		columns: [
			{data: "column1"},
			{data: "column2"}
		]
	});
	//给行绑定选中事件
	 $('#table_id_example tbody').on( 'click', 'tr', function () {
		if ($(this).hasClass('selected')) {
			$(this).removeClass('selected');
		}
		else {
			table.$('tr.selected').removeClass('selected');
			$(this).addClass('selected');
		}
	} );
	//给按钮绑定点击事件
	$("#table_id_example_button").click(function () {
		var column1 = table.row('.selected').data().column1;
		var column2 = table.row('.selected').data().column2;
		alert("第一列内容:"+column1 + ";第二列内容: " + column2);
	});
} );

2.Html5
DataTables 中还可以利用HTML5 data- *属性,可以提供datatables中排序和搜索数据的附加信息。
例如您可能有一个列是一个日期格式,如“21st November 2013”,浏览器将难以排序,但是你可以提供一个data-order属性作为HTML的一部分包含一个时间戳,就可以很容易地解决。此外,可以使用data-search搜索数据。例如:

<td data-search="21st November 2013 21/11/2013" data-order="1384992000">
    21st November 2013
</td>
DataTables 中会自动检测:
排序数据: data-order 和 data-sort 属性
查找数据: data-search 和 data-filter 属性

3.javascript
你可以指定 DataTables 使用哪一种数据作为初始化,这些数据可以是数组,对象或者实例,只要 JavaScript 可以访问到数据就可以交给 DataTables 显示。
使用row.add()和row.remove()方法可以动态添加删除表格中的数据

4.Ajax 
ajax和javascript数据很类似,你只需要指定要加载的数据的url即可。
服务器端处理是一种特殊的数据源,每页的数据通过异步请求来显示相应的数据,这允许大量的数据集显示。


三、最后
本文来源于DataTables的手册,如有更加详细的需求,建议查看官方的手册。