【问题标题】:Comparing paths比较路径
【发布时间】:2012-02-18 05:48:05
【问题描述】:

在我的函数中,用户输入像'./images/profile' 这样的路径,我需要检查页面的当前路径是否与他传递的路径相同。 IE。检查是否path == location.pathname

如果location.pathname/scripts 并且输入的路径./../parent/scripts 其中parent 是脚本的父目录,则比较应该返回true,如果输入的路径是./../parent/images 则应该返回false 等。 那么 JS 中有什么方法可以比较两条路径吗?

【问题讨论】:

    标签: javascript path location pathname


    【解决方案1】:
    var p = currentpath + inputpath;
    var frags = p.split("/");
    for (var i=0; i<frags.length; i++) {
        if (i>0 && frags[i] == "..") {
            frags.splice(i-1, 2);
            i -= 2;
        } else if (!frags[i] && frags[i][0] == ".") { // removes also three or more dots
            frags.splice(i, 1);
            i--;
        }
    }
    return frags.join("/") == suggestedpath;
    

    应该完成任务。也许正则表达式会更短,但它不允许在数组中导航:-)

    【讨论】:

      【解决方案2】:

      没有用于比较或解析路径的内置方法。您将不得不求助于解析字符串,或者某种技巧,例如在隐藏的 iframe 中加载相对路径并检查其 location.href 是否等于当前窗口的 location.href... 不是我提倡这种方法。

      【讨论】:

        【解决方案3】:
        function comparePath(path1, path2) {
          var path1Dir = path1.substring(path1.lastIndexOf('/'));
          var path2Dir = path2.substring(path2.lastIndexOf('/'));
          return path1Dir == path2Dir;
        }
        

        您可以通过调用获得结果:comparePath(path, location.pathname);

        【讨论】:

        • 这将在比较任何以通用子目录结尾的路径时产生误报,例如foo/barfizz/bar
        猜你喜欢
        • 2020-10-05
        • 1970-01-01
        • 2021-06-27
        • 2013-03-26
        • 1970-01-01
        • 2014-02-28
        • 2020-12-04
        • 2012-08-25
        • 2014-06-09
        相关资源
        最近更新 更多