前段时间做东西用到了Datatable,自定义搜索那里搜索了好久才做出来。
写的很笨,不过终于实现了。
作为第一篇笔记写下来(^ _ ^)
实现效果
表格呈现现效果
实现筛选
HTML代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>实现DataTable自定义搜索</title>
</head>
<!--第一步:引入Javascript / CSS (CDN)-->
<link rel="stylesheet" type="text/css" href="select-style.css">
<!-- DataTables CSS -->
<link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.15/css/jquery.dataTables.css">
<!-- jQuery -->
<script type="text/javascript" charset="utf8" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<!-- DataTables -->
<script type="text/javascript" charset="utf8" src="http://cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>
<body>
<!--第二步:添加如下 HTML 代码-->
<div style="width: 70%;margin: 0 auto;">
<!--下拉筛选框 需要哪些加那些就可以-->
<div class="width-100">
<span class="select-type">地区:</span>
<select id="province_option" class="table-select"></select>
<span class="select-type">办学类型:</span>
<select id="internationalschool_type_option" class="table-select"></select>
<span class="search-css">搜索:</span>
<input id="schoolname_input" type="text" placeholder="学校名称/地区/类型" />
<!--筛选按钮
<button id="select_btn">点击筛选</button>
-->
</div>
<!--表格部分-->
<table id="table_id_example" style="text-align: center;" >
<thead></thead>
<tbody></tbody>
</table>
</div>
<!--第三步:初始化Datatables-->
<script>
//指定列筛选功能的实现
$.fn.dataTable.ext.search.push(
function(settings,data,index,RowData,counter){
province_data = data[2];
type_data = data[3];
type = $("#internationalschool_type_option option:selected").val();
pro = $("#province_option option:selected").val();
if((pro == '0' && type == '0')|| (province_data == pro && type == '0') || (pro == '0' && type_data == type) || (province_data == pro && type_data == type))
{return true;}
return false;
}
);
//表格初始化
$(document).ready( function () {
var table = $('#table_id_example').DataTable({
"dom": '<"toolbar">frtip',//把分页那里去除了 但是还有另外的方法也能隐藏分页,待区分用法
"sDom":'"top"i',//利用sDom隐藏搜索栏,不会出现搜索禁用的情况 dom sDom用来修改各控件样式
"bFilter":false,//一般没有标注searching的时候,禁用会连searching一起禁用
"searching":true,//如果想要进行筛选,searching一定要启用,启用之后就不能禁用自带搜索框了
"bAutoWidth":false,
"aoColumnDefs": [{ "sWidth": "8%", "aTargets": [ 0,2,3 ] }],
//"fnPreDrawCallback": function( oSettings ) {
// $('.dataTables_filter input').attr({'name':'search','placeholder': '例:北京京西学校'});//提示
//},
ajax: {
url: 'isch_allrank.json',//本地json文件
dataSrc: 'China_International_School'
},
columns: [
{"sTitle":"排名",data:'rank'},
{"sTitle":"学校名称",data:'name'},//,searchable:false},
{"sTitle":"地区",data:'area'},
{"sTitle":"类型",data:'types'}
//前面的data是固定的表示你要获取数据中的什么属性,后面的是json数据的属性
//表头可以在最开始固定好,也可以在这里用"sTitle"固定
],
//"columnDefs": [ {
// "targets": 1,
// "searchable": false
//} ],//不知道为什么这样禁用搜索不起作用,在columns那里禁用就起作用
"language": {"sProcessing": "处理中...","sLengthMenu": "显示 _MENU_ 项结果","sZeroRecords": "没有匹配结果","sInfo": "","sInfoEmpty": "显示第 0 至 0 项结果,共 0 项","sInfoFiltered": "","sInfoPostFix": "","sSearch": "搜索:","sUrl": "","sEmptyTable": "表中数据为空","sLoadingRecords": "载入中...","sInfoThousands": ",","oPaginate": {"sFirst": "首页","sPrevious": "上页","sNext": "下页","sLast": "末页"},"oAria": {"sSortAscending": ": 以升序排列此列","sSortDescending": ": 以降序排列此列"}}//不想要就设置为空
});
点击button进行筛选
//$('#select_btn').on('click',function() {
// table.draw();
//} );
//下拉框改变就进行筛选,PC端可以很好的执行,手机端不行
$('.table-select').on('click',function() {
table.draw();
} );
$('#schoolname_input').keyup( function() {
schoolname = $('#schoolname_input').val();
table.search( schoolname ).draw();
} );//将原有搜索框隐藏,将现有搜索框的里面的值传入隐藏的原有搜索框,实现搜索框自定义
} );
</script>
<!--下拉框选项js-->
<script type="text/javascript" charset="utf8" src="table-select.js"></script>
</body>
</html>
CSS
@charset "utf-8";
/* CSS Document */
.width-100{width:100%;text-align: right;margin-bottom:1rem;margin-top: 1rem;}
.select-type{line-height: 30px;font-size: 0.9rem;color: #ccc;font-weight: bold;margin-left: 0.5rem;}
.search-css{line-height: 30px;font-size: 0.9rem;color:#ccc;font-weight: bold;margin-left: 0.5rem;}
select{height: 25px;border-radius:0.6rem;}
input{border-radius: 0.6rem;outline:none;border-top-style: groove;border-right-style: groove;border-bottom-style: groove;border-left-style: groove;border:1px solid #a1a1a1;text-align: center;line-height:20px;}