Issue
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.
Solution
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>
Answered By - knicholas
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.