Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中连接相对URL_Javascript_Url_Relative Path - Fatal编程技术网

如何在JavaScript中连接相对URL

如何在JavaScript中连接相对URL,javascript,url,relative-path,Javascript,Url,Relative Path,我想连接两个字符串,每个字符串表示Javascript中的相对URL 我想加入基本URLhttp://www.adress.com/more/evenmore带有以下示例: 。/../address(预期输出:http://www.adress.com/adress) 。/address(具有预期的输出http://www.adress.com/more/adress) 最好的办法是什么?我正在考虑使用regexp并检查 有多少个。/在相对URL之前,然后从基本URL中减去该数量,并将其添加到剩

我想连接两个字符串,每个字符串表示Javascript中的相对URL

我想加入基本URL
http://www.adress.com/more/evenmore
带有以下示例:

  • 。/../address
    (预期输出:
    http://www.adress.com/adress
  • 。/address
    (具有预期的输出
    http://www.adress.com/more/adress
  • 最好的办法是什么?我正在考虑使用regexp并检查

    有多少个
    。/
    在相对URL之前,然后从基本URL中减去该数量,并将其添加到剩余的URL中。

    以下函数分解URL,然后解析它

    function concatAndResolveUrl(url, concat) {
      var url1 = url.split('/');
      var url2 = concat.split('/');
      var url3 = [ ];
      for (var i = 0, l = url1.length; i < l; i ++) {
        if (url1[i] == '..') {
          url3.pop();
        } else if (url1[i] == '.') {
          continue;
        } else {
          url3.push(url1[i]);
        }
      }
      for (var i = 0, l = url2.length; i < l; i ++) {
        if (url2[i] == '..') {
          url3.pop();
        } else if (url2[i] == '.') {
          continue;
        } else {
          url3.push(url2[i]);
        }
      }
      return url3.join('/');
    }
    
    函数concatAndResolveUrl(url,concat){
    var url1=url.split('/');
    var url2=concat.split('/');
    var url3=[];
    for(变量i=0,l=url1.length;i
    使用URI.js()::


    8年后,许多浏览器(Internet Explorer除外)都支持此功能

    >新URL(“../address”,”http://www.adress.com/more/evenmore/)。href
    "http://www.adress.com/more/address"
    >新URL('../../address','http://www.adress.com/more/evenmore/)。href
    "http://www.adress.com/address"
    
    @ning提到的ECMAScript
    URL
    WebAPI是一个很好的起点:特别是它在普通的JS实现(节点等)中可用,并且不需要您使用一个库来完成nowq实现已经完成的事情。查阅MDN文档,更多,是一个很好的开始

    直接从他们的文档中借用(有些):

    让我来看看https://developer.mozilla.org';
    // ... 省略
    设d=新URL('/en US/docs',m);
    
    如果要执行上述操作,那么构建的
    URL
    对象的
    console.log
    将是:
    'https://developer.mozilla.org/en-US/docs“

    重要的是,如果您查阅文档的语法部分,您会注意到second参数是可选的,second参数(如上例所示)表示基本URL(尽管仅在提供两个参数的情况下)

    如果两个参数值都是绝对URL,则Web API将接受第一个参数值并丢弃第二个参数值

    如果您使用的是Node.js,我建议您查看本机模块,以便在相对路径上进行工作,同样是使用库。这里的主要动机是,旋转您自己的算法(可能只是在这里和那里调用
    path
    )可能比引入一个库更好,该库将引入其他几个依赖项,这些依赖项可能会给您的应用程序带来漏洞和不必要的膨胀(或者对于您所需要的内容来说太重)

    但是,如果您在前端工作,您将没有可用的
    路径
    ,并且-如评论中所述-Web API的
    URL
    不支持所述的相对路径情况。在这种情况下,您可能需要寻找一个库来完成这项工作;然而,再考虑一下其他的答案,我会考虑尝试一种家用纺纱方法。< /P>
    值得赞扬的是,
    URI.js
    目前只集成,占用空间不大。

    我在对“.”进行测试的地方修改了它,以同时测试空字符串
    url1[I]='。| url1[I]='
    因此,如果传入的URL有斜杠,它仍然会构成一个有效的URL+1这似乎不像预期的那样有效/a+/b=/a/b应该是/b这几天没有真正需要使用库。如果必须组合相对URL,则此库选项有效。因为ECMAScript的URL抛出了一个错误:new URL(“../the_relative_URL”,“rel/path/”)TypeError:URL构造函数:rel/path/不是有效的URL。我几乎想把它添加到您的答案中。这是避免使用URL的一个很好的理由,尤其是在前端不支持对Node.js本机模块的访问。
    function joinUrl(baseUrl, url) {
        var theUrl = new URI(url);
        if (theUrl.is("relative")) {
            theUrl = theUrl.absoluteTo(baseUrl);
        }
        return theUrl.toString();
    }