基于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 相关文章推荐
jQuery入门知识简介
Mar 04 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
Oct 21 Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 Javascript
利用JS实现简单的日期选择插件
Jan 23 Javascript
详解ECMAScript6入门--Class对象
Apr 27 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
Jul 23 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
详解JavaScript的数据类型以及数据类型的转换
Apr 20 Javascript
vue实现拖拽的简单案例 不超出可视区域
Jul 25 Javascript
layui禁用侧边导航栏点击事件的解决方法
Sep 25 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&amp;&amp;mysql)五
2006/10/09 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python打印异常信息的两种实现方式
2019/12/24 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
优秀部门获奖感言
2014/02/14 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
党在我心中演讲稿
2014/09/02 职场文书
写给老师的保证书
2015/05/09 职场文书
西游降魔篇观后感
2015/06/15 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server