DataTables(二) —— 行分组信息展开与折叠的功能实现

DataTables是一个功能非常强大的带有分页功能的jQuery插件。之前在博客里写过一篇有关DataTables分页功能的博文,本篇里就不在重复了,只介绍一下DataTables行分组的展开与折叠功能的实现。

一、效果图

二、用到的js与Css

 

	<link href="bootstrap.min.css" rel="stylesheet" type="text/css"/>	
	<link type="text/css" rel="stylesheet" href="font-awesome/css/font-awesome.css" />
	<link type="text/css" rel="stylesheet" href="font-awesome/css/font-awesome-ie7.min.css" />
	<link href="style-metro.css" rel="stylesheet" type="text/css"/>
	<link href="style.css" rel="stylesheet" type="text/css"/>
	<link rel="stylesheet" href="select2_metro.css" />
	<link rel="stylesheet" href="DT_bootstrap.css" />

	<script src="jquery-1.10.1.min.js" type="text/javascript"></script>
   	<script src="bootstrap.min.js" type="text/javascript"></script>
	<script type="text/javascript" src="jquery.dataTables.min.js"></script>
	<script type="text/javascript" src="DT_bootstrap.js"></script>

 

 

 

 

 

 
 
 

三、html部分代码

 

 

<div class="page-content">
			
	<!-- BEGIN PAGE CONTAINER-->        

	<div class="container-fluid">				

		<!-- BEGIN PAGE CONTENT-->

		<div class="row-fluid">

			<div class="span12">

				<!-- BEGIN EXAMPLE TABLE PORTLET-->

				<div class="portlet box green">

					<div class="portlet-title">

						<div class="caption"><i class="icon-globe"></i>Responsive Table With Expandable details</div>

						<div class="tools">

							<a href="javascript:;" class="reload"></a>

							<a href="javascript:;" class="remove"></a>

						</div>

					</div>

					<div class="portlet-body">

						<table class="table table-striped table-bordered table-hover table-full-width" id="sample_1">

							<thead>
								<tr>
									<th style="width:10%">Index</th>
									<th style="width:30%">Rendering engine</th>

									<th style="width:30%">Browser</th>

									<th style="width:30%" class="hidden-480">Platform(s)</th>

									<!--<th class="hidden-480">Engine version</th>-->

								</tr>

							</thead>

							<tbody>			

							</tbody>
						</table>
					</div>
				</div>					
			</div> 
		</div>
		<!-- END PAGE CONTENT-->
	</div>
	<!-- END PAGE CONTAINER-->

</div>


四、js部分

 

 

<script>

	var oTable;
	jQuery(document).ready(function() {       
	oTable =$("#sample_1").dataTable( {
		"aoColumnDefs": [
			{"bSortable": false, "aTargets": [ 0 ] }
		],
		//"aaSorting": [[1, 'asc']],//排序
		"aLengthMenu": [
			[5,10, 15, 20, -1],
			['每页5条', '每页10条', '每页15条', '每页20条', "显示所有数据"] // change per page values here
		],
		"iDisplayLength": 5,
		"aaData":[
			['a','aa','aaa','aaaa'],
			['b','bb','bbb','bbbb'],
			['c','cc','ccc','cccc'],
			['a','aa','aaa','aaaa'],
			['b','bb','bbb','bbbb'],
			['c','cc','ccc','cccc'],
			['a','aa','aaa','aaaa'],
			['b','bb','bbb','bbbb'],
			['c','cc','ccc','cccc'],
			['a','aa','aaa','aaaa'],
			['b','bb','bbb','bbbb'],
			['c','cc','ccc','cccc']
		],
		"aoColumns":[
			{
				"mData":null						
			},
			{
				"mData":0						
			},
			{
				"mData":1						
			},
			{
				"mData":2						
			}/*,
			{
				"mData":3						
			}*/
		],
		"oLanguage": {
			"oAria":{
				"sSortAscending": " - click/return to sort ascending",
				"sSortDescending": " - click/return to sort descending"
			},
			"sLengthMenu": "每页显示 _MENU_ 条记录", 
			"sZeroRecords": "对不起,查询不到任何相关数据", 
			"sEmptyTable":"未有相关数据",
			"sLoadingRecords":"正在加载数据-请等待...",
			"sInfo": "当前显示 _START_ 到 _END_ 条,共 _TOTAL_ 条记录。", 
			"sInfoEmpty": "当前显示0到0条,共0条记录", 
			"sInfoFiltered": "(数据库中共为 _MAX_ 条记录)", 
			"sProcessing": "<img src='${pageContext.request.contextPath }/image/loading.gif'/> 正在加载数据...", 
			"sSearch": "模糊查询:", 
			"sUrl": "", //多语言配置文件,可将oLanguage的设置放在一个txt文件中,例:Javascript/datatable/dtCH.txt 
			"oPaginate": { 
				"sFirst": "第一页", 
				"sPrevious": " 上一页 ", 
				"sNext": " 下一页 ", 
				"sLast": " 最后一页 "
			} 
		}, //多语言配置 
		// set the initial value
				
		"fnCreatedRow":function(nRow,aData,iDataIndex){
	 			$('td:eq(0)',nRow).html(iDataIndex+1);//为第一个单元格增加序号
	 			$('td:eq(1)',nRow).html("<span class='row-details row-details-close' data_id='"+aData[1]+"'></span> "+aData[0]);
	 	}
	});

	$('.table').on('click', ' tbody td .row-details', function () {
	   	var nTr = $(this).parents('tr')[0];
	   	if ( oTable.fnIsOpen(nTr) )//判断是否已打开            
	   	{
	   	/* This row is already open - close it */
	   		$(this).addClass("row-details-close").removeClass("row-details-open");
	   		        oTable.fnClose( nTr );
	   	}else{
	   		/* Open this row */                
	   		$(this).addClass("row-details-open").removeClass("row-details-close");
	   		// 调用方法显示详细信息 data_id为自定义属性 存放配置ID
	   		fnFormatDetails(nTr,$(this).attr("data_id"));
	   	}
   	});



});

	function fnFormatDetails(nTr,pdataId){
		//根据配置Id 异步查询数据
		var resData=[{name:'a1',num1:22,count1:'70.25%',num2:21,count2:'46.02%'},{name:'a2',num1:57,count1:'18.21%',num2:14,count2:'31.16%'},{name:'a3',num1:34,count1:'10.8%',num2:116,count2:'24.48%'},{name:'a4',num1:12,count1:'3.96%',num2:195,count2:'4.24%'},{name:'a5',num1:33,count1:'1.06%',num2:13,count2:'2.96%'}];	
		/**
		$.ajax({
			type:'post',	 	
			url:'${pageContext.request.contextPath }/statistic/statistic!ajaxDetails.do',
			data:{"pdataId":pdataId},
		 	dataType:"text",
		  	async:true,
		 	beforeSend:function(xhr){//信息加载中
				oTable.fnOpen( nTr, '<span id="configure_chart_loading"><img src="${pageContext.request.contextPath }/image/select2-spinner.gif"/>详细信息加载中...</span>', 'details' );
				},
			success:function (data,textStatus){								
				if(textStatus=="success"){	//转换格式 组合显示内容
					var res = eval("("+data+")");
					var sOut = '<table style="width:100%;">';
					for(var i=0;i<res.length;i++){
						sOut+='<tr>';
						sOut+='<td width="5%"></td><td width="35%">'+res[i].name+'</td>';
						sOut+='<td width="30%"><div class="div_left">'+res[i].num1+'</div><div class="div_center">|</div><div class="div_right">'+res[i].count1+'</div></td>';
						sOut+='<td style="width:30%"><div class="div_left">'+res[i].num2+'</div><div class="div_center">|</div><div class="div_right">'+res[i].count2+'</div></td>';
						sOut+='</tr>'
								
					}
					sOut+='</table>';
					oTable.fnOpen( nTr,sOut, 'details' );
				}
			},
			error: function(){//请求出错处理
				oTable.fnOpen( nTr,'加载数据超时~', 'details' );
			}
		});**/

				var sOut = '<table style="width:100%;">';
				for(var i=0;i<resData.length;i++){
					sOut+='<tr>';
					sOut+='<td width="10%"></td><td width="30%">'+resData[i].name+'</td>';
					sOut+='<td width="30%">'+resData[i].num1+'<div class="div_center"></td>';
					sOut+='<td style="width:30%">'+resData[i].num2+'</td>';
					sOut+='</tr>'
								
				}
				sOut+='</table>';
				oTable.fnOpen( nTr,sOut, 'details' );
			
	    }

	</script>


五、实例下载地址:http://download.csdn.net/detail/zdx1515888659/8216709

(尽量自己整理,上传的时候也就1 、2积分的东西被改成了40多分)

 

 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现这个功能,你需要在前端添加删除按钮,并在单击按钮时向后端发送请求来删除相应的数据。以下是示例代码: ```javascript $(document).ready(function() { var table = $('#example').DataTable( { "columns": [ { "data": "name" }, { "data": "position" }, { "data": "office" }, { "data": "age" }, { "data": "start_date" }, { "data": "salary" }, { "data": null, "render": function ( data, type, row ) { return '<button class="btn btn-danger btn-sm delete-row">删除</button>'; } } ] } ); // 监听删除按钮的点击事件 $('#example tbody').on('click', '.delete-row', function () { // 获取所在的数据 var data = table.row( $(this).parents('tr') ).data(); // 向后端发送删除请求 $.ajax({ url: '/delete', type: 'POST', data: { id: data.id }, // 假设数据源中有一个"id"字段 success: function(result) { // 删除成功后,重新加载表格数据 table.ajax.reload(); } }); } ); } ); ``` 在上面的代码中,我们添加了一个`delete-row`类的删除按钮,然后在表格初始化之后,使用`on`方法监听按钮的点击事件。当按钮被单击时,我们获取所在的数据,然后向后端发送一个删除请求,请求中包含要删除的数据的ID。在请求成功后,我们重新加载表格数据,以便在前端中删除相应的。 在后端实现删除数据的逻辑是在你的服务器端代码中完成的,你需要根据你的后端技术选择相应的方法来实现。无论你使用的是什么后端技术,你需要在后端接收到删除请求后,从相应的数据源中删除相应的数据。在删除完成后,你可以将删除结果返回给前端,以便在前端中进相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值