我正在制作一个包含ajax搜索的所有ajax网站。输入时,我的搜索会将网址更改为此/#!/search/Query Here/
。我已经能够检测到/search/
但是只有在没有搜索查询的情况下我才能直接输入它。如果我有查询,我的代码不会处理它,因为它不匹配。有没有办法让我只检测粗体/#! / search / 查询此处/。这是我目前的代码:
var oldLoc = window.location.hash.replace(/^#\!/,"");
if (oldLoc == '/search/') {
$('#reload_section').load('search.php');
$('.nav_itm.home').removeClass('active');
$('.nav_itm.account').removeClass('active');
_currentScreen = 6;
}
所以我再次检测到它并加载搜索页面,但如果我在那里抛出一个查询,该网站只会加载主页。如何将/search/
之后的所有内容分隔成不同的字符串并将其放在变量oldLoc
上。谢谢!
答案 0 :(得分:1)
您可以使用正则表达式,如下所示(请根据需要更改以合并到您的示例中):
var url = 'http://www.example.com/page/#!/search/Query Here/';
var m = /(.*\/#!\/search\/)([^\/]+)/.exec(url);
if(m) {
$('#msgs').text('match: ' + m[1] + ' ----- ' + m[2]);
} else {
$('#msgs').text('no match');
}
有关可用于测试的工作示例,请参阅此jsFiddle:
有关上述内容的更多信息,请参阅以下内容:
答案 1 :(得分:0)
Regexp似乎没必要。
如果我理解正确,并且假设您不关心序列号,那么您应该能够使用更经济的indexOf()
。
的javascript:
if (window.location.hash.replace('#','').indexOf('/search/option') == 1 ) {
...
}
replace('#','')
是必要的,因为有些浏览器在location.hash
中包含“#”而有些浏览器不包括“#”。通过删除“#”(如果存在),您可以测试indexOf(...) == 1
,这比indexOf(...) > -1 )
更具体。