Datatables 1.10 仅通过单击排序图标
Posted
技术标签:
【中文标题】Datatables 1.10 仅通过单击排序图标【英文标题】:Datatables 1.10 sort only by cliking sort icons in th 【发布时间】:2015-02-03 18:10:34 【问题描述】:我使用的是datatables 1.10 版。 我有一个要求,
-
单击排序图标(向上和向下箭头)时,排序应该在服务器端工作
当点击 th 时,排序应该在本地工作。这是因为用户误点击了广告,服务器得到了不必要的负担。
目标: 我想保留两个
-
本地排序[点击广告而不是图标](仅针对当前在表格显示/页面中的数据)
服务器端排序[仅通过单击图标]。
问题: DataTables 使用 css 背景图像进行排序。这使得很难检测到对图标的点击,因为据我所知,点击时无法捕获 css 背景图像。
这是我想出的,但仍然没有进展
JSFIDDLE: http://jsfiddle.net/bababalcksheep/mae29pau/10/
JS:
$(document).ready(function ()
//http://www.datatables.net/reference/api/
var url = "http://www.json-generator.com/api/json/get/cbEfqLwFaq?indent=2";
//
$('th').on("click.DT", function (event)
event.stopImmediatePropagation();
);
var table = $('#example').DataTable(
"processing": true,
"serverSide": false,
"ajax": url
);
//
//$('th').off('click.DT');
// sort internally
table.column('2').order('asc');
);
UPDATE-1:
JSFIDDLE:http://jsfiddle.net/bababalcksheep/mae29pau/14/
我能够通过添加一个 sortMask 并在其上绑定单击来领先一步。
sortMask 是一个 id 添加到每一列的 div <thead> -> <tr> -> <th>
CSS:
.sortMask
width:19px;
height:19px;
float:right;
display:inline-block;
z-index:0;
margin-right: -19px;
/*background:red;*/
JS:
$('th').on("click.DT", function (e)
//stop Propagation if clciked outsidemask
//becasue we want to sort locally here
if (!$(e.target).hasClass('sortMask'))
e.stopImmediatePropagation();
);
【问题讨论】:
顺便说一句,试着让客户端做这些事情,因为如果你有几个用户点击排序,服务器就会有不必要的负载。 你能在我认为这里更好的解决方案是包装文本而不是图标:
<th><div>First name <div>abc</div></div></th>
还有:
$('th').on("click", function (event)
if($(event.target).is("div"))
event.stopImmediatePropagation();
);
请注意:你应该使用普通的click
,而不是click.DT
,因为在这种情况下它会在DataTables
之前被触发。
http://jsfiddle.net/mae29pau/38/
【讨论】:
以上是关于Datatables 1.10 仅通过单击排序图标的主要内容,如果未能解决你的问题,请参考以下文章
dataTables jquery - 如何添加排序图像/图标?