如果JQuery然后使用URL解析器插件,必须有一个更优雅的解决方案!

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

我正在使用这里找到的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’)的结果分配给变量,但是我在完成此操作时遇到了一些麻烦。任何帮助都将不胜感激!

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

更新。

对于像这样的代码,您也可以在一行中执行此操作。

 $('#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