基于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 相关文章推荐
JavaScript 高级语法介绍
Jun 15 Javascript
javascript 精粹笔记
May 09 Javascript
js实现的map方法示例代码
Jan 13 Javascript
jQuery表格排序组件-tablesorter使用示例
May 26 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
Sep 06 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
Oct 20 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
Sep 17 Javascript
Bootstrap的基本应用要点浅析
Dec 19 Javascript
mui上拉加载功能实例详解
Apr 13 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 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
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
利用php生成验证码
2017/02/23 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
2019/08/03 PHP
js实现简单div拖拽功能实例
2015/05/12 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
js实现简单进度条效果
2020/03/25 Javascript
python实现批量改文件名称的方法
2015/05/25 Python
Python 多线程的实例详解
2017/09/07 Python
python之文件读取一行一行的方法
2018/07/12 Python
python hook监听事件详解
2018/10/25 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python返回数组的索引实例
2019/11/28 Python
Python实现word2Vec model过程解析
2019/12/16 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
教师学习培训邀请函
2014/02/04 职场文书
史上最牛辞职信
2015/05/13 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
行政处罚告知书
2015/07/01 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
box-shadow单边阴影的实现
2023/05/21 HTML / CSS