一、前言

  在做项目中,遇到多条件筛选案例。实现完成以后,我将我做的代码分享在这里,希望可以帮助到其他朋友。

二、效果截图

三、实现代码

  首先我先类型、类别、职位分成三块来处理,如果传到服务器端的话,就是三个参数。

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前端 多条件筛选查询的更多相关文章

  1. Django多条件筛选查询

    转自:https://www.jianshu.com/p/a86281df530e Django多条件筛选查询 主模型只存在外键一对多关系 模型设计 # 快捷筛选状态 class Status(mod ...

  2. HBase多条件筛选查询方案

    最近的项目需要使用Hbase做实时查询,由于Hbase只支持一级索引,也就是使用rowkey作为索引查询,所以对于多条件筛选查询的支持不够,在不建立二级索引的情况下,只能使用Hbase API中提供的 ...

  3. c#中如何不通过后台直接用js筛选gridview中的数据条件筛选查询?

    js: //条件筛选 var showstate = true; function imagechange() { if (showstate) { $('#_toggle').hide(500, f ...

  4. sql条件为空查询全部,不为空按条件查询以及多条件筛选查询。

    procedure queryLackLonOrLatTdCell(i_region_name varchar2, i_state varchar2) is begin select region_n ...

  5. js 根据 数组条件 简单查询的方法临时保存

    let array = [{ date: '2016-05-02', name: 'Ethan', status: 'success', total: '81' }, { date: '2016-05 ...

  6. JS前端数据多条件筛选(商品搜索)

    有时候也会需要在前端进行数据筛选,增强交互体验.当数据可用的筛选条件较多时,把逻辑写死会给后期维护带来很大麻烦.下面是我自己写的一个简单的筛选器,筛选条件可以根据数据包含的字段动态设置. 仿照京东的筛 ...

  7. JDBC动态查询MySQL中的表(按条件筛选)

    动态查询实现按条件筛选.PreparedStatement 准备语句指定要查询的表头列,.setString()通过赋值指定行,.executeQuery()执行语句 在数据库test里先创建表sch ...

  8. Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询

    在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...

  9. 齐博x1where 标签动态变量查询/where 实现条件筛选与数据关联

    大家可能对union参数不太习惯的话,也可以用where语句加入动态变量查询,比如 where="fid=$fid&uid=$info[uid]&pid>=$info. ...

随机推荐

  1. Oracle 绑定变量窥视

    绑定变量窥视功能是数据库的一个特性,自ORACLE9i版本开始引入,默认是开启的. “绑定变量窥视”表示,查询优化器在第一次调用游标时,会观察用户定义的绑定变量的值,允许优化器来确认过滤条件的选择性, ...

  2. 10分钟教你用eclipse上传代码到GitHub

    关注我们的公众号哦!获取更多精彩消息! 好久没有更新了,这两天小编在整理以前的代码,上传到GitHub做备份. 加上现在GitHub的私有仓库不是免费了嘛,所以今天顺便给大家讲讲怎么用eclipse上 ...

  3. 新的log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?> <!-- OFF < FATAL < ERROR & ...

  4. mac 安装 mysql 5.7

    下载 https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下一步,经过一系列安装步骤后,会跳出一个这样的界面,请注意!!! 上面红框中是你 ...

  5. zabbix(9)iterms(监控项)

    一.iterms key 监控项按参数来分有两种:带参数和不带参 按定义来分:zabbix自带和用户自定义 1)Key可以带参数,该参数为一个数组列表,可以同时传递多个参数,Key的格式如下: 既Ke ...

  6. hello world&Restart the Journey

      一个女OIer. 总结,游记,集训日志在博客园:题解大多在洛谷. 洛谷博客点这里. $\texttt{ You can go on,just take me with you.}$ 可以叫我Har ...

  7. js 返回两数(包含这两数)之间的随机数函数

    function selectFrom( lowerValue, upperValue ){ var choices = upperValue - lowerValue + 1; return Mat ...

  8. linux查看文件的编码格式的方法 set fileencoding

    查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中 可以直接查看文件编码:set fileencoding即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决 用 ...

  9. 阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08

    阿里巴巴微服务与配置中心技术实践之道 原创: 坤宇 InfoQ 2018-02-08

  10. keras损失函数

    keras文档:  http://keras.io/objectives/ mean_squared_error / mse  均方误差,常用的目标函数,公式为((y_pred-y_true)**2) ...