13 Star 60 Fork 28

sakuya/TableFilter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.html 10.79 KB
一键复制 编辑 原始数据 按行查看 历史
sc 提交于 2020-04-17 13:23 . ADD
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="format-detection" content="telephone=no" />
<meta name="renderer" content="webkit">
<link rel="stylesheet" href="library/layui/css/layui.css">
<link rel="stylesheet" href="library/doc.css">
<link rel="stylesheet" href="tableFilter.css">
<title>tableFilter</title>
</head>
<body>
<div class="doc-layout">
<div class="doc-side">
<h1>TABLEFILTER</h1>
<h2>文档目录</h2>
<ul>
<li><a href="#demo1" title="本地过滤演示(local)">本地过滤演示(local)</a></li>
<li><a href="#demo2" title="服务端过滤演示(api)">服务端过滤演示(api)</a></li>
<li><a href="#parm" title="核心方法和参数">核心方法和参数</a></li>
<li><a href="#uplog" title="更新日志">更新日志</a></li>
</ul>
<h2>AUTHOR</h2>
<ul>
<li><a href="###">@sakuya</a></li>
</ul>
</div>
<div class="doc-content" id="doc-content">
<div class="layui-main">
<h1 class="doc-h1">LAYUI - TABLEFILTER</h1>
<div class="layui-text">
tableFilter交叉过滤组件,本地/服务端数据过滤,文本/单选/多选过滤类型,自动/自定义/AJAX过滤项,支持IE8
</div>
<fieldset class="layui-elem-field layui-field-title" id="demo1"><legend>本地过滤演示(local)</legend></fieldset>
<div class="layui-text">
<p>创建一个和平常一样的table实例,并且再创建一个tableFilter实例,挂载到table即可完成 <span class="layui-badge layui-bg-orange">本地过滤不建议开启分页和排序</span></p>
</div>
<table id="localtable" lay-filter="localtable"></table>
<fieldset class="layui-elem-field layui-field-title" id="demo2"><legend>服务端过滤演示(api)</legend></fieldset>
<div class="layui-text">
<p>和local本地过滤类似。只是将过滤逻辑交给服务端再返回给前端,刷新表格后显示结果数据</p>
<p>因为是本地JSON数据演示,返回数据不会变!可以打开<em>F12</em>控制台<em>Network</em>中查看请求的参数</p>
<p style="margin:10px 0;">
<button class="layui-btn layui-btn-primary layui-btn-sm" id="r">table.reload('apitable')</button>
</p>
</div>
<table id="apitable" lay-filter="apitable"></table>
<fieldset class="layui-elem-field layui-field-title" id="parm"><legend>核心方法和参数</legend></fieldset>
<div class="layui-text">
<p>tableFilter最核心的一个方法就是 <em>tableFilter.render(options)</em></p>
</div>
<pre class="layui-code" lay-encode="true">
//1、加载CSS
<link rel="stylesheet" href="tableFilter.css">
//2、定义layui组件 得到 tableFilter 对象
var tableFilter = layui.tableFilter;
//3、定义一个tableFilter 挂载到 table 上
var tableFilterIns = tableFilter.render({
'elem' : '#localtable',//table的选择器
'mode' : 'local',//过滤模式
'filters' : [],//过滤项配置
'done': function(filters){
//结果回调
}
})
</pre>
<div class="layui-text">
<p>options参数说明</p>
</div>
<table class="layui-table">
<colgroup>
<col width="120">
<col>
<col width="120">
<col width="200">
</colgroup>
<thead>
<tr>
<th>参数选项</th>
<th>说明</th>
<th>类型</th>
<th>示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td>elem</td>
<td>指定原始 table 容器的选择器。</td>
<td>string</td>
<td>"#table"</td>
</tr>
<tr>
<td>mode</td>
<td class="layui-text">
设置过滤方式。
<ul>
<li>local <em>本地数据过滤,不匹配的元素将被隐藏</em></li>
<li>api <em>服务端过滤,将过滤值放于table where参数中 重新reload()</em></li>
<li>其他字符 <em>自定义过滤,组件将不做处理,仅仅将过滤值放在 done回调中</em></li>
</ul>
</td>
<td>string</td>
<td>"local"</td>
</tr>
<tr>
<td>parent</td>
<td>指定过滤选择器 append 到哪(可有效解决位置问题,比如本文档演示)。<em>非必填,默认在 body 底部</em></td>
<td>string</td>
<td>"body"</td>
</tr>
<tr>
<td>filters</td>
<td>配置过滤项,具体请详见下一张关于filters的参数说明。</td>
<td>Array</td>
<td>[{},{}]</td>
</tr>
<tr>
<td>done</td>
<td>每一次过滤/移除过滤都将会触发回调,返回 filters 所有过滤条件 <em>不管mode是什么方式,都将返回 filters</em></td>
<td>Function</td>
<td>-</td>
</tr>
</tbody>
</table>
<div class="layui-text">
<p>filters参数说明</p>
<p>filters 是一个对象数组 定义哪几个列使用哪种过滤类型</p>
</div>
<table class="layui-table">
<colgroup>
<col width="120">
<col>
<col width="120">
<col width="200">
</colgroup>
<thead>
<tr>
<th>参数选项</th>
<th>说明</th>
<th>类型</th>
<th>示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td>field</td>
<td>指定哪列使用过滤,与 table 中 cols 里的 field 同值。</td>
<td>string</td>
<td>"id"</td>
</tr>
<tr>
<td>name</td>
<td>用于api过滤方式,服务端需要的的参数名。<em>不填则取 field 的值</em></td>
<td>string</td>
<td>"ID"</td>
</tr>
<tr>
<td>type</td>
<td class="layui-text">
设置过滤类型。
<ul>
<li>input <em>输入框文本过滤</em></li>
<li>radio <em>单选过滤</em></li>
<li>checkbox <em>多选过滤</em></li>
<li>date <em>日期范围过滤</em></li>
</ul>
</td>
<td>string</td>
<td>"input"</td>
</tr>
<tr>
<td>data</td>
<td>用于单选/多选自定义显示过滤项,格式如下。<em>非必填</em>
<pre class="layui-code" lay-encode="true">[{ "key":"1", "value":"有效"},{ "key":"0", "value":"失效"}]</pre>
</td>
<td>Array</td>
<td>[{},{}]</td>
</tr>
<tr>
<td>url</td>
<td>用于单选/多选AJAX显示过滤项,暂只支持 GET 方式,请求url地址,务必返回格式如下。<em>非必填</em>
<pre class="layui-code" lay-encode="true">
{
"code": 0,
"msg": "",
"data": [
{ "key":"1", "value":"有效"},
{ "key":"0", "value":"失效"}
]
}
</pre>
</td>
<td>string</td>
<td>"josn/filter.json"</td>
</tr>
</tbody>
</table>
<fieldset class="layui-elem-field layui-field-title" id="uplog"><legend>更新日志</legend></fieldset>
<ul class="layui-timeline">
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">2029/04/17 ADD 日期类型,UP 更新序号</div>
</div>
</li>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">2019/01/23 FIX 过滤项不自动更新,合计列不更新,合计列计算精度</div>
</div>
</li>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">2019/01/21 完成初始版本</div>
</div>
</li>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">嗯~单位项目有需求~开始写代码</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<script type="text/javascript" src="library/layui/layui.js"></script>
<script type="text/javascript" src="library/jquery1.11.1.min.js"></script>
<script type="text/javascript">
layui.use(['jquery', 'table', 'code', 'tableFilter'], function(){
layui.code();
var $ = layui.jquery,
table = layui.table,
tableFilter = layui.tableFilter;
//本地演示
var localtable = table.render({
elem: '#localtable',
page: false,
height : '313',
totalRow : true,
url:'json/list.json',
cols: [[
{type: 'numbers', title: '序号', fixed: 'left', totalRowText: ""},
{field: 'state', title: '状态(Tds)',fixed: 'left', width: 200},
{field: 'id', title: '学号', width: 200},
{field: 'date', title: '入学', width: 200},
{field: 'username', title: '姓名(Ajax)', width: 200},
{field: 'sex', title: '性别(Tds)', width: 150},
{field: 'jf', title: '积分', width: 100, totalRow:true},
{field: 'class', title: '班级(Data)', width: 150}
]],
done: function(res, curr, count){
localtableFilterIns.reload()
}
});
var localtableFilterIns = tableFilter.render({
'elem' : '#localtable',
'parent' : '#doc-content',
'mode' : 'local',
'filters' : [
{field: 'state', type:'checkbox'},
{field: 'id', type:'input'},
{field: 'date', type:'date'},
{field: 'username', type:'checkbox', url:'json/filter.json'},
{field: 'sex', type:'radio'},
{field: 'class', type:'checkbox', data:[{ "key":"12", "value":"十二班"}]}
],
'done': function(filters){}
})
//API演示
var apitable = table.render({
elem: '#apitable',
page: true,
height : '313',
url:'json/list.json',
cols: [[
{checkbox: true, fixed: 'left'},
{type: 'numbers', title: '序号', fixed: 'left'},
{field: 'state', title: '状态(Tds)',fixed: 'left', width: 200},
{field: 'id', title: '学号', width: 200},
{field: 'date', title: '入学', width: 200},
{field: 'username', title: '姓名(Ajax)'},
{field: 'sex', title: '性别(Tds)', width: 150},
{field: 'class', title: '班级(Data)', width: 150}
]],
done: function(res, curr, count){
console.log("监听where:", this.where);
//非常重要!如果使table.reload()后依然使用过滤,就必须将过滤组件也reload()一下
apitableFilterIns.reload()
}
});
var apitableFilterIns = tableFilter.render({
'elem' : '#apitable',
'parent' : '#doc-content',
'mode' : 'api',
'filters' : [
{field: 'state', type:'checkbox'},
{field: 'id', type:'input'},
{field: 'date', type:'date'},
{field: 'username', type:'checkbox', url:'json/filter.json'},
{field: 'sex', type:'radio'},
{field: 'class', type:'checkbox', data:[{ "key":"12", "value":"十二班"}]}
],
'done': function(filters){
}
})
//reload演示
$('#r').on('click', function(e) {
table.reload('apitable')
})
});
</script>
</body>
</html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/lolicode/TableFilter.git
git@gitee.com:lolicode/TableFilter.git
lolicode
TableFilter
TableFilter
master

搜索帮助