ไวยากรณ์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ไวยากรณ์ data-* และแบบแผนการตั้งชื่อ
- การเข้าถึง data-* ด้วย dataset ใน JavaScript
- การใช้ data-* กับตัวเลือกแอตทริบิวต์ CSS
- รูปแบบการใช้งานจริง: คำแนะนำเครื่องมือและการติดตามสถานะ