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. ...
随机推荐
- Linux操作系统常用命令合集——第二篇- 用户和组操作(15个命令)
一.前言:本篇介绍用户和组操作的15个命令,在介绍之前我们先来看看几个示例 1.先进入到etc目录下,找到passwd文件,用vi编辑器查看: # vi /etc/passwd 解释:这里面存放着Li ...
- P2543 [AHOI2004]奇怪的字符串
题目描述 输入输出格式 输入格式: 输入文件中包含两个字符串X和Y.当中两字符串非0即1.序列长度均小于9999. 输出格式: X和Y的最长公共子序列长度. 输入输出样例 输入样例#1: 复制 010 ...
- P2401 不等数列
题目描述 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有k个“<”.答案对2015取模. 注:1~n的排列指的是1 ...
- TCP数据的传输过程
建立连接后,两台主机就可以相互传输数据了.如下图所示: 上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程.首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 ...
- 1825:【01NOIP提高组】数的划分
#include<bits/stdc++.h> using namespace std; ],tot; void dfs(int num,int pos) { if(pos==k) ]) ...
- spring boot 之登录笔记
在测试平台的开发中,会牵涉到登录内容,页面需要登录后才能访问,所以,对于登录的开发是很有必要的.本文记录我在系统登录的一些自己的做法. 首先对登录进行设计. 如下: 1.登录密码输入错误超过次数限制 ...
- sonar,jiar,xray,jenkins[cli] [sudoers]
curl -n -X POST http://52.83.39.59:8080'/job/CLA_SSO/buildWithParameters?token=11d710a8eac8012bea28b ...
- Hibernate HQL和QBC
OID查询 一.什么是OID查询 根据对象的OID主键进行检索 二.OID查询方式 1. get方法 当get()方法被调用的时候就会立即发出SQL语句 并且返回的对象也是实际的对象 使用get()和 ...
- nginx里面的location 规则匹配
nginx location语法 ~ # 区分大小写的正则匹配 location ~ \.(gif|jpg|png|js|css)$ { #规则D } ~* # 不区分大小写的正则匹配(和~的功能相同 ...
- PorterDuffXfermode之PorterDuff.Mode.SRC_OUT
package com.loaderman.customviewdemo.view; import android.content.Context; import android.graphics.B ...