>웹 프론트엔드 >JS 튜토리얼 >JavaScript_javascript 기술을 기반으로 Baidu Academic과 유사한 고급 검색 기능 구현

JavaScript_javascript 기술을 기반으로 Baidu Academic과 유사한 고급 검색 기능 구현

WBOY
WBOY원래의
2016-05-16 15:12:342610검색

Baidu Academichttp://xueshu.baidu.com/고급 검색은 백엔드에서 내부 고급 구문을 생성하는 프런트엔드를 통해 이루어집니다. 프런트엔드에서 문자열 접합을 통해 구현할 수 있습니다. -end 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:

테이블을 사용하여 모든 검색 조건을 표시하고, 입력 컨트롤을 사용하여 각 검색 조건을 표시하며, 두 개의 CSS 클래스 스타일을 정의하여 검색 조건의 선택 상태와 선택되지 않은 상태를 구분합니다

2.JS 구현:

선택되지 않은 입력에 대한 클릭 이벤트 바인딩은 선택되지 않은 스타일 클래스 바인딩, 코드 구현을 통해 달성할 수 있습니다

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

이 시점에서 모든 검색 조건의 자동 전환이 이루어집니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.