You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取无末尾斜杠的当前目录名称

解决无末尾斜杠时的当前目录检查问题

这个问题确实容易踩坑——原代码的逻辑依赖路径末尾的斜杠,一旦路径没有这个斜杠,lastIndexOf('/')就会定位到父目录的分隔符位置,导致判断完全错误。其实修复起来很简单,这里有几个实用的方案:

方案一:先标准化路径格式

先把当前路径统一处理成带末尾斜杠的格式(根目录除外),再沿用原有的判断逻辑:

function checkDir(theDir) {
  let loc = window.location.pathname;
  // 给非根目录的路径添加末尾斜杠(如果没有的话)
  if (loc !== '/' && !loc.endsWith('/')) {
    loc += '/';
  }
  const dir = loc.substring(0, loc.lastIndexOf('/'));
  return dir === theDir;
}

原理说明:

  • 比如当前路径是/projects,会被转换成/projects/,截取后得到/projects,和目标目录/projects匹配;
  • 如果路径本身就是/projects/,则保持不变,截取结果同样是/projects;
  • 根目录/会被特殊处理,避免变成//。

方案二:通过路径分割获取当前目录

另一种更清晰的思路是把路径拆分成数组,直接提取最后一级目录:

function checkDir(theDir) {
  const pathParts = window.location.pathname.split('/').filter(part => part !== '');
  // 构造标准化的当前目录路径
  const currentDir = pathParts.length === 0 ? '/' : `/${pathParts[pathParts.length - 1]}`;
  return currentDir === theDir;
}

原理说明:

  • split('/')会把路径拆分成数组,比如/blog/post拆成['', 'blog', 'post'],/blog/post/拆成['', 'blog', 'post', ''];
  • filter(part => part !== '')去掉空字符串,得到有效目录部分['blog', 'post'];
  • 最后取数组的最后一个元素,拼出当前目录路径/post,和目标目录对比。

额外优化:兼容目标目录的斜杠差异

如果你的theDir参数可能带或不带末尾斜杠(比如用户传入/projects或/projects/),可以给目标目录也做标准化处理:

function checkDir(theDir) {
  // 标准化目标目录:去掉末尾斜杠(根目录除外)
  const normalizedTarget = theDir !== '/' ? theDir.replace(/\/$/, '') : '/';
  
  let loc = window.location.pathname;
  // 标准化当前路径
  if (loc !== '/' && !loc.endsWith('/')) {
    loc += '/';
  }
  const currentDir = loc.substring(0, loc.lastIndexOf('/'));
  
  return currentDir === normalizedTarget;
}

这样不管传入的目标目录格式如何,都能准确匹配当前目录。

内容的提问来源于stack exchange,提问作者Jonathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:50:04