Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the health-check domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/yogisv5/sitesbyyogi.com/wp-includes/functions.php on line 6260
MODULE 6: The DOM (Document Object Model) - SitesByYogi

JavaScript Foundations • StreetGeek Academy

🧠 MODULE 6: The DOM (Document Object Model)

Learn how to select, create, modify, and remove HTML elements using JavaScript — and use this to dynamically update your portfolio content.

1) What Is the DOM?

The Document Object Model (DOM) is a structured, tree-like representation of your webpage.
Think of it as a map where each HTML tag becomes a JavaScript object you can manipulate.

HTML Example

<h1 id="title">Welcome to StreetGeek!</h1>

In JavaScript

document.getElementById("title"); // returns the <h1> element
✅ Once you have a DOM element, you can read or change its properties.

2) Selecting Elements

Method Returns Example
getElementById() 1 element document.getElementById("title")
getElementsByClassName() HTMLCollection (list) document.getElementsByClassName("card")
getElementsByTagName() HTMLCollection (list) document.getElementsByTagName("p")
querySelector() First match document.querySelector(".card")
querySelectorAll() All matches (NodeList) document.querySelectorAll(".card")
💡 Use querySelector and querySelectorAll — they’re the most flexible and modern.

3) Reading and Changing Content

const title = document.getElementById("title");
title.textContent = "My JavaScript-Powered Portfolio!"; // Change text
title.style.color = "#0E477B"; // Inline style
Property Description
textContent Sets or gets the text inside an element.
innerHTML Sets or gets the HTML inside an element.
style.property Directly change CSS properties.

Example

title.innerHTML = "<span>Welcome, <strong>Yogi!</strong></span>";

4) Creating and Appending Elements

Create a new element and add it to the page:

const newCard = document.createElement("div");
newCard.className = "card";
newCard.textContent = "New Project Card";

const projectSection = document.getElementById("projects");
projectSection.appendChild(newCard);
✅ You’ve dynamically added a new card to your page using JavaScript.

5) Removing Elements

const removeBtn = document.querySelector(".remove");
removeBtn.remove();

Or using the parent element:

parent.removeChild(child);
💡 Always check the element exists before removing it:

if (removeBtn) removeBtn.remove();

6) Updating Attributes

const link = document.querySelector("a");
link.setAttribute("href", "https://sitesbyyogi.com");
link.setAttribute("target", "_blank");
link.textContent = "Visit My Site";

To read an attribute:

console.log(link.getAttribute("href"));

To remove one:

link.removeAttribute("target");

7) Working with Classes

You can add, remove, or toggle classes for styling or animation.

const card = document.querySelector(".card");
card.classList.add("highlight");
card.classList.remove("hidden");
card.classList.toggle("active");
💡 Use toggle() for buttons like dark mode or menu open/close.

8) Hands-On Practice

Exercise 1: Update Hero Text Dynamically

<h1 id="hero-title">Welcome!</h1>
<p id="hero-subtitle"></p>
const heroTitle = document.getElementById("hero-title");
const heroSubtitle = document.getElementById("hero-subtitle");

heroTitle.textContent = "Welcome to My Portfolio ✨";
heroSubtitle.textContent = "Powered by JavaScript and StreetGeek Academy.";
✅ You just edited live text via JavaScript.

Exercise 2: Add a New Project Card

<section id="projects"></section>
const projects = document.getElementById("projects");

function addProject(title, tech) {
  const div = document.createElement("div");
  div.className = "card";
  div.innerHTML = `<h3>${title}</h3><p>${tech}</p>`;
  projects.appendChild(div);
}

addProject("Nfinite Dashboard", "JavaScript, CSS Grid");
addProject("ShopBlocks WP", "PHP, WooCommerce");
✅ Dynamically adds new project cards to your portfolio!

Exercise 3: Toggle Theme Class

<button id="theme-toggle">Toggle Theme</button>
const btn = document.getElementById("theme-toggle");

btn.addEventListener("click", () => {
  document.body.classList.toggle("dark-mode");
});
💡 Later you can combine this with localStorage to remember the user’s theme.

9) DOM Traversal (Parent ↔ Child)

Move around the DOM tree using parent and child relationships.

const card = document.querySelector(".card");
console.log(card.parentElement); // Parent
console.log(card.children);      // All child nodes

Removing all children (clear a section)

projects.innerHTML = "";

10) Bonus: Add Animation or Transitions via JS

const cards = document.querySelectorAll(".card");

cards.forEach(card => {
  card.addEventListener("mouseenter", () => {
    card.style.transform = "scale(1.05)";
    card.style.transition = "0.3s";
  });
  card.addEventListener("mouseleave", () => {
    card.style.transform = "scale(1)";
  });
});
✅ Your portfolio grid now feels alive when you hover over project cards.

11) Quiz Time

Show/Hide Questions

1) What does the DOM represent?

2) What’s the difference between textContent and innerHTML?

3) What method would you use to create a new element?

4) How do you add and remove CSS classes from an element?

5) What’s the purpose of querySelectorAll()?

🚀 Challenge Task: Dynamic Testimonials

Add a “Dynamic Testimonials” section to your portfolio.

HTML

<section id="testimonials"></section>

JavaScript Data

const testimonials = [
  { name: "Alex",   quote: "StreetGeek helped me build my first site!" },
  { name: "Monica", quote: "Yogi’s teaching style is amazing!" },
  { name: "Chris",  quote: "I finally understand JavaScript thanks to this course." }
];

Render Testimonials

const container = document.getElementById("testimonials");

testimonials.forEach(t => {
  const block = document.createElement("blockquote");
  block.innerHTML = `<p>"${t.quote}"</p><cite>- ${t.name}</cite>`;
  container.appendChild(block);
});
✅ You’ve now created dynamic content from JS data using the DOM!

🏁 Module 6 Summary

Next up → MODULE 7: Events & Interactivity
You’ll learn how to listen for clicks, keypresses, form inputs, and more — giving your users true control and responsiveness.