انتقل إلى محتوى الدرس
الدرس 153
تاريخ النشر: تاريخ التحديث:
دورة جافا سكريبت

إدارة الفئات بين className وclassList في DOMDOM className and classList Management طريقة اختيار className أو classList، ونص الفئات الكامل className، ومخاطر استبدال نص className

أتقن إدارة الفئات في DOM بالمقارنة العملية بين السلسلة الكاملة className والتحكم الذري عبر دوال classList المشروطة لعناصر HTML وSVG.
أقسام الدرس
4
الأمثلة
2
اللغة
العربية
المشاهدات
2,916
محتوى الدرس
في هذا الدرس 4تصفّح المواضيع

نظراً لأن الكلمة class محجوزة في لغة JavaScript لتعريف الفئات البرمجية، اختار معيار DOM الاسم element.className لتمثيل سمة class="..." الخاصة بعنصر HTML.

ترجع قراءة element.className على عناصر HTML السلسلة النصية الكاملة كما هي مفصولةً بمسافات مثل "btn btn-primary shadow-sm" دفعةً واحدة.

مخطط مقارنة نص الفئات الكامل className مع القائمة الذرية classList

يؤدي الإسناد المباشر card.className = "active" إلى مسح واستبدال كامل نص السمة، فتختفي فوراً فئات التخطيط الأساسية مثل "card" و"rounded"! وحتى محاولة الدمج اليدوي عبر card.className += " active" هشة ومعرضة للأخطاء؛ إذ يؤدي نسيان المسافة البادئة إلى التصاق الأسماء ("cardactive") وتكرار النقرات يراكم نفس الفئة عدة مرات.

JavaScript
const bad = document.getElementById('badCard');
const good = document.getElementById('goodCard');
// Overwrites existing "card bordered" classes!
bad.className = 'highlight';
// Preserves existing classes safely!
good.classList.add('highlight');

ترجع element.classList كائن DOMTokenList ذكياً يمنع تكرار الفئات ويعالج كل فئة باستقلالية تامة دون المساس بجاراتها:

  • تقبل classList.add("a", "b") وclassList.remove("a", "b") عدة فئات دفعة واحدة وتتجاهل الفئة المكررة تلقائياً.
  • يقبل المعامل المنطقي الثاني في classList.toggle("open", isOpen) فرض الإضافة عند true والحذف عند false في سطر واحد يغنيك عن جمل if/else!
  • تبدّل classList.replace("pending", "verified") فئة قديمة بأخرى جديدة ذرياً وترجع قيمة منطقية تؤكد نجاح التبديل.
JavaScript
const pill = document.getElementById('pill');
let isDark = false;
document.getElementById('toggleBtn').addEventListener('click', () => {
  isDark = !isDark;
  pill.classList.toggle('dark-pill', isDark);
  pill.classList.replace(isDark ? 'idle' : 'live', isDark ? 'live' : 'idle');
});

اعتمد هذه القاعدة الهندسية الواضحة عند الاختيار بين الخاصيتين في مشاريعك:

وجه المقارنةelement.classNameelement.classList
نوع القيمة في HTMLسلسلة نصية مفصولة بمسافاتكائن DOMTokenList يمنع التكرار
نوع القيمة في SVGكائن SVGAnimatedString مختلفنفس DOMTokenList الموحد تماماً
تحديث حالة تفاعلية مفردةخطر (يمسح الفئات المجاورة)آمن ودقيق عبر add وtoggle وreplace
أفضل موضع للاستخدامالتهيئة الأولية لعنصر منشأ للتو بـ createElementكافة التحديثات التفاعلية والسمات والتحقق من الحقول
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس إدارة الفئات بين className وclassList: مخاطر استبدال النص الكامل واختلاف عناصر SVG، ودوال التحكم الذري عبر add وtoggle المشروطة وreplace، ومعيار الاختيار العملي بينهما. الخطوة التالية: انتقل إلى درس خصائص الأبعاد الداخلية client لقياس المساحة الداخلية وسماكة الإطار بدقة.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 element.className خاصية نص الفئات className
خاصية تمثل كامل نص سمة الفئات مفصولاً بمسافات على عناصر HTML.
للمراجعة
02 DOMTokenList (classList) قائمة الرموز الذرية DOMTokenList
كائن ذكي في خاصية classList يتيح إضافة وحذف وتبديل واستبدال الفئات دون تكرار أو مسح بالخطأ.
للمراجعة
03 Two-Argument classList.toggle التبديل المشروط بمعامل ثانٍ
تمرير قيمة منطقية ثانية لدالة toggle لضمان الإضافة عند التحقق والحذف عند عدمه.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 CSS CSS
Cascading Style Sheets
طبقة التنسيق البصري التي تفصلها فئات classList بنظافة عن الشيفرة البرمجية.
للمراجعة
02 SVG SVG
Scalable Vector Graphics
عناصر الرسوم المتجهة التي تعمل معها classList بتوافق تام بخلاف اختلاف نوع className.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. استبدل إسناد className باستدعاء bad.classList.add("highlight") في المحرر الأول لكي تحتفظ البطاقة الأولى بإطارها الأزرق.

  2. انقر زر Toggle State مرتين في المحرر الثاني ولاحظ تبديل الوضع الداكن واستبدال الفئة idle بالفئة live بسلاسة.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

إذا كان العنصر يحمل الفئتين "card p-3" ونفّذنا box.className = "active"، فماذا تصبح سمة الفئات النهائية؟

02

ماذا يحدث عند استدعاء el.classList.add("btn lg") بوجود مسافة داخل معامل نصي واحد؟

03

ماذا يفعل التعبير el.classList.toggle("open", false) إذا لم يكن العنصر يحمل الفئة "open" أصلاً؟

04

لماذا تُعد classList أكثر أماناً وتوافقاً من className عند التعامل مع عناصر <svg>؟

05

استدعاء el.classList.add("active") ثلاث مرات متتالية يضيف الفئة مرة واحدة فقط دون أي تكرار.

06

أي دالة في classList تستبدل الفئة "status-pending" بالفئة "status-paid" في خطوة واحدة؟

07

متى يكون الإسناد المباشر el.className = "card p-4 shadow" نظيفاً ومناسباً؟

08

ترجع الدالة el.classList.contains("active") قيمة منطقية true أو false.

09

لماذا سُميت الخاصية البرمجية className بدلاً من class في معيار DOM؟

10

إسناد نص فارغ el.className = "" يزيل كافة فئات CSS من عنصر HTML.