DOM Manipulation — Solutions

Tried the challenges already? Good. Now let’s break them down like real front-end devs.
“DOM mastery is not magic. It’s just knowing what to touch — and when.”

✅ Challenge 1 — Todo Interaction

Requirements:

  • Click item → strike through
  • Double click → delete item
JavaScript

const input = document.querySelector("#todoInput");
const btn = document.querySelector("#addBtn");
const list = document.querySelector("#todoList");

btn.addEventListener("click", () => {
  const li = document.createElement("li");
  li.textContent = input.value;

  // single click → toggle done
  li.addEventListener("click", () => {
    li.classList.toggle("done");
  });

  // double click → delete
  li.addEventListener("dblclick", () => {
    li.remove();
  });

  list.appendChild(li);
  input.value = "";
});
          

One element. Two behaviors. This is real DOM control.

🔢 Challenge 2 — Counter Upgrade

Requirements:

  • Add minus button
  • Set min & max limit
JavaScript

let count = 0;
const max = 10;
const min = 0;

const display = document.querySelector("#count");
const incBtn = document.querySelector("#increment");
const decBtn = document.querySelector("#decrement");

incBtn.addEventListener("click", () => {
  if (count < max) {
    count++;
    display.textContent = count;
  }
});

decBtn.addEventListener("click", () => {
  if (count > min) {
    count--;
    display.textContent = count;
  }
});
          

Boundaries = controlled UI. No wild numbers.

🌗 Challenge 3 — Persistent Theme

Requirements:

  • Save theme mode
  • Refresh page → keep the vibe
JavaScript

const toggle = document.querySelector("#toggleTheme");

// load saved theme
if (localStorage.getItem("theme") === "dark") {
  document.body.classList.add("dark");
}

toggle.addEventListener("click", () => {
  document.body.classList.toggle("dark");

  if (document.body.classList.contains("dark")) {
    localStorage.setItem("theme", "dark");
  } else {
    localStorage.setItem("theme", "light");
  }
});
          

Small feature. Big user experience upgrade.

🧠 Why These Solutions Matter

  • You handled multiple events
  • You controlled state with variables
  • You made UI persistent
  • You wrote logic that users actually feel

This is no longer “learning JavaScript”. This is building interfaces.

📌 Final Takeaways

  • DOM events can stack on one element
  • State matters more than visuals
  • localStorage = simple persistence
  • Clean DOM logic = better UX