css 更新哈希值时显示链接到nav元素的相应div

bf1o4zei  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(115)

作为我论文的一部分,我实现了一个网站,它有一个元素导航和内容div。
我尝试使用url中的哈希值来显示正确的内容div,其他div被隐藏/设置为无。
当我点击nav元素时,url会更新(像默认行为一样),但是它没有显示正确的div,因为它没有像它应该的那样添加活动类。
active类只将display设置为block,就像上面的注解行一样。
我真的不知道该如何组织这整件事。我也想过把这两部分合并起来,但我不知道怎样做最好。

const pathName = window.location.hash.replace("#", "");

// Linking nav element with div
// And displaying active
navLinks.forEach((link) => {
  link.addEventListener("click", (e) => {
    // e.preventDefault();
    const targetDiv = link.getAttribute("href").substring(1);
    divs.forEach((div) => {
      if (div.id === targetDiv || !pathName) {
       // div.style.display = "block";
        div.classList.add("active");
      } else if (div.id == pathName) {
        document.getElementById(pathName).classList.add("active");
      } else {
       // div.style.display = "none";
        div.classList.remove("active");
      }
    });
  });
});

console.log("Pathname: " + pathName);
if (!pathName || pathName == "") {
  // document.getElementById("Home").style.display = "block";
  document.getElementById("Home").classList.add("active");
} else {
  // document.getElementById(pathname).style.display = "block";
  document.getElementById(pathName).classList.add("active");
}
vojdkbi0

vojdkbi01#

在@Yogi的评论帮助了我之后,如果有人有同样的问题,这是我的工作代码:

const navLinks = document.querySelectorAll(".nav-links a");
const divs = document.querySelectorAll("div.articleDiv");

// Linking nav element with div
// And displaying active
navLinks.forEach((link) => {
  link.addEventListener("click", (e) => {
    e.preventDefault();
    const targetDiv = link.getAttribute("href").replace("#", "");
    divs.forEach((div) => {
      if (div.id === targetDiv) {
        div.classList.add("active");
      } else {
        div.classList.remove("active");
      }
    });
  });
});

const pathName = window.location.hash.replace("#", "");

window.addEventListener("load", (event) => {
  if (!pathName || pathName == "") {
    document.getElementById("Home").classList.add("active");
  } else {
    document.getElementById(pathName).classList.add("active");
  }
});

相关问题