如何在JavaScript中定位所有的页面?

ndasle7k  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(155)

我添加classes到特定的网页基于鼻涕虫。
为了使它更易于管理,我将这些页面排序到一个名为darkThemePagesarray中。
然而,我的目标页面组之一是blog级别2的页面,主blog位于/insights上,然而,我尝试的目标是这个blog下的所有页面(即/insights/*)。
然而,我看不出一种方法,以目标的所有网页下的某些插件,如果它是可能的,以保持在一个数组?

我的方法:

var currentPageURL = window.location.pathname.replace(/\/+$/, '');
  var root = document.getElementsByTagName('html')[0];
  var className = "theme--dark";
  var darkThemePages = ['/insights/*', '/terms-and-conditions'];

  if (darkThemePages.indexOf(currentPageURL) > -1) {
    root.classList.add(className);
  } else{
    root.classList.remove(className);
  }
gab6jxml

gab6jxml1#

如果正则表达式与当前URL的pathname匹配,则可以使用test,然后相应地在root element中添加/删除该类:

const root = document.documentElement;
const url = new URL(window.location.href);
const className = 'theme--dark';
const regexp = /^\/insights\/.+|^\/terms-and-conditions$/;
root.classList[regexp.test(url.pathname) ? 'add' : 'remove'](className);

下面是一些测试,展示了哪些类型的url路径名与正则表达式匹配/不匹配:

const regexp = /^\/insights\/.+|^\/terms-and-conditions$/;

for (const pathname of [
  '/insights',
  '/insights/',
  '/insights/post1',
  '/insights/post2',
  '/insights/post1/ok',
  '/about',
  '/terms-and-conditions',
  '/terms-and-conditions/',
  '/terms-and-conditions/etc',
  '/terms-and-conditions-and-more',
]) {
  const matched = regexp.test(pathname) ? '✅' : '❌';
  console.log(matched, pathname);
}

这里有一个页面,它逐个字符地解释了正则表达式(你可以在那里学习更多,也可以修改/实验):https://regexr.com/75plc

相关问题