一、前言

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

二、效果截图

三、实现代码

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

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. CDW数学小笔记

    今天我们来做一道题目. 输入正整数\(n\)(\(\le 10^{15}\)),求\(x^2+y^2=n^2\)的整数解的个数. 也就是圆心为原点,半径为\(n\)的圆上整点的数量. 为了得到更普遍的 ...

  2. java1.8新特性之stream流式算法

    在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: List& ...

  3. c++ yaml-cpp 安装

    环境: Ubuntu14. 下载cmake(我使用的是3.1.0) https://cmake.org/files/v3.1/ tar -xvf cmake--Linux-x86_64.tar.gz ...

  4. php手记之03-tp5渲染视图

    // 渲染视图 模块@文件/文件名 // return view('index@index/test'); // return view('index@test/test'); // return $ ...

  5. php如何生成 uuid(总结)

    php如何生成 uuid(总结) 一.总结 一句话总结: UUID的全拼为“Universally Unique Identifier”,可以译为“通用唯一识别码”. UUID是指在一台机器上生成的数 ...

  6. 使用IOCP完成端口队列做任务队列

    使用IOCP完成端口队列做任务队列 与其自己费力设计异步任务队列,不如使用WINDOWS内核级的IOCP完成端口队列做任务队列. 1)引用单元 uses windows; 2)定义完成端口句柄 var ...

  7. pecl和pear 的区别和联系

    Pear:是PHP的扩展代码包,所有的扩展均以PHP代码的形式出现,功能强大,安装简单,甚至可以改改就用.使用的时候,要在代码中进行Include才能够使用. Pecl:是PHP的标准扩展,可以补充实 ...

  8. linux下安装pm2,pm2: command not found

    1:安装pm2 操作描述: 你要在linux上安装pm2有很多方法,但我是用node的工具npm来完成安装的,所以在安装pm2之前需要先安装node.这里如果不会,就百度一个安装node,这个小事我就 ...

  9. android studio: 实现类似于XCode中的#pragma mark的效果

    代码行数写多了,想找一个指定的方法真困难,关键有时候记不住方法的名字,用Ctrl+O也不好使,突然想到以前做iOS开发时,XCode里有一个#pragma mark的功能,很好用:在代码中定义这样一个 ...

  10. android滑动标题栏渐变实现

    import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.sup ...