jQuery通配符字符串

时间:2012-02-21 02:46:48

标签: jquery ajax

我正在制作一个包含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上。谢谢!

2 个答案:

答案 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 )更具体。