使用 js 实现 urljoin 方法

需求:

在 js 中将两个网址信息拼接在一起。

如下代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
String.prototype.endsWith = function (end) {
    return this.length > 0 && this.indexOf(end) + end.length == this.length;
  };
  String.prototype.rfind = function (c) {
    for (let i = this.length - 1; i >= 0; i--) {
      if (this.split("")[i] == c) {
        return i;
      }
    }
    return -1;
  };
  window.urljoin = function (url_base, relative_url) {
    let length = relative_url.length,
      relative_url2 = relative_url.replace(/\.\.\//g, ""),
      length2 = relative_url2.length,
      level_len = (length - length2) / 3;
 
    if (relative_url.indexOf("./") == 0) {
      return (
        url_base.substring(0, url_base.rfind("/") + 1) +
        relative_url.substring(2)
      );
    } else if (relative_url.indexOf("../") == 0) {
      let count = 0;
      for (let i = 0; i < url_base.length; i++) {
        let s = url_base[url_base.length - 1 - i];
        if (s == "/") {
          count++;
        }
        if (count == level_len + 1) {
          return url_base.substring(0, url_base.length - i) + relative_url2;
          break;
        }
      }
    } else if (relative_url.indexOf("/") == 0) {
      return new URL(url_base).origin + relative_url;
    }else if(relative_url.indexOf('http://') == 0 || relative_url.indexOf('https://') == 0){
        return relative_url
    } else {
      return (
        url_base.substring(0, url_base.rfind("/") + 1) +
        relative_url
      );
    }
  };

  

posted @   逸乐太子  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示