实现功能:dataTable某列内容过长的话,只显示部分内容,鼠标点击显示全部,再点击显示部分。可以切换。
效果图:
鼠标点击:
如果再次点击,备注内容又收缩了。
JS实现代码如下:
var remarkShowLength = 10;//默认现实的字符串长度
datatable中的配置:
首先在 columnDefs 中显示文本的时候,如果超长,就只显示部分。
然后通过 createdRow ,如果备注信息超长的话,给该td元素添加上onclick时间,鼠标点击的时候,可以进行切换。并且将全部的字符信息 data.remarks 放置到属性中去,以便后面可以取出来。
"createdRow": function( row, data, dataIndex ) { if(data.remarks.length > remarkShowLength){//只有超长,才有td点击事件 $(row).children('td').eq(7).attr('onclick','javascript:changeShowRemarks(this);'); } $(row).children('td').eq(7).attr('content',data.remarks); }, "ajax" : { "url" : "/cluster/list?importantLevel=" + $('#searchImportantLevelSelect').val() }, "columnDefs" : [ { "type": "date", "targets": 7, "render": function (data, type, full, meta) { if (full.remarks.length > remarkShowLength) {return getPartialRemarksHtml(full.remarks);//显示部分信息} else {return full.remarks;//显示原始全部信息 }}
}
]
下面从td的属性中取出全部的remark,然后根据当前是显示的全部还是显示的部分信息,进行切换。
//切换显示备注信息,显示部分或者全部 function changeShowRemarks(obj){//obj是td var content = $(obj).attr("content"); if(content != null && content != ''){ if($(obj).attr("isDetail") == 'true'){//当前显示的是详细备注,切换到显示部分 //$(obj).removeAttr('isDetail');//remove也可以 $(obj).attr('isDetail',false); $(obj).html(getPartialRemarksHtml(content)); }else{//当前显示的是部分备注信息,切换到显示全部 $(obj).attr('isDetail',true); $(obj).html(getTotalRemarksHtml(content)); } } }
//部分备注信息 function getPartialRemarksHtml(remarks){ return remarks.substr(0,remarkShowLength) + ' <a href="javascript:void(0);" ><b>...</b></a>'; } //全部备注信息 function getTotalRemarksHtml(remarks){ return remarks + ' <a href="javascript:void(0);" >收起</a>'; }