Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> HTML

แอตทริบิวต์ data-*: จัดเก็บข้อมูลกำหนดเองใน HTML (Custom Data Attributes)

แอตทริบิวต์ data-* (Custom Data Attributes) ใช้สำหรับจัดเก็บข้อมูลส่วนตัว (Private Data) ไว้ในองค์ประกูล HTML เอง โดยไม่ต้องใช้ Global Variables หรือ Hidden Inputs ช่วยให้ JavaScript เข้าถึงข้อมูลได้ง่ายผ่าน dataset API

กฎการตั้งชื่อ

  • ขึ้นต้นด้วย data- เสมอ
  • ชื่อหลัง data- ต้องเป็น ตัวพิมพ์เล็ก (lowercase) เท่านั้น
  • คั่นคำด้วย Hyphen (-) เช่น data-user-id, data-max-count
  • ใน JavaScript เข้าถึงแบบ CamelCase: dataset.userId, dataset.maxCount

ตัวอย่างการใช้งาน

<!DOCTYPE html>
<html>
<head>
    <script>
        function display(element) {
            // เข้าถึงผ่าน dataset (แปลง hyphen-case เป็น camelCase อัตโนมัติ)
            const rankType = element.dataset.rankType; // data-rank-type
            const points = element.dataset.points;     // data-points
            const isActive = element.dataset.active === 'true'; // Boolean
            
            alert(`อันดับ: ${element.textContent}\nประเภท: ${rankType}\nคะแนน: ${points}\nActive: ${isActive}`);
        }
    </script>
</head>
<body>
    <h1>อันดับและคะแนน</h1>
    <p>คลิกที่อันดับเพื่อดูรายละเอียด:</p>
    <ul>
        <li onclick="display(this)" id="first" data-rank-type="gold" data-points="1000" data-active="true">อันดับ 1</li>
        <li onclick="display(this)" id="second" data-rank-type="silver" data-points="800" data-active="true">อันดับ 2</li>
        <li onclick="display(this)" id="third" data-rank-type="bronze" data-points="600" data-active="false">อันดับ 3</li>
    </ul>
</body>
</html>

Dataset API (JavaScript)

const el = document.getElementById('myElement');

// อ่านค่า (Hyphen-case → CamelCase)
el.dataset.userId;        // data-user-id
el.dataset.maxCount;      // data-max-count
el.dataset.apiEndpoint;   // data-api-endpoint

// เขียนค่า (CamelCase → Hyphen-case)
el.dataset.newValue = 'hello';     // สร้าง data-new-value="hello"
el.dataset.userId = '12345';       // อัปเดต data-user-id="12345"

// ลบค่า
delete el.dataset.userId;          // ลบ data-user-id

// ตรวจสอบมีหรือไม่
'userId' in el.dataset;            // true/false

// ได้ Object ทั้งหมด
console.log(el.dataset); // DOMStringMap { userId: "12345", ... }

กรณีการใช้งานทั่วไป

  • Configuration สำหรับ Widgets/Components (data-api-url, data-theme)
  • State ของ UI Components (data-open, data-selected)
  • Parameter สำหรับ Event Handlers (data-id, data-action)
  • Analytics/Tracking Data (data-track-event, data-category)
  • CSS Selectors: [data-active="true"], [data-user-id]

⚠️ ข้อควรระวัง

  • ข้อมูลมองเห็นได้ใน DevTools/Source - อย่าเก็บข้อมูลลับ (Tokens, PII)
  • ขนาดใหญ่เกินไปจะทำให้ DOM ใหญ่ - ใช้ localStorage หรือ JS Variables แทน
  • Boolean ใช้ string "true"/"false" (dataset จะคืน String เสมอ)