แอตทริบิวต์ข้อมูลกำหนดเอง data-*
จัดเก็บข้อมูลกำหนดเองไว้บนองค์ประกอบโดยตรงด้วยแอตทริบิวต์ data-*
แอตทริบิวต์ข้อมูลกำหนดเอง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- id, class, style และ title
- แอตทริบิวต์ hidden
- tabindex และ accesskey
- แอตทริบิวต์ข้อมูลกำหนดเอง data-*