jQuery若然后使用URL解析器插件,必须有一个更优雅的解决方案

时间:2009-04-25 01:58:13

标签: jquery url parsing

这是我在这个相当狡猾的网站上发表的第一篇文章,如果在其他地方已经讨论过这个问题,我会很容易(如果有的话我找不到它)。

我正在使用此处的JQuery URL解析器插件:http://projects.allmarkedup.com/jquery_url_parser/

我可以让它做我想要的但是代码效率很低。我有一个隐藏div的集合,在点击相关标题时打开。我正在使用URL解析器,这样如果从另一个页面点击链接,则相关的div可见。

我的代码如下所示:

if 
(jQuery.url.attr('anchor') == 'question1'){
    $('#answer1').show();
}
else if
(jQuery.url.attr('anchor') == 'question2'){
    $('#answer2').show();
}
else if
(jQuery.url.attr('anchor') == 'question3'){
    $('#answer3').show();
}
else if
(jQuery.url.attr('anchor') == 'question4'){
    $('#answer4').show();
}
else if
(jQuery.url.attr('anchor') == 'question5'){
    $('#answer5').show();
}
else if
(jQuery.url.attr('anchor') == 'question6'){
    $('#answer6').show();
}
else if
(jQuery.url.attr('anchor') == 'question7'){
    $('#answer7').show();
}
else if
(jQuery.url.attr('anchor') == 'question8'){
    $('#answer8').show();
};

正如你所看到的,这是漫长的啰嗦。我真正希望能够做的是获取URL末尾的数字并将其附加到#answer,以便更紧凑。我试图将(jQuery.url.attr('anchor')的结果分配给变量,但我在完成此任务时遇到了一些麻烦。任何帮助都将不胜感激!

2 个答案:

答案 0 :(得分:10)

var match = jQuery.url.attr('anchor').match(/^question([0-9]+)$/);
if (match && match.length > 0) {
    $('#answer' + match[1] ).show();
}

更新

答案 1 :(得分:1)

您也可以在一行中为此类代码执行此操作。

$('#answer' + $.url.attr('anchor').match(/question(\d+)|(.*)/)[1]).show();

现在,这种技术可能需要一些解释。基本上,你在这里做的是试图找到一个包含问题(n)的字符串,其中'question(n)'是第一个匹配,(n)是第二个匹配。现在,如果没有找到,那么“|(.*)”会说“OR Anything”,因为它包含在一个()中。*任何东西都是第一个匹配和第二个匹配。

成功比赛你正在打电话

$('answer' + '1').show();

如果比赛失败,则您正在致电

$('answer' + '').show();  // where $('answer' + '').length == 0

什么也没做。

如果你想对它不区分大小写,请将它用作正则表达式。

/question(\d+)|(.*)/i