Thuộc tính headers của đối tượng HTMLTableCellElement (<td> hoặc <th>) dùng để **liên kết ô dữ liệu với một hoặc nhiều ô tiêu đề (<th>)** thông qua thuộc tính id. Đây là cơ chế **accessibility** quan trọng giúp screen reader phát âm đúng ngữ cảnh: "Cột Tên, hàng An" thay vì chỉ "An".
Cú pháp
// Lấy giá trị (chuỗi các id cách nhau bởi dấu cách) var ids = tdElement.headers; // Đặt giá trị tdElement.headers = "idHeader1 idHeader2";
Ví dụ: Liên kết ô dữ liệu với header
<!DOCTYPE html>
<html>
<style>
body { color: #000; background: lightblue; height: 100vh; text-align: center; }
table { margin: 2rem auto; width: 400px; border-collapse: collapse; }
.btn { background: #db133a; border: none; height: 2rem; border-radius: 2px; width: 40%; display: block; color: #fff; outline: none; cursor: pointer; margin: 1rem auto; }
.show { font-size: 1.2rem; margin-top: 1rem; }
<body>
<h1>Demo: td.headers</h1>
<table border="2">
<thead>
<tr>
<th id="hName">Tên</th>
<th id="hRoll">Mã SV</th>
</tr>
</thead>
<tbody>
<tr>
<td headers="hName">An</td>
<td headers="hRoll">071717</td>
</tr>
<tr>
<td headers="hName" id="janeCell">Bình</td>
<td headers="hRoll">031717</td>
</tr>
</tbody>
</table>
<button onclick="showHeaders()" class="btn">Hiện headers của ô "Bình"</button>
<div class="show" id="result"></div>
<script>
function showHeaders() {
document.getElementById('result').textContent = 'headers = "' + document.getElementById('janeCell').headers + '"';
}
</script>
</body>
</html>
Kết quả:
Nhấn nút → Hiển thị: headers = "hName"
Khi nào cần dùng headers?
- Bảng phức tạp: header không ở hàng đầu/cột đầu, hoặc header chia nhóm (
colgroup,rowgroup). - Một ô dữ liệu liên quan đến **nhiều header** (ví dụ: ô giao điểm của hàng "Q3" và cột "Doanh thu" →
headers="q3Header revenueHeader"). - Tuân thủ WCAG: Bảng dữ liệu phức tạp **bắt buộc** dùng
headers/idhoặcscope.
headers vs scope
| Đặc điểm | scope (trên th) | headers + id (trên td/th) |
|---|---|---|
| Độ phức tạp | Đơn giản | Phức tạp hơn |
| Phù hợp | Bảng đơn giản (header hàng/cột chuẩn) | Bảng phức tạp, header đa cấp, ô giao nhau |
| Hỗ trợ screen reader | Tốt | Tốt nhất cho bảng phức tạp |
Khuyên dùng: Bảng đơn giản → scope="col|row" trên <th>. Bảng phức tạp → id trên <th> + headers trên <td>.