火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

TypeScript 里动态改 href:路径从哪来

发布于 9小时前
2

把模块路径直接写进链接地址,点击后跳转到不存在的页面。模块路径由打包工具解析,浏览器只按 URL 规则处理地址。

屏幕上显示的高亮脚本代码
链接地址必须是浏览器可解析的路径

三类地址

类型 示例 能否用作链接地址
模块路径 src/app/page 不能
站点相对路径 /app/page 能
绝对地址 https://example.com 能

做法一:替换字符串

const raw = 'src/app/page.tsx';
const href = raw.replace(/^src/, '').replace(/\.tsx$/, '');
link.setAttribute('href', href);

适合路径规则固定的场景,规则变化时需要同步改正则。

做法二:直接给站点路径

const routes: Record<string, string> = {
  home: '/',
  about: '/about'
};
link.href = routes.about;

用映射表把标识换成真实地址,规则集中在一处,改动只动表。

类型处理

const el = document.querySelector<HTMLAnchorElement>('#link');
if (el) el.href = href;

查询选择器带泛型参数后返回值即为具体元素类型,不需要额外断言。元素可能不存在时先判空,避免运行时报错。

注意点

  • 不要直接拼接外部输入作为地址,避免把不可控内容带进跳转目标。
  • 相对路径按当前页面解析,改完地址后确认基准是否符合预期。
  • 跨站跳转需要同步补充 target 与安全属性。

常见问题(FAQ)

模块路径为什么不能用?
由打包工具解析,浏览器只按地址规则处理。
用正则替换有什么风险?
路径规则变化后正则失效,规则分散在多处时更难维护。
查询选择器返回值类型不对?
用泛型参数指定元素类型,可省去额外断言。
元素可能不存在要怎么处理?
先判空再赋值,避免运行时报错。
地址来自外部输入怎么办?
先做白名单校验,不要直接拼接进链接地址。
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026