我如何提取然后使用javascript更改url路径?

n6lpvg4x  于 2023-05-21  发布在  Java
关注(0)|答案(8)|浏览(110)

我试图提取部分网址,并使用javascript将其替换为自定义文本。
例如,我想获取当前URL,如:
mydomain.com/url_part_to_change/some-other-stuff
然后更改要插入的URL,使新的新URL为:
mydomain.com/new_url_part/some-other-stuff
这是我的:

function changeURL() {
        var theURL = window.location.pathname;
        theURL.replace("/url_part_to_change/", "/new_url_part/");
        //Set URL
}

然而,当我尝试调用函数changeURL()时,它返回undefined而不是新的url。
例如,如果我这样做:

alert(changeURL());

那么警报是undefined

fslejnso

fslejnso1#

TL;DR

// update the pathname that will reload the page
window.location.pathname = myNewPathname;

进一步说明:

Window.location(下面附上的图片)提供了一个包含所有uri部分信息的对象。因此,您可以通过window.location获取此对象并访问属性pathname,然后执行操作。例如:

var locationObject = window.location;
var pathnameToChange = locationObject.pathname;

// do stuffs to "copy" of pathname, this will not reload the page
var myNewPathname = doSomethingMyPathname( pathnameToChange );

其他示例:

或者,使用location.href设置新的url。有关location.assign()location.replace()location.reload()的示例以及有关不同可用函数的注解,请查看MDN documentation

// ie.myNewUrl is something I created -> www.blah.com/updated/path
window.location.href = myNewUrl; 

// or
window.location.assign(myNewUrl)

控制台中的一个window.location对象

有三个参考资料可以进一步理解URI组件

  1. URI_scheme
  2. Tim Berners-Lee撰写的标准
  3. MDN Location
    希望这能帮上忙。
ntjbwcob

ntjbwcob2#

这应该对您正确地工作:

function changeURL() {
        // Get the url, just as you did
        var theURL = window.location.pathname;
        // Return the url
        return theURL.replace("/url_part_to_change/", "/new_url_part/"); 
}
dw1jzc5e

dw1jzc5e3#

你在函数中没有返回任何东西,请使函数像

function changeURL() {
        var theURL = window.location.pathname;
       return  theURL.replace("/url_part_to_change/", "/new_url_part/");
        //Set URL

}
doinxwow

doinxwow4#

就像其他人说的,你什么都不回。他们忘记的是String.replace()只是复制了theURL,并没有改变theURL
试试这个:

function changeURL() {
  var theURL = window.location.pathname;
  theURL = theURL.replace("/url_part_to_change/", "new_url_part/");
  //Set URL

  return theURL;
}
alert(changeURL());
xa9qqrwz

xa9qqrwz5#

function changeURL() {
      //set new path
      window.location.pathname = "/new_url_part/";

      //get new url
      const newURL = window.location.href;
      return newURL;
    }
bvk5enib

bvk5enib6#

你忘了return

function changeURL() {
    var theURL = window.location.pathname;
    var newURL = theURL.replace("/url_part_to_change/", "/new_url_part/");
    //Set URL
    return newURL;
}

alert(changeURL())//Now you won't see undefined.
iyfamqjs

iyfamqjs7#

这是一个很老的帖子,但只是为了补充:
修改window.location会导致页面导航,所以如果不需要,可以创建一个新的URL对象,然后可以根据需要修改部分。
在我的例子中,我需要将路径从QueryString中的值更改为值。
例如。

/*
 * http://something.com/some/path?redirect=/some/other/path
 * ->
 * http://something.com/some/other/path
 */

let u = new URL(window.location.href)
u.pathname=u.searchParams.get("redirect")
u.searchParams.delete("redirect")
console.log(u.href)
wko9yo5t

wko9yo5t8#

URL Constructor可能是这项工作的最佳工具。

let urlString = "http://example.com:8080/url_part_to_change/some-other-stuff";
let url = new URL(urlString);
let path = url.pathname;
let base = url.href.replace(path,"");

let pathArray = path.split("/");
pathArray.forEach(function(p, i){
 console.log(i, p)
});
pathArray[1] = "new";

console.log(base + pathArray.join("/"));

相关问题