DOM Manipulation

লেসন ৩২ / ৪৪

DOM (Document Object Model) কী?

Browser HTML পেজকে একটি Tree structure হিসেবে রিপ্রেজেন্ট করে — এটাই DOM। JavaScript দিয়ে DOM access ও modify করা যায়।

document
  └── html
       ├── head
       │    └── title
       └── body
            ├── h1
            ├── p
            └── div

Element Select করা

// By ID (একটি)
let el = document.getElementById("header");

// By Tag name (HTMLCollection)
let paragraphs = document.getElementsByTagName("p");

// By Class name (HTMLCollection)
let items = document.getElementsByClassName("item");

// querySelector — CSS selector দিয়ে (প্রথম match) ⭐
let btn = document.querySelector(".btn");
let nav = document.querySelector("#nav > ul");

// querySelectorAll — সব match (NodeList)
let allBtns = document.querySelectorAll(".btn");
allBtns.forEach(btn => btn.style.color = "red");

Content পরিবর্তন

let el = document.getElementById("title");

// Text
el.textContent = "নতুন টেক্সট";
el.innerText = "নতুন টেক্সট";

// HTML (⚠️ security risk — XSS)
el.innerHTML = "<strong>মোটা</strong>";

// Attribute
el.getAttribute("href");
el.setAttribute("href", "https://example.com");
el.removeAttribute("disabled");

// shorthand
el.id = "newId";
el.href = "...";
el.src = "...";

Style পরিবর্তন

let box = document.querySelector(".box");

// Inline style (camelCase!)
box.style.backgroundColor = "red";
box.style.fontSize = "20px";
box.style.display = "none";

// Class manipulation ⭐ (সেরা পদ্ধতি)
box.classList.add("active");
box.classList.remove("hidden");
box.classList.toggle("open");
box.classList.contains("active");  // true/false
box.classList.replace("old", "new");

Element তৈরি ও যোগ করা

// নতুন element তৈরি
let newDiv = document.createElement("div");
newDiv.textContent = "নতুন div";
newDiv.className = "card";
newDiv.id = "mycard";

// Parent এ যোগ
let container = document.querySelector(".container");
container.appendChild(newDiv);           // শেষে
container.prepend(newDiv);                // শুরুতে
container.insertBefore(newDiv, child);   // আগে

// আধুনিক (insertAdjacentHTML)
container.insertAdjacentHTML("beforeend", "<p>Hi</p>");
// "beforebegin", "afterbegin", "beforeend", "afterend"

// মুছে ফেলা
newDiv.remove();
container.removeChild(newDiv);

Traverse (আশেপাশের element)

el.parentElement
el.children           // সব child
el.firstElementChild
el.lastElementChild
el.nextElementSibling
el.previousElementSibling