0Pricing
HTML Academy · บทเรียน

ไวยากรณ์ data-* และแบบแผนการตั้งชื่อ

ทำความเข้าใจชื่อแอตทริบิวต์ data-* ที่ถูกต้องและจุดประสงค์ของชื่อเหล่านั้น

ไวยากรณ์ data-* และแบบแผนการตั้งชื่อ เป็นบทเรียน HTML Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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"

แอตทริบิวต์ข้อมูลหลายรายการ

องค์ประกอบหนึ่งรายการสามารถมีแอตทริบิวต์ข้อมูลได้หลายรายการตามต้องการ:

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

ค่าเป็นสตริงเสมอ

ค่าของแอตทริบิวต์ข้อมูลเป็นสตริงเสมอ โปรดแปลงค่าเหล่านั้นใน 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-* ในเฟรมเวิร์ก

การใช้แอตทริบิวต์ข้อมูลในเฟรมเวิร์กที่พบบ่อย:

<!-- 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-* และแบบแผนการตั้งชื่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส HTML Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ไวยากรณ์ data-* และแบบแผนการตั้งชื่อ”

ทำความเข้าใจชื่อแอตทริบิวต์ data-* ที่ถูกต้องและจุดประสงค์ของชื่อเหล่านั้น คุณปฏิบัติ HTML Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน HTML Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน HTML Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ไวยากรณ์ data-* และแบบแผนการตั้งชื่อ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน HTML Academy นี้ได้ไหม

ได้ บทเรียน HTML Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ไวยากรณ์ data-* และแบบแผนการตั้งชื่อ
  2. การเข้าถึง data-* ด้วย dataset ใน JavaScript
  3. การใช้ data-* กับตัวเลือกแอตทริบิวต์ CSS
  4. รูปแบบการใช้งานจริง: คำแนะนำเครื่องมือและการติดตามสถานะ
← กลับไปที่ HTML Academy