HTML Academy · บทเรียน

แอตทริบิวต์ข้อมูลกำหนดเอง data-*

จัดเก็บข้อมูลกำหนดเองไว้บนองค์ประกอบโดยตรงด้วยแอตทริบิวต์ data-*

บทเรียน 4 จาก 413 ขั้นตอน

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

API ของ 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 -->

ตรวจสอบความเข้าใจ

API ของ dataset เข้าถึงแอตทริบิวต์ data-product-id ได้อย่างไร

ทบทวน: แอตทริบิวต์ data-*

สาระสำคัญของแอตทริบิวต์ข้อมูลแบบกำหนดเอง:

  • data-name="value" — จัดเก็บข้อมูลเมตาแบบกำหนดเองในองค์ประกอบ
  • เข้าถึงผ่าน element.dataset.camelCase
  • ขีดกลางจะถูกแปลงเป็น camelCase ใน API ของ dataset
  • ใช้ใน CSS ด้วยตัวเลือก [data-name="value"]
  • อย่าจัดเก็บข้อมูลสำคัญ (คีย์ รหัสผ่าน) ในแอตทริบิวต์ข้อมูล
เริ่มต้นได้ฟรี

เรียนรู้ HTML ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
40
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “แอตทริบิวต์ข้อมูลกำหนดเอง data-*” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “แอตทริบิวต์ข้อมูลกำหนดเอง data-*” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส HTML Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “แอตทริบิวต์ข้อมูลกำหนดเอง data-*”

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

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

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

บทเรียน “แอตทริบิวต์ข้อมูลกำหนดเอง data-*” ใช้เวลานานแค่ไหน

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

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

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

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

  1. id, class, style และ title
  2. แอตทริบิวต์ hidden
  3. tabindex และ accesskey
  4. แอตทริบิวต์ข้อมูลกำหนดเอง data-*
← กลับไปที่ HTML Academy