如何使用jQuery将斜杠更改为URL中的哈希?

时间:2010-08-26 20:15:09

标签: javascript jquery url-rewriting

我需要用URL中的哈希替换斜杠。其他一切都保持不变。
例如: -
这个:

www.example.com/main/events/event-1  

需要更改为:

www.example.com/main/events#event-1  

(jQuery解决方案是最佳的,插件OK)

根据OP的评论进行更新:

使用此代码:

function outputStatus(e)
{
  if (e.success && $.url.segment(1) == 'events')
  {
    // IF Flash SWF loads success AND on events page
    var url = $.url.attr('source'); // gets current URL
    var new_url = url.replace(/\/([^\/]+)$/, "#$1"); // replaces last slash with a hash
    window.location = new_url; // sets the current URL to the new URL
  }
}

网址已更改两次(因此www.example.com/main/events/event-1正变为www.example.com/main/events#event-1,然后变为www.example.com/main#events#event-1

2 个答案:

答案 0 :(得分:5)

不需要jQuery,Javascript具有本机字符串替换方法。

var url = "www.example.com/main/events/event-1"
var new_url = url.replace(/\/([^\/]+)$/, "#$1");
alert(new_url);

/\/([^\/]+)$/将匹配最后一个斜杠及其后的所有内容,直到字符串结束。第二个参数中的$1是模式中创建的组的backreference(包含最终斜杠后的所有内容)。 Try it out


<强>更新

我的猜测是你的outputStatus函数被多次调用,因此被多次替换。您可以先检查网址中是否存在#来避免这种情况:

if (url.indexOf('#') == -1) // # is not found
{
  var new_url = url.replace(/\/([^\/]+)$/, "#$1");
}
如果找到值,

String#indexOf将返回一个位置,如果没有,则返回-1。

或者(因为您似乎正在使用jQuery URL Parser,对吗?),您可以在修改$.url.attr('anchor')变量之前检查是否存在url

答案 1 :(得分:1)

试试这个:

var str = "www.example.com/main/events/event-1";

var idx = str.lastIndexOf('/');

var res = str.substr(0,idx) + '#' + str.substr(idx + 1);

或者这个:

var str = "www.example.com/main/events/event-1"

var res = str.replace(/\/([^/]+)$/,'#$1');