JQuery检查并从URL末尾删除斜杠

10
在一个 jQuery 脚本中,我有一行代码可以获取当前 URL 的字符串:
var target = $(this).attr('href');

这个脚本中的代码能否检查URL字符串末尾是否有斜杠。如果存在,则将其删除?您推荐的方式是什么?


2
只是为了明确起见:"/" 是 斜杠,而 "" 是 反斜杠 - Pointy
4个回答

24

我会这样做:

 target = target.replace(/\/$/, '');

如果您需要考虑查询字符串的存在:

 <a href='http://foo.bar.com/something/?param=xyz'>hi</a>

然后事情就变得有点棘手了。使用正则表达式解析URL可能是可行的,但很杂乱。如果可以这样做,缩小你的URL的可能性范围,这样你就不必使用一些巨大的“官方”模式。


1
更好的是,继续使用jQuery链式风格并执行var target = $(this).attr('href').replace(/\/$/,''); - Martin Jespersen
@Martin Jespersen 是的,在实际代码中,这可能是我要做的(也许),但我希望示例在“好”的部分上非常清晰明了。 - Pointy
如何去掉文本开头的斜杠? - ARUN

4
这应该对带有查询字符串的URL也是安全的,而且它不使用正则表达式...
var urlEnd = target.indexOf("?");
if(urlEnd == -1){
    urlEnd = target.length;
}

// Don't bother doing anything if the URL is empty
if (urlEnd > 0){
    if (target[urlEnd - 1] == "/"){
        $(this).attr('href', target.substr(0, urlEnd-1) + target.substr(urlEnd));
    }    
}

2

假设你指的是斜杠,一种可能的解决方案如下:

var l = target.length - 1;
if(target.lastIndexOf('/') === l) {
    target = target.substring(0, l);
}

0
你可以使用正则表达式来实现:

target.replace(//+((\?|#).*)?$/, '$1');

这样可以保留URL末尾的查询字符串或URL片段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接