我正在添加搜索功能,如果用户在搜索结果上并刷新页面,我希望它保留在该搜索中。我已经将搜索查询放入URL中,但我不知道如何检索它。它很可能需要正则表达式,所以任何有regexp经验的人都请帮忙。
以下是我将其放入网址的方式:
function trimspace(str) {
str = str.replace(/ +(?= )/g, '');
return str;
}
function searchMail() {
var query = trimspace($('#search_input').val());
if (query == '' || !query || query == null) {
$('#search_input').focus();
}
else {
window.location.hash = '#!/search/' + query;
$('#loader').show();
$.get('tools.php?type=search', { q: query }, function(data, textStatus) {
$('#loader').hide();
if (textStatus == 'success') {
hideAllTabs();
$('#search_results').html(data).show();
document.title = "Search results - WeeBuild Mail";
}
else {
alertBox('Search failed. Please try again in a few minutes.', 2500);
}
});
}
}
除了检索查询之外,我还需要能够检测哈希值是否为#!/search/query
。
提前致谢!
答案 0 :(得分:3)
检测查询是否为#!/search/query
:
location.hash==='#!/search/query'
假设查询为#!/search/query
:
var parts = location.hash.split('/');
parts[0]
是#!
。 parts[1]
为search
,parts[2]
为test
。如果想要你想要的零件,那么现在就应该做得很轻松了。
回应评论:
function getPartAndRemainder(){
var parts = location.hash.split('/');
if(parts[0]!=='#!' || parts.length<2){
// Value after # does not follow the expected pattern #!/part/any_parameters
throw new Error('Cannot parse application part.');
}
return {
// Contains the part of your application (word after first slash after #)
part: parts[1],
// Contains everything after second slash after # or the empty string
remainder: location.hash.substring(
// Length of #! (or whatever somebody might use instead)
parts[0].length
// Length of first slash
+1
// Length of your application part's name
+parts[1].length
// Length of the second slash
+1)
};
}
该函数在键part
处返回一个包含应用程序部分的对象,remainder
键将包含其余部分。因此,如果您的URI为something#!/search/test
,则该函数将返回{part:'search', remainder:'test'}
。
如果无法解析URI,您将收到错误,然后您应该使用合理的默认值。
每当哈希值发生变化时,或者在您对哈希值感兴趣的某个其他事件(时间点),您将使用以下方法:
try {
var hashValue = getPartAndRemainder();
if(hashValue.part==='search'){
var query = hashValue.remainder;
alert('You searched: '+query)
}
if(hashValue.part==='inbox'){
alert('You are in inbox, now');
}
} catch(e){
// It was not possible to parse the value after the # from URI according to our expected pattern.
alert('No idea what to do with: '+location.hash);
}
答案 1 :(得分:1)
此正则表达式将匹配搜索参数之后的任何内容,这是您要查找的内容吗?
/#1/search/(.*)/
答案 2 :(得分:0)
var match = /\/.*\/.*\/(.*)\//i.exec(location.hash)
//match contain the query