0Pricing
HTML Academy · درس

صياغة data-* واصطلاحات التسمية

فهم أسماء سمات data-* الصالحة والغرض منها

صياغة data-* واصطلاحات التسمية درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.

مراجعة: سمات data-*

تخزّن سمات البيانات (data-*) معلومات مخصصة على عناصر HTML:

<div data-user-id="42" data-role="admin" data-active="true">
  User Card
</div>

قواعد التسمية الصحيحة

متطلبات تسمية سمات data-*:

  • يجب أن تبدأ بـ data-
  • يتبعها محرف واحد على الأقل
  • يُسمح فقط بالأحرف اللاتينية الصغيرة والأرقام والواصلات والشرطات السفلية والنقاط والنقطتين
  • لا يُسمح بالأحرف الكبيرة، إذ يحوّل محلل HTML السمات إلى أحرف صغيرة
  • لا يُسمح بالمسافات

اصطلاحات التسمية

اصطلاحات التسمية المتّبعة في المجتمع:

<!-- BEM-style: module__element--modifier -->
data-card="profile"
data-card-id="42"
data-card-state="expanded"

<!-- Descriptive: domain-concept -->
data-product-id="SKU-123"
data-analytics-event="click-cta"
data-feature-flag="dark-mode"

سمات بيانات متعددة

يمكن أن يحتوي العنصر على أي عدد من سمات data-*:

<button
  type="button"
  data-action="delete"
  data-target-id="user-42"
  data-confirm="true"
  data-confirm-message="Delete this user permanently?"
>Delete</button>

القيم دائمًا سلاسل نصية

تكون قيم سمات data-* دائمًا سلاسل نصية — حلّلها في JavaScript:

const el = document.querySelector('[data-user-id]');

console.log(el.dataset.userId);              // '42' (string)
console.log(typeof el.dataset.userId);       // 'string'

// Parse to number:
const id = parseInt(el.dataset.userId, 10);   // 42 (number)

// Parse to boolean:
const active = el.dataset.active === 'true'; // true (boolean)

// Parse to JSON:
const config = JSON.parse(el.dataset.config); // object

تخزين JSON في data-*

خزّن البيانات المعقدة كسلاسل JSON:

<div
  data-config='{"theme":"dark","locale":"en-US","pageSize":20}'
  id="app"
></div>

<script>
const el = document.getElementById('app');
const config = JSON.parse(el.dataset.config);
console.log(config.theme);    // 'dark'
console.log(config.pageSize); // 20
</script>

data-* مقابل العناصر المخصّصة

متى تختار data-* أو العناصر المخصّصة أو كائنات JavaScript:

  • data-* — بيانات وصفية خاصة بالعنصر، ظاهرة في HTML ويمكن الوصول إليها من CSS
  • العناصر المخصّصة — مكوّنات معقدة قابلة لإعادة الاستخدام وسلوكها مغلف
  • JavaScript Map/WeakMap — بيانات لا تحتاج إلى الظهور في HTML، أو بيانات كبيرة أو معقدة

استخدام data-* في أطر العمل

الاستخدامات الشائعة لسمات data-* في أطر العمل:

<!-- Bootstrap: target collapsible elements -->
<button data-bs-toggle="collapse" data-bs-target="#menu">
  Toggle
</button>

<!-- Alpine.js: component data -->
<div x-data="{ open: false }">

<!-- Stimulus: controller identification -->
<div data-controller="menu" data-menu-open-value="false">

<!-- Testing libraries: stable selectors -->
<button data-testid="submit-btn">Submit</button>

إمكانية الوصول وdata-*

لا تعلن قارئات الشاشة عن سمات البيانات — لا تستخدمها لمعلومات إمكانية الوصول:

<!-- BAD: accessibility info in data-* -->
<button data-label="Close dialog">×</button>
<!-- Screen reader does NOT read data-label -->

<!-- GOOD: use aria-label for accessibility -->
<button aria-label="Close dialog">×</button>

اعتبارات الأداء

تأثير سمات data-* في الأداء ضئيل جدًا:

  • قراءة dataset سريعة (O(1))
  • لا مشكلة في الاستخدام المكثف لـ data-* على آلاف العناصر
  • تخزين كتل بيانات كبيرة (صور أو JSON كبير) في data-* إهدار للموارد
  • استخدم WeakMap لتخزين كائنات JavaScript الكبيرة المرتبطة بعناصر DOM

الملخص: أفضل ممارسات data-*

أفضل ممارسات data-*:

  • استخدم أسماء بأحرف صغيرة ومفصولة بشرطات
  • القيم دائمًا سلاسل نصية — حلّلها عند الحاجة
  • بالنسبة إلى JSON: JSON.stringify / JSON.parse
  • استخدمها للبيانات الوصفية التي تحتاج إليها CSS أو JavaScript
  • لا تُعد بديلًا عن سمات ARIA
  • لا تخزّن الأسرار (فهي ظاهرة في DevTools)

تحقق سريع

ما نوع القيم الذي يعيده dataset دائمًا لسمات العناصر؟

مراجعة: صيغة data-*

أساسيات تسمية data-*:

  • الصيغة: data-[lowercase-name]="value"
  • الوصول إليها يكون عبر: element.dataset.camelCaseName
  • جميع القيم سلاسل نصية — حلّلها صراحةً
  • خزّن JSON للبيانات المعقدة
  • استخدم أحرفًا صغيرة، من دون أحرف كبيرة أو مسافات في اسم السمة

الأسئلة الشائعة

هل درس «صياغة data-* واصطلاحات التسمية» مجاني؟

نعم — نص درس «صياغة data-* واصطلاحات التسمية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.

ماذا ستتعلم في «صياغة data-* واصطلاحات التسمية»؟

فهم أسماء سمات data-* الصالحة والغرض منها تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟

لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «صياغة data-* واصطلاحات التسمية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟

نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. صياغة data-* واصطلاحات التسمية
  2. الوصول إلى data-* باستخدام dataset في JavaScript
  3. استخدام data-* مع محددات السمات في CSS
  4. أنماط عملية: التلميحات وتتبع الحالة
← العودة إلى HTML Academy