ডম ম্যানিপুলেশন (DOM Manipulation)
ডম (DOM) কী? (What Is the DOM?)
যখন কোনো ব্রাউজার একটি এইচটিএমএল (HTML) পেইজ লোড করে, তখন এটি প্রতিটি এলিমেন্ট বা উপাদানের জন্য একটি গাছের মতো (tree-like) কাঠামো বা মডেল তৈরি করে — আর এই মডেলটিকেই ডকুমেন্ট অবজেক্ট মডেল (Document Object Model বা DOM) বলা হয়। এটিকে একটি ফ্যামিলি ট্রি (family tree) বা বংশলতিকার মতো ভাবতে পারেন: <html> এলিমেন্টটি হলো দাদা-দাদি, <body> হলো বাবা-মা, আর ভেতরের <div>, <p>, এবং <button> গুলো হলো তাদের সন্তান এবং নাতি-নাতনি।
জাভাস্ক্রিপ্ট এই গাছের যেকোনো অংশ পড়তে, পরিবর্তন করতে, যোগ করতে বা মুছে ফেলতে পারে। এভাবেই ইন্টারেক্টিভ ওয়েবসাইটগুলো কাজ করে — এইচটিএমএল একই থাকে, তবে জাভাস্ক্রিপ্ট ডম-কে তাৎক্ষণিকভাবে নতুন রূপ দেয়।
এলিমেন্ট নির্বাচন করা বা সিলেক্ট করা (Selecting Elements)
কনটেন্ট, স্টাইল এবং অ্যাট্রিবিউট পরিবর্তন করা (Changing Content, Styles & Attributes)
একবার কোনো এলিমেন্ট বেছে নেওয়ার পর, আপনি চাইলে সেটির প্রায় যেকোনো কিছুই পরিবর্তন করতে পারেন:
.textContent— ভেতরের সাধারণ লেখা (নিরাপদ, কোনো এইচটিএমএল পার্সিং নেই).innerHTML— এইচটিএমএল কনটেন্ট (সাবধান — ব্যবহারকারীর ইনপুটের সাথে ব্যবহৃত হলে এটি নিরাপত্তার ঝুঁকি বা সিকিউরিটি ইস্যু তৈরি করতে পারে).style.property— ইনলাইন (inline) সিএসএস বা CSS স্টাইল পরিবর্তন করা.classList— সিএসএস ক্লাস যোগ, মুছে ফেলা বা টগল (toggle) করা.setAttribute()/.getAttribute()—src,href,disabledএর মতো এইচটিএমএল অ্যাট্রিবিউট বা বৈশিষ্ট্যগুলো পরিবর্তন করা
এলিমেন্টে পরিবর্তন আনা (Modifying Elements)
এলিমেন্ট তৈরি করা এবং ইভেন্ট সামলানো (Creating Elements & Handling Events)
আপনি চাইলে জাভাস্ক্রিপ্ট ব্যবহার করে সম্পূর্ণ নতুন এইচটিএমএল এলিমেন্ট তৈরি করতে পারেন এবং সেগুলোকে পেইজে যুক্ত করতে পারেন। এভাবেই ডায়নামিক কনটেন্ট কাজ করে — যেমন নতুন কোনো কমেন্ট (comment), টাস্ক লিস্ট বা টু-ডু (todo) আইটেম, অথবা কোনো নোটিফিকেশন যুক্ত করা।
ইভেন্ট লিসেনার (Event listeners) আপনার কোডকে ব্যবহারকারীর বিভিন্ন কাজের প্রতিক্রিয়া জানাতে সাহায্য করে — যেমন ক্লিক করা, কীবোর্ড চাপা, ফর্ম সাবমিট করা, মাউস নাড়ানো ইত্যাদি। আপনি যদি কোনো এলিমেন্টে একটি লিসেনার যুক্ত করেন, তবে সেই ইভেন্টটি ঘটার সাথে সাথেই জাভাস্ক্রিপ্ট আপনার ফাংশনটিকে কল করবে।
ইভেন্ট ডেলিগেশন (Event delegation) একটি চমৎকার কৌশল: প্রতিটি চাইল্ড এলিমেন্টে আলাদা আলাদা লিসেনার যুক্ত না করে, আপনি মূল প্যারেন্ট (parent) এলিমেন্টটিতে মাত্র একটি লিসেনার যুক্ত করতে পারেন এবং চেক করতে পারেন যে কোন চাইল্ডটিতে ক্লিক করা হয়েছে। এটি অনেক বেশি দ্রুতগতির এবং পরবর্তীতে যোগ করা নতুন এলিমেন্টগুলোর জন্যও এটি দারুণ কাজ করে।