检测仅包含查询而在jQuery中具有子目录的URL

sf6xfgos  于 2023-01-08  发布在  jQuery
关注(0)|答案(3)|浏览(90)

我需要在一个URL上运行一个函数,* 不 * 包含子目录-一个 * 只 * 适用于根域,但根域可以有查询字符串。
例如,这应匹配:

  • domain.com
  • domain.com?utm=blah
  • domain.com/?utm=blah

不应匹配:

  • domain.com/directory

(我不能只检查/,因为从技术上讲,它甚至包含在根域的URL中。)
我想我可以想象分割URL和所有,但不知道是否有一个更简单的方法说,“如果URL后'.com/'要么不存在或不以?开始“...

yws3nbqq

yws3nbqq1#

您可以使用URL类解析URL并提取pathname属性。如果路径名长于"/",则它具有非空路径

const urls = [
  "https://example.com",
  "https://example.com?utm=blah",
  "https://example.com/?utm=blah",
  "https://example.com/index.html?utm=blah",
  "https://example.com/directory"
];

urls.forEach((url) => {
  const parsed = new URL(url);
  const hasPath = parsed.pathname.length > 1;
  console.log(url, "has path:", hasPath);
});

请注意,这会对带有PATH_INFO的URL产生误报,例如https://example.com/index.html/foo/bar/baz,但不清楚您是否需要该级别的支持。

b1payxdu

b1payxdu2#

我觉得你想

window.location.pathname === '/'

如果是https://www.google.com,则为/,但如果是https://www.google.com/search?q=foo,则为/search

y1aodyip

y1aodyip3#

我相信可以在以下网址找到解决方案:https://stackoverflow.com/a/42353290/1132976
基本上,检查window.location.search是否是一个有效的对象,在那篇文章中有关于如何迭代对象中的值的讨论。
PS:这可能不会工作在非常老的浏览器。YMMV。

相关问题