在我的网络应用程序中,我使用文本框和附加了jQuery onclick事件处理程序的按钮实现了搜索功能。每个按钮触发不同的搜索处理程序。
HTML
<input id="searchText" placeholder="What are you looking for?" type="text" />
<div id="searchLinksBar">
<a href="/search">All</a>
<a href="/search/downloads">Downloads</a>
<a href="/search/kb">Knowledge Base</a>
</div>
的jQuery
"use strict";
$(document).ready(function() {
$("#searchLinksBar a").click(function() {
//Get content from the selected anchor
var categoryURL = $(this).attr("href");
//Get search string
var searchText = $("#searchText").val();
var searchString = ToQueryString(searchText);
//Check if the search bar is filled
if(searchString.trim()){
categoryURL = categoryURL + "&str="
}
//Attach the two strings to get our full URL
var searchUrl = categoryURL + searchString;
window.location.href = searchUrl;
return false;
})
});
function ToQueryString(text) {
return text.replace(/ /g, "+");
}
搜索效果很好,除非用户想要通过在引号中包含多个单词来搜索精确短语。不应该是&#39; +&#39;引号内的单词之间的符号,否则处理程序不能按预期工作。我可能会想到一个使用正则表达式的解决方案,或者使用concat和split函数(见下文)将引号中的单词与带引号的单词分开并放在数组中,但也许有一个更优雅的解决方案
var phrases = [].concat.apply([], text.split('"').map(function(v,i){
return i%2 ? '"'+v+'"' : v.split(' ')
})).filter(Boolean);