这是我在这个相当狡猾的网站上发表的第一篇文章,如果在其他地方已经讨论过这个问题,我会很容易(如果有的话我找不到它)。
我正在使用此处的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')的结果分配给变量,但我在完成此任务时遇到了一些麻烦。任何帮助都将不胜感激!
答案 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