DOM: Intermediate
createElement, append, remove, replace, classList, dataset, DOM traversal — পেজ বদলানোর মাঝামাঝি কৌশল।
শুধু text বদলানো নয় — এবার element তৈরি, সাজানো, মুছে ফেলা আর tree-তে ঘোরা (traversal) শিখি। এটিই dynamic UI-র ভিত্তি।
createElement ও append
// নতুন element বানানো
const li = document.createElement("li");
li.textContent = "বাংলাদেশ";
// parent-এ যোগ
const ul = document.querySelector("ul");
ul.appendChild(li); // শেষে
// ul.append(li); // আধুনিক একাধিক-যোগ
// ul.prepend(li); // শুরুতেappendChild পুরনো, একটি করে element নেয়। append/prepend আধুনিক — string ও একাধিক element দুটোই নেয়।
remove ও replace
const old = document.querySelector(".old");
old.remove(); // মুছে দেয়
const banner = document.querySelector(".banner");
banner.replaceWith("নতুন টেক্সট");
// removeChild — parent থেকে
const parent = document.querySelector("ul");
if (parent.firstElementChild) {
parent.removeChild(parent.firstElementChild);
}insertAdjacentHTML
const list = document.querySelector("ul");
list.insertAdjacentHTML("beforeend", "<li>শেষে</li>");
list.insertAdjacentHTML("afterbegin", "<li>শুরুতে</li>");
// position: beforebegin / afterbegin / beforeend / afterendclassList
const box = document.querySelector(".box");
box.classList.add("active");
box.classList.remove("active");
box.classList.toggle("dark"); // নেই → যোগ, আছে → বাদ
console.log(box.classList.contains("dark")); // true/false
console.log(box.className); // সব class স্ট্রিং হিসেবেclassList-এ className-এর তুলনায় class যোগ-বাদ/টগল করা সহজ ও নিরাপদ — className-এ পুরো string বদল লাগে।
dataset — data-* attribute
<button data-user-id="42" data-role="admin">ব্যবহারকারী</button>
<script>
const btn = document.querySelector("button");
console.log(btn.dataset.userId); // "42"
console.log(btn.dataset.role); // "admin"
btn.dataset.status = "active"; // data-status যোগ
</script>data-* attribute-এ ডেটা রাখলে JS-এ dataset দিয়ে পাওয়া যায় — camelCase ম্যাপ হয় (user-id → userId)।
DOM Traversal
const card = document.querySelector(".card");
// Parent
console.log(card.parentElement);
// Children
console.log(card.children); // HTMLCollection
console.log(card.firstElementChild);
console.log(card.lastElementChild);
// Sibling
console.log(card.nextElementSibling);
console.log(card.previousElementSibling);
// সব children লুপ
Array.from(card.children).forEach((child) => {
console.log(child.tagName);
});traversal-এর জন্য element-ভিত্তিক (...Element) property-গুলো ব্যবহার করুন — text node/whitespace বাদ যায়। children HTMLCollection, তাই এতে forEach নেই — Array.from(children) করুন।
নোড বানানোর প্যাটার্ন
function createItem(text, className = "") {
const li = document.createElement("li");
li.textContent = text;
if (className) li.className = className;
return li;
}
const items = ["আম", "কলা", "কমলা"];
const ul = document.querySelector("ul");
items.forEach((item) => ul.append(createItem(item)));| কাজ | মেথড |
|---|---|
| element তৈরি | createElement |
| যোগ | append / prepend / appendChild |
| মুছুন | remove / removeChild |
| বদলান | replaceWith |
| class | classList.add/remove/toggle |
| data | dataset |
| parent/child/sibling | .parentElement.children` etc. |
querySelectorAll-এর NodeList-এ forEach আছে, কিন্তু children-এর আওতায় নেই — Array.from(...) করে সব জায়গায় নিরাপদ।
একটি input + button লিখুন: বাটনে চাপলে input-এর টেক্সট দিয়ে নতুন <li> তৈরি ও list-এ যোগ হওয়া উচিত।