基于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 相关文章推荐
html文本框提示效果的示例代码
Jun 28 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
Mar 03 Javascript
javascript数据结构之双链表插入排序实例详解
Nov 25 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
Jun 21 Javascript
javascript回到顶部特效
Jul 30 Javascript
Vue.use源码分析
Apr 22 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
May 14 Javascript
JavaScript页面倒计时功能完整示例
May 15 Javascript
angular4应用中输入的最小值和最大值的方法
May 17 Javascript
javascript function(函数类型)使用与注意事项小结
Jun 10 Javascript
Javascript Web Worker使用过程解析
Mar 16 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
angular5 httpclient的示例实战
2018/03/12 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
在Python程序中操作MySQL的基本方法
2015/07/29 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
可靠的数据流传输TCP
2016/03/15 面试题
自荐信怎么写好
2013/11/11 职场文书
办护照工作证明范本
2014/01/14 职场文书
高中自我评价范文
2014/01/27 职场文书
《学棋》教后反思
2014/04/14 职场文书
社区两委对照检查材料
2014/08/23 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
幼儿教师个人总结
2015/02/05 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL