Reputation: 13
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.
Upvotes: 1
Views: 2199
Reputation: 530
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:
<a>
to each link of your navwindow.location.pathname
[href='${path}']
(where path is the pathname)active
) to reflect the current pageNOTE: 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>
Upvotes: 3
Reputation: 496
If your site will contain mostly static content, then I suggest looking into a static site generator (SSG) like Jekyll, Hugo or Gatsby. When I started web development, I used Jekyll and it was very beginner friendly. You could then link from your navbar to your other pages normally.
Upvotes: 0
Reputation: 11
For that, I would recommend that you use a UI library like React, which when paired with React Router will definately yeild you much cleaner code and a better development experience overall.
With that in mind, I know that there is a significant learning curve towards dominating new libs/frameworks, so one way you could do it using vanilla HTML, CSS and JS is by pasting your HTML code for the header into a variable and injecting it by using some DOM methods like .append or .insertAdjecentHTML on a selected element (div, header, body...).
Upvotes: 1