Skip to content
Advertisement

How do I create a .js file that creates a navigation bar in html

Ok so, I am creating this site and I want every page to have a navigation bar, how do I make it so that instead of having to write the html for the navigation bar on every page, I just write in the .js file and add this javascript file to every page.

Btw, I’m not asking how to write a navigation bar in html, I’ve already done that.

Advertisement

Answer

You can use .insertAdjacentHTML and pass the 'afterbegin' as the “where” to add the html. In this example it’s appending as the first element in the body.

const header= "<div>This is my nav</div>"
document.querySelector("body").insertAdjacentHTML("afterbegin", header);
<body>
<div>
 Content of page
<div>
</body>

Edit to add links you can do something like:

  • add anchor tags <a> to each link of your nav
  • get the pathname from the url window.location.pathname
  • query the DOM for [href='${path}'] (where path is the pathname)
  • add the class (in this case active) to reflect the current page
  • style active class appropriately

NOTE: the current window (stackoverflow snippet window) pathname is /js so for this example I used it as the href of the second nav link.

ALSO NOTE: I’m assuming all your html files are in the same directory

//get the pathname from the current url
const path = window.location.pathname

const header= `
   <ul class="nav">
    <li><a href="/home">Home</a></li>
    <li><a href="/js">Javascript</a></li>
   </ul>`
   
document.querySelector("body").insertAdjacentHTML("afterbegin", header);

//add the active class to the anchor tag with the href === path
document.querySelector(`[href='${path}']`).classList.add('active')
.nav li{
  display: inline-block;
}
.nav a{
  text-decoration: none;
  color: black;
}
.nav .active{
  text-decoration: underline;
  color: grey;
}
<body>
<div>
 Content of page
<div>
</body>
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement