HTML Academy · درس

سمات البيانات المخصّصة data-*

خزّن البيانات المخصّصة مباشرةً على العناصر باستخدام سمات data-*

الدرس 4 من 413 خطوة

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

ما هي سمات data-*؟

تتيح سمات البيانات المخصصة تخزين معلومات إضافية مباشرةً في عناصر HTML:

<button data-user-id="42" data-action="delete">Delete User</button>
<li data-category="frontend" data-level="beginner">HTML</li>

<!-- Format: data-[name]="value" -->
<!-- Any alphanumeric name after data- is valid -->
<!-- Values are always strings -->

سبب وجود data-*

قبل ظهور data-*، كان المطورون يخزنون البيانات الإضافية في:

  • حقول الإدخال المخفية (طريقة فوضوية)
  • أسماء فئات CSS (هشة)
  • سمات غير قياسية مثل rel أو title (HTML غير صالح)

حوّل HTML5 ‏data-* إلى الطريقة الرسمية لتضمين البيانات المخصصة دون التأثير في الدلالة أو العرض.

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

قواعد تسمية سمات data-*:

  • يجب أن يبدأ الاسم بـ data-
  • يمكن أن يحتوي الاسم على أحرف صغيرة وأرقام وواصلات وشرطات سفلية ونقاط
  • لا يُسمح بالأحرف الكبيرة في الاسم (إذ يحوّلها معيار HTML إلى أحرف صغيرة)
  • لا يمكن أن يبدأ الاسم بـ xml
<div data-user-id="1">OK</div>
<div data-product-category="tools">OK</div>
<!-- <div data-XML-thing="1">BAD: starts with xml -->
<!-- <div data-MyProp="1">BAD: uppercase in name -->

قراءة data-* في JavaScript

يمكنك الوصول إلى البيانات المخصصة من خلال الخاصية dataset:

<button id="btn"
  data-user-id="42"
  data-action="delete"
  data-confirm-message="Are you sure?"
>
  Delete
</button>

<script>
const btn = document.getElementById('btn');
console.log(btn.dataset.userId);          // '42'
console.log(btn.dataset.action);          // 'delete'
console.log(btn.dataset.confirmMessage);  // 'Are you sure?'
// Note: data-user-id → dataset.userId (camelCase conversion)
</script>

كتابة data-* باستخدام dataset

اضبط سمات البيانات وأزلها باستخدام dataset:

const card = document.querySelector('.card');

// Set:
card.dataset.status = 'active';
// Now: <div class="card" data-status="active">

// Delete:
delete card.dataset.status;
// Now: data-status is removed

// Alternatively with setAttribute:
card.setAttribute('data-status', 'inactive');
card.removeAttribute('data-status');

التحويل من الواصلة إلى camelCase

تحوّل واجهة dataset البرمجية الأسماء المفصولة بواصلات إلى camelCase:

<!-- HTML attribute         JavaScript dataset property -->
data-user-id           →   dataset.userId
data-product-category  →   dataset.productCategory
data-max-retries       →   dataset.maxRetries
data-is-active         →   dataset.isActive

محدّدات سمات CSS

استخدم سمات البيانات في محدّدات CSS:

[data-status="active"] {
  color: green;
}

[data-status="inactive"] {
  color: gray;
  text-decoration: line-through;
}

/* Present but any value: */
[data-featured] {
  border: 2px solid gold;
}

نمط التلميح

أنشئ تلميحات باستخدام CSS فقط وسمات البيانات:

<span data-tooltip="This is a tooltip">Hover me</span>

/* CSS: */
/*
[data-tooltip] {
  position: relative;
}
[data-tooltip]::after {
  content: attr(data-tooltip);  /* attr() reads the attribute value */
  position: absolute;
  background: #333;
  color: white;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s;
}
[data-tooltip]:hover::after { opacity: 1; }
*/

نمط تتبّع الحالة

تتبّع حالة المكوّن باستخدام سمات البيانات:

<button data-state="off" id="toggle">Toggle</button>

<script>
document.getElementById('toggle').addEventListener('click', function() {
  const state = this.dataset.state;
  this.dataset.state = state === 'off' ? 'on' : 'off';
  this.textContent = this.dataset.state === 'on' ? 'Active' : 'Toggle';
});
</script>

/* CSS: */
/* [data-state="on"] { background: green; color: white; } */

data-* مقابل متغيرات JavaScript

متى تستخدم data-* مقابل تخزين البيانات في JavaScript:

  • استخدم data-* للقيم المرتبطة مباشرةً بعنصر DOM والتي قد يقرأها CSS
  • استخدم متغيرات أو كائنات JavaScript لهياكل البيانات المعقدة غير المرتبطة بعناصر محددة
  • لا تخزّن بيانات كبيرة أو حساسة في data-* — فهي ظاهرة في DevTools

data-* ليست مخصصة للعرض

أخطاء شائعة ينبغي تجنّبها:

<!-- BAD: storing presentation data in data-* -->
<div data-color="red" data-font-size="18">Text</div>
<!-- Use CSS classes instead: -->
<div class="text-danger text-lg">Text</div>

<!-- BAD: storing sensitive data -->
<div data-api-key="sk-123...">Content</div>
<!-- NEVER store secrets in HTML attributes -->

تحقق سريع

كيف تصل واجهة dataset البرمجية إلى السمة data-product-id؟

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

أساسيات سمات البيانات المخصصة:

  • data-name="value" — تخزين بيانات وصفية مخصصة في العناصر
  • الوصول إليها من خلال element.dataset.camelCase
  • تتحول الواصلة إلى camelCase في واجهة dataset البرمجية
  • استخدمها في CSS مع محدّدات [data-name="value"]
  • لا تخزّن البيانات الحساسة، مثل المفاتيح وكلمات المرور، في سمات البيانات مطلقًا
البدء مجانًا

تعلم HTML مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
40
الدروس
159

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

هل درس «سمات البيانات المخصّصة data-*» مجاني؟

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

ماذا ستتعلم في «سمات البيانات المخصّصة data-*»؟

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

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

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

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

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

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

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

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

  1. id وclass وstyle وtitle
  2. السمة hidden
  3. tabindex وaccesskey
  4. سمات البيانات المخصّصة data-*
← العودة إلى HTML Academy