基于JavaScript实现类似于百度学术高级检索功能


Posted in Javascript onMarch 02, 2016

百度学术http://xueshu.baidu.com/高级检索是通过前台生成后台内部高级语法来实现高级检索的,可以通过前台js做字符串拼接传给后台实现,难度不大:

下面是高级检索的核心功能代码,我使用的是纯js实现,并未使用jquery:

<p class="fl srh-btn">
<input type="submit" class="srh-submit" style="height:px" value="高级搜索" id="highSearchObj"/>
</p> 
//省略部分调用关系
this.highSearch = function () {
document.getElementById('highSearchObj').disabled=true; 
var highSearchHtml = '<div class="highSearch" style="display:block"><div class="highMsg"><ul> \
<li><span id="tabReg" class="tab">包含关键词</span><input id="kywds" value=""></li> \
<li><span id="tabReg" class="tab">不包含关键词</span><input id="nokywds" value=""></li>\
<li><span id="tabReg" class="tab">检索范围</span>\
<select id="st">\
<option value ="byrw">本院认为</option>\
<option value ="sljg">审理经过</option>\
<option value="ygsc">原告诉称</option>\
<option value="bgbc">被告辩称</option>\
</select></li>\
</ul>\
<input id="conditionObj" type="submit" value="新增一组条件"></input>\
<hr>\
<div class="fit">\
<select id="type">\
<option value ="all">全部</option>\
<option value ="pj">判决</option>\
<option value ="cd">裁定</option>\
<option value="tz">通知</option>\
<option value="jd">决定</option>\
<option value="tj">调解</option>\
</select><select id="round">\
<option value ="all">全部</option>\
<option value ="one">一审</option>\
<option value ="two">二审</option>\
<option value="again">再审</option>\
</select>\
<input id="bg" value="">-<input id="end" value="">\
<ul><li><span id="tabReg" class="tab">案由</span><input id="ay" value=""></input></li>\
<li><span id="tabReg" class="tab">法院</span><input id="fy" value=""></input></li>\
</ul></div>\
<ul id="sql"></ul>\
<input id="submitHighSearchObj" type="submit" value="提交高级搜索"></input>\
</div></div>';
this.highSearchObj = $(highSearchHtml);
$("body").append(this.highSearchObj);
$("#conditionObj").click(function(){
var kywds="\""+document.getElementById("kywds").value.split(" ").join("\"&\"")+"\"";
var st=document.getElementById("st").value;
var nokywds="\""+document.getElementById("nokywds").value.split(" ").join("\"|\"")+"\"";
var sql="<li name=\"highTag\">@("+st+")("+kywds+"-"+nokywds+")</li>";
$("#sql").append(sql);
})
$("#submitHighSearchObj").click(function(){
var highTags=document.getElementsByName("highTag");
var tags="";
var filters="";
var round=document.getElementById("round").value;
var type=document.getElementById("type").value;
var reason=document.getElementById("ay").value.split(" ").join(",");
var court=document.getElementById("fy").value.split(" ").join(",");
var begin=document.getElementById("bg").value;
var end=document.getElementById("end").value;
if(highTags.length==){
var kywds="\""+document.getElementById("kywds").value.split(" ").join("\"&\"")+"\"";
var st=document.getElementById("st").value;
var nokywds="\""+document.getElementById("nokywds").value.split(" ").join("\"|\"")+"\"";
tags="@("+st+")("+kywds+"-"+nokywds+")"; 
} else {
for(i=;i<highTags.length;i++){
tags+=highTags[i].innerHTML;
} 
}
if(round !="all") {
filters+=" round:"+round+";";
}
if(type !="all") {
filters+=" type:"+type+";";
}
if(reason !="") {
filters+=" reason:"+reason+";";
}
if(court !="") {
filters+=" court:"+court+";";
}
if(begin !="" && end !="") {
filters+=" year:";
while(begin<=end) {
filters=filters+begin+",";
begin++;
}
}
if(filters !="") {
tags="magic:"+tags+";filter:"+filters;
}
var formObj = $('<form id="form" action="/search" target="_self" method="get"></form>');
var html = ['<input type="hidden" name="type" value="">'];
html.push('<input type="hidden" name="keyword" value="' + encodeURIComponent(tags) + '">');
html.push('<input type="hidden" name="TypeKey" value="' + encodeURIComponent(tags) +'">');
formObj.html(html.join(","));
$("body").append(formObj);
formObj.submit();
});
// $("#ay").keyup(function(e){
// });
}

第3行到第36行主要是弹窗的HTML代码。

37,38行使用了js中常用的最简单的在页面中动态修改前台的方法。

第39行和第46行均为对新增代码的动作处理,用于提交条件和子条件。

在第46行的函数里面,做了对字符串的拼接处理。

在第88行到第96行,实现了通过隐藏表单提交查询条件的js+html调用。

jquery js实现高级条件检索功能中检索条件切换

基本思路:

1.HTML:

使用table展示所有检索条件,使用input控件展示每一个检索条件,定义两种CSS类样式,用以区分检索条件的选中与未选中状态

2.JS实现:

为未选中的input绑定点击事件,可通过绑定未选中的样式类来实现,代码实现

function (event) {//event为点击事件
$(event.target).parent().find( '.条件input-selected' ).toggleClass('条件input-selected' ).toggleClass( '条件input-default');
$(event.target).toggleClass( '条件input-selected' ).toggleClass('条件input-default' );
},

此时就实现了所有检索条件的自动切换

Javascript 相关文章推荐
Extjs中RowExpander控件的默认展开问题示例探讨
Jan 24 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
javascript实现画不相交的圆
Apr 07 Javascript
Jquery Easyui表单组件Form使用详解(30)
Dec 19 Javascript
jQuery实现用户输入自动完成功能
Feb 13 Javascript
js实现下一页页码效果
Mar 07 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
JS判断微信扫码的方法
Aug 07 Javascript
vue 国际化 vue-i18n 双语言 语言包
Jun 07 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
详解ES6 Fetch API HTTP请求实用指南
Nov 14 Javascript
Vue关于组件化开发知识点详解
May 13 Javascript
js密码强度实时检测代码
Mar 02 #Javascript
js+css实现回到顶部按钮(back to top)
Mar 02 #Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 #Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
Mar 01 #Javascript
jquery自定义右键菜单、全选、不连续选择
Mar 01 #Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
Mar 01 #Javascript
详解Wondows下Node.js使用MongoDB的环境配置
Mar 01 #Javascript
You might like
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
分享一下贝贝成长进度的php代码
2012/09/14 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
Js的MessageBox
2006/12/03 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
jquery each()源代码
2011/02/14 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
详解Python中namedtuple的使用
2020/04/27 Python
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
How TDD works
2012/09/30 面试题
素食餐饮项目创业计划书
2014/02/02 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
见义勇为事迹材料
2014/12/24 职场文书
成绩单评语
2015/01/04 职场文书
长城的导游词
2015/01/30 职场文书