js前端 多条件筛选查询
一、前言
在做项目中,遇到多条件筛选案例。实现完成以后,我将我做的代码分享在这里,希望可以帮助到其他朋友。
二、效果截图

三、实现代码
首先我先类型、类别、职位分成三块来处理,如果传到服务器端的话,就是三个参数。
html部分:
<form action="@Url.Action()" method="get" id="formAction">
<div class="type-table">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>类型:</td>
<td><span data-cate="all" data-type="type" class="active">全部</span> <span data-cate="qz" data-type="qz">全职</span> <span data-cate="jz" data-type="jz">兼职</span></td>
</tr>
<tr style="display:none;" id="qtqzNone"></tr>
<tr style="display:none" id="qtqz">
<td>类别:</td>
<td><span data-cate="all" data-category="category" class="active">全部</span> <span data-cate="mrmf" data-category="mrmf">美容/美发</span> <span data-cate="bmys" data-category="bmys">保姆/月嫂</span> <span data-cate="dnit" data-category="dnit">电脑/IT</span> <span data-cate="bgwy" data-category="bgwy">办公文员</span> <span data-cate="zsyl" data-category="zsyl">诊所医疗</span> <span data-cate="yyy" data-category="yyy">营业员</span> <span data-cate="mj" data-category="mj">美甲</span> <span data-cate="sj" data-category="sj">司机</span> <span data-cate="yc" data-category="yc">衣产</span> <span data-cate="jbktv" data-category="jbktv">酒吧/KTV</span> <span data-cate="zx" data-category="zx">装修</span> <span data-cate="qt" data-category="qt">其他</span> </td>
</tr>
<tr style="display:none;" id="cyqzCate">
<td>类别:</td>
<td><span data-cate="all" data-category="category" class="active">全部</span> <span data-cate="zc" data-category="zc">中餐</span> <span data-cate="rc" data-category="rc">日餐</span> <span data-cate="fqg" data-category="fqg">夫妻工</span> <span data-cate="qtcy" data-category="qtcy">其他餐饮</span></td>
</tr>
<tr style="display:none;" id="cyqzCates">
<td>职位:</td>
<td><span data-cate="jl" data-position="jl">经理</span> <span data-cate="jdh" data-position="jdh">接电话</span> <span data-cate="qt" data-position="qt">企台</span> <span data-cate="dbdw" data-position="dbdw">打包/带位</span> <span data-cate="kt" data-position="kt">看台</span> <span data-cate="dc" data-position="dc">大厨</span> <span data-cate="cg" data-position="cg">炒锅</span> <span data-cate="bc" data-position="bc">帮炒</span> <span data-cate="dz" data-position="dz">打杂</span> <span data-cate="yg" data-position="yg">油锅</span> <span data-cate="sc" data-position="sc">送餐</span> <span data-cate="qt" data-position="qt">其他</span></td>
</tr>
</table>
</div>
<div class="search">
<input type="hidden" name="cateId" value="@Request.QueryString["cateId"]" />
<input type="text" name="filter" value="@Request.QueryString["filter"]" placeholder="请输入关键字" />
<input type="hidden" name="posParam" id="posParam" value="@Request.QueryString["posParam"]" />
<input type="hidden" name="cateParam" id="cateParam" value="@Request.QueryString["cateParam"]" />
<input type="hidden" name="typeParam" id="typeParam" value="@Request.QueryString["typeParam"]" />
<button type="submit">搜索</button>
</div>
<div class="area">
区域:<select id="AreaIds" name="AreaIds"></select>
<input id="areaId" name="areaId" type="hidden" value="@Request.QueryString["areaId"]" />
</div>
</form>
js部分:
$(function () {
/**类型 */
var typeParam = [];
/**类别*/
var cateParam = [];
/**职位 */
var posParam = [];
/**回填选中项*/ /*这里我说明一下:这里是我们已经提交了参数,在从浏览器的 url 获取参数,通 data-type 来回填该选项是否是选中*/
var param = getUrlParam();
if (param && param.typeParam) {
typeParam = param.typeParam.split('A');
for (var i = 0; i < typeParam.length; i++) {
$('[data-type="' + typeParam[i] + '"]').addClass('active');
}
$('[data-type="type"]').removeClass('active');
}
if (param && param.cateParam) {
cateParam = param.cateParam.split('A');
for (var i = 0; i < cateParam.length; i++) {
$('[data-category="' + cateParam[i] + '"]').addClass('active');
}
$('[data-category="category"]').removeClass('active');
}
if (param && param.posParam) {
posParam = param.posParam.split('A');
for (var i = 0; i < posParam.length; i++) {
$('[data-position="' + posParam[i] + '"]').addClass('active');
}
}
/* 到这里 回填结束 */
/** 这里是选线的点击事件 **/
$(".type-table span").click(function () {
var me = $(this);
var type = me.attr('data-type');
var category = me.attr('data-category');
var position = me.attr('data-position');
var className = me.attr("class");
var cate = me.attr('data-cate');
/*类型判断*/
if (type != undefined) {
if (type == "type") {
$('.type-table [data-cate]').removeClass('active'); typeParam = [];
} else {
$('[data-type="type"]').removeClass('active');
if (className == 'active') {
if (typeParam.indexOf(cate) > -1)
typeParam.remove(cate);
} else {
if (typeParam.indexOf(cate) == -1)
typeParam.push(cate);
}
}
$("#typeParam").val(typeParam.toString().replace(re, "A"));
}
/*类别判断*/
if (category != undefined) {
if (category == "category") {
$('.type-table [data-category]').removeClass('active'); cateParam = [];
} else {
$('[data-category="category"]').removeClass('active');
if (className == 'active') {
if (cateParam.indexOf(cate) > -1)
cateParam.remove(cate);
} else {
if (cateParam.indexOf(cate) == -1)
cateParam.push(cate);
}
}
$("#cateParam").val(cateParam.toString().replace(re, "A"));
}
/*职位判断*/
if (position != undefined) {
if (className == 'active') {
if (posParam.indexOf(cate) > -1) posParam.remove(cate);
} else {
if (posParam.indexOf(cate) == -1) posParam.push(cate);
}
$("#posParam").val(posParam.toString().replace(re, "A"));
}
/************ 选项卡点击事件结束 ****************/
if (className == 'active') {
me.removeClass("active");
} else {
me.addClass("active");
}
var re = new RegExp(",", "g"); //定义正则表达式 这里是我用来分隔参数用的
if (typeParam.length > 0) {
$("#typeParam").val(typeParam.toString().replace(re, "A"));
}
if (cateParam.length > 0) {
$("#cateParam").val(cateParam.toString().replace(re, "A"));
}
if (posParam.length > 0) {
$("#posParam").val(posParam.toString().replace(re, "A"));
}
});
});
Array.prototype.indexOf = function (val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
Array.prototype.remove = function (val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
附件 getUrlParam() 方法实现代码:主要是获取 URL 中参数的 Key 和 value
/**
* 获取浏览器参数
* @param {any} url
*/
function getUrlParam(url) {
var queryArr = (url && url.substr(url.indexOf('?') + 1).split('&')) ||
location.search.substr(1).split('&'),
query = {};
for (var i = 0, len = queryArr.length; i < len; i++) {
var key = queryArr[i].split('=')[0],
val = queryArr[i].split('=')[1];
if (query.hasOwnProperty(key)) {
if (!Array.isArray(query[key])) {
query[key] = [query[key]]
query[key].push(val)
} else {
query[key].push(val)
}
continue
}
query[key] = val
}
return query
}
四、结语
分享到这里结束,可能代码有点多不好看懂。不过没关系,有不懂的地方可以联系我,我们一起学习一起进步!
js前端 多条件筛选查询的更多相关文章
- Django多条件筛选查询
转自:https://www.jianshu.com/p/a86281df530e Django多条件筛选查询 主模型只存在外键一对多关系 模型设计 # 快捷筛选状态 class Status(mod ...
- HBase多条件筛选查询方案
最近的项目需要使用Hbase做实时查询,由于Hbase只支持一级索引,也就是使用rowkey作为索引查询,所以对于多条件筛选查询的支持不够,在不建立二级索引的情况下,只能使用Hbase API中提供的 ...
- c#中如何不通过后台直接用js筛选gridview中的数据条件筛选查询?
js: //条件筛选 var showstate = true; function imagechange() { if (showstate) { $('#_toggle').hide(500, f ...
- sql条件为空查询全部,不为空按条件查询以及多条件筛选查询。
procedure queryLackLonOrLatTdCell(i_region_name varchar2, i_state varchar2) is begin select region_n ...
- js 根据 数组条件 简单查询的方法临时保存
let array = [{ date: '2016-05-02', name: 'Ethan', status: 'success', total: '81' }, { date: '2016-05 ...
- JS前端数据多条件筛选(商品搜索)
有时候也会需要在前端进行数据筛选,增强交互体验.当数据可用的筛选条件较多时,把逻辑写死会给后期维护带来很大麻烦.下面是我自己写的一个简单的筛选器,筛选条件可以根据数据包含的字段动态设置. 仿照京东的筛 ...
- JDBC动态查询MySQL中的表(按条件筛选)
动态查询实现按条件筛选.PreparedStatement 准备语句指定要查询的表头列,.setString()通过赋值指定行,.executeQuery()执行语句 在数据库test里先创建表sch ...
- Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询
在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...
- 齐博x1where 标签动态变量查询/where 实现条件筛选与数据关联
大家可能对union参数不太习惯的话,也可以用where语句加入动态变量查询,比如 where="fid=$fid&uid=$info[uid]&pid>=$info. ...
随机推荐
- 后缀数组 TYVJ P1860 后缀数组
/*P1860 后缀数组时间: 1000ms / 空间: 131072KiB / Java类名: Main描述 我们定义一个字符串的后缀suffix(i)表示从s[i]到s[length(s)]这段子 ...
- Shadows 使用说明
1:下载最新版 Windows地址:点击下载 Mac地址:点击下载 2:Windows安装插件(点击下方插件名即可下载) .NET Framework 4.7.2和 Microsoft Visual ...
- linux 编写定时任务,查询服务是否挂掉
shell 脚本 #!/bin/bash a=`netstat -unltp|grep fdfs|wc -l` echo "$a" if [ "$a" -ne ...
- [SDOI2015]序列统计(NTT+求原根)
题目 [SDOI2015]序列统计 挺好的题!!! 做法 \(f[i][j]\)为第\(i\)个数前缀积在模\(M\)意义下为\(j\) 显然是可以快速幂的:\[f[2*i][j]=\sum\limi ...
- meshing-划分圆柱结构化网格
原视频下载地址:https://yunpan.cn/cqjeckrzEpVkY 访问密码 eb5d
- 米津玄師 - Lemon
Lemon 词:米津玄師 曲:米津玄師 夢(ゆめ)ならば どれほどよかったでしょう 未(いま)だにあなたのことを夢(ゆめ)にみる 忘(わす)れた物(もの)を 取(と)りに帰(かえ)るように 古(ふる) ...
- Java 代码里乱打日志了,这才是正确的打日志姿势
使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一. 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能 ...
- SpringBoot + Vue前后端分离图片上传到本地并前端访问图片
同理应该可用于其他文件 图片上传 application.yml 配置相关常量 prop: upload-folder: E:/test/ # 配置SpringMVC文件上传限制,默认1M.注意MB要 ...
- ubuntu虚拟机安装及vim配置问题(转载)
virtual box虚拟机Ubuntu系统安装及共享文件夹建立 https://blog.csdn.net/qq_27905767/article/details/82106753 Linux超全v ...
- 用了pm2之后,如何让console.log('..')出现在控制台
使用 pm2 log 0 可以查看.当然这个 0 应该是应用的 id