HTML表格由行和单元格组成。<td> 元素定义表格中的标准单元格,而 <th> 元素定义表格中的表头单元格。
<td> 标签定义HTML表格中的标准数据单元格。
<th> 标签定义HTML表格中的表头单元格。
以下是 <td> 和 <th> 元素的所有属性,包括已废弃的属性:
| 属性 | 状态 | 描述 | 示例 |
|---|---|---|---|
abbr |
标准 | 设置或返回单元格中内容的缩写版本(主要用于 <th>) | <th abbr="Desc">详细描述</th> |
align |
已废弃 | 设置或返回单元格内部数据的水平排列方式 | <td align="center">内容</td> |
axis |
标准 | 设置或返回相关单元格的一个逗号分隔的列表 | <td axis="category1,category2">内容</td> |
background |
已废弃 | 设置或返回表格的背景图片 | <td background="bg.jpg">内容</td> |
bgColor |
已废弃 | 设置或返回表格的背景颜色 | <td bgColor="#ff0000">内容</td> |
cellIndex |
标准 | 返回单元格在某行的单元格集合中的位置(只读) | let index = cell.cellIndex; |
ch |
标准 | 设置或返回单元格的对齐字符 | <td ch=".">内容</td> |
chOff |
标准 | 设置或返回单元格的对齐字符的偏移量 | <td chOff="2">内容</td> |
colSpan |
标准 | 单元格横跨的列数 | <td colspan="2">跨两列的内容</td> |
headers |
标准 | 设置或返回 header-cell 的 id 值 | <td headers="name-header age-header">数据</td> |
height |
已废弃 | 设置或返回数据单元的高度 | <td height="50">内容</td> |
noWrap |
已废弃 | nowrap 属性规定表格单元格中的内容不换行 | <td noWrap>内容</td> |
rowSpan |
标准 | 设置或返回单元格可横跨的行数 | <td rowspan="3">跨三行的内容</td> |
scope |
标准 | 定义表头单元格是行、列、行组还是列组的表头(仅 <th>) | <th scope="col">姓名</th> |
vAlign |
标准 | 设置或返回表格单元格内数据的垂直排列方式 | <td vAlign="top">内容</td> |
width |
已废弃 | 设置或返回单元格的宽度 | <td width="100">内容</td> |
标记为"已废弃"的属性不再被推荐使用,它们可能在未来的浏览器版本中被移除。对于这些属性,建议使用CSS来实现相同的效果:
align → 使用 text-align CSS属性background → 使用 background-image CSS属性bgColor → 使用 background-color CSS属性height → 使用 height CSS属性noWrap → 使用 white-space: nowrap CSS属性width → 使用 width CSS属性虽然 <td> 和 <th> 元素没有自己特有的方法(它们继承自HTMLElement),但在处理表格时有一些常用方法特别适用于这些元素:
| 方法 | 描述 | 示例 |
|---|---|---|
insertCell() |
在表格行中插入新的单元格 | let newCell = row.insertCell(0); |
deleteCell() |
从表格行中删除单元格 | row.deleteCell(0); |
// 获取表格行
let row = document.getElementById("myRow");
// 在指定位置插入新单元格
let newCell = row.insertCell(2); // 在第三列位置插入
newCell.textContent = "新内容";
// 删除指定位置的单元格
row.deleteCell(0); // 删除第一列
// 遍历行中的所有单元格
for (let i = 0; i < row.cells.length; i++) {
console.log("单元格 " + i + ": " + row.cells[i].textContent);
}
// 动态操作表格单元格的完整示例
function addRowToTable() {
let table = document.getElementById("myTable");
let newRow = table.insertRow();
// 添加单元格
let cell1 = newRow.insertCell(0);
let cell2 = newRow.insertCell(1);
let cell3 = newRow.insertCell(2);
cell1.textContent = "新行";
cell2.textContent = "数据";
cell3.innerHTML = '<button onclick="deleteRow(this)">删除</button>';
}
function deleteRow(button) {
let row = button.parentNode.parentNode;
row.parentNode.removeChild(row);
}
以下是一些适用于 <td> 和 <th> 元素的主要通用方法:
| 方法 | 描述 | 示例 |
|---|---|---|
setAttribute() |
设置指定属性的值 | cell.setAttribute('colspan', '2'); |
getAttribute() |
返回指定属性的值 | let colspan = cell.getAttribute('colspan'); |
removeAttribute() |
移除指定属性 | cell.removeAttribute('colspan'); |
hasAttribute() |
检查元素是否有指定属性 | if (cell.hasAttribute('colspan')) { ... } |
getAttributeNames() |
返回元素的所有属性名称数组 | let attrs = cell.getAttributeNames(); |
| 方法 | 描述 | 示例 |
|---|---|---|
insertAdjacentHTML() |
在指定位置插入HTML文本 | cell.insertAdjacentHTML('beforeend', '<span>新内容</span>'); |
insertAdjacentText() |
在指定位置插入文本 | cell.insertAdjacentText('beforeend', '新文本'); |
insertAdjacentElement() |
在指定位置插入元素 | cell.insertAdjacentElement('beforeend', newElement); |
| 方法 | 描述 | 示例 |
|---|---|---|
addEventListener() |
为元素添加事件监听器 | cell.addEventListener('click', handleClick); |
removeEventListener() |
移除元素的事件监听器 | cell.removeEventListener('click', handleClick); |
dispatchEvent() |
向元素派发事件 | cell.dispatchEvent(new Event('click')); |
| 方法 | 描述 | 示例 |
|---|---|---|
classList.add() |
添加一个或多个类名 | cell.classList.add('highlight', 'active'); |
classList.remove() |
移除一个或多个类名 | cell.classList.remove('highlight'); |
classList.toggle() |
切换类名的存在状态 | cell.classList.toggle('active'); |
classList.contains() |
检查是否包含指定类名 | if (cell.classList.contains('highlight')) { ... } |
// 获取单元格元素
let cell = document.getElementById("myCell");
// 属性操作
cell.setAttribute('data-id', '123');
let id = cell.getAttribute('data-id');
cell.removeAttribute('data-id');
let hasAttr = cell.hasAttribute('colspan');
// 内容操作
cell.insertAdjacentHTML('beforeend', '<strong>重要内容</strong>');
cell.insertAdjacentText('beforeend', '普通文本');
// 事件处理
function handleClick(event) {
console.log('单元格被点击了');
}
cell.addEventListener('click', handleClick);
// 类操作
cell.classList.add('highlight', 'active');
cell.classList.remove('active');
cell.classList.toggle('selected');
let hasClass = cell.classList.contains('highlight');
// 样式操作
cell.style.backgroundColor = 'yellow';
cell.style.fontWeight = 'bold';
通过JavaScript访问 <td> 和 <th> 元素的属性:
// 获取单元格元素
let cell = document.getElementById("myCell");
// 访问专用属性
cell.abbr; // 获取或设置abbr属性
cell.align; // 获取或设置align属性 (已废弃)
cell.axis; // 获取或设置axis属性
cell.background; // 获取或设置background属性 (已废弃)
cell.bgColor; // 获取或设置bgColor属性 (已废弃)
cell.cellIndex; // 获取单元格在行中的索引 (只读)
cell.ch; // 获取或设置ch属性
cell.chOff; // 获取或设置chOff属性
cell.colSpan; // 获取或设置colSpan属性
cell.headers; // 获取或设置headers属性
cell.height; // 获取或设置height属性 (已废弃)
cell.noWrap; // 获取或设置noWrap属性 (已废弃)
cell.rowSpan; // 获取或设置rowSpan属性
cell.scope; // 获取或设置scope属性 (仅th)
cell.vAlign; // 获取或设置vAlign属性
cell.width; // 获取或设置width属性 (已废弃)
// 通用属性
cell.id; // 获取或设置id
cell.className; // 获取或设置class
cell.style; // 获取样式对象
cell.title; // 获取或设置title
cell.dataset; // 获取data-*属性集合
cell.innerHTML; // 获取或设置HTML内容
cell.textContent; // 获取或设置文本内容
cell.innerText; // 获取或设置可见文本
通过以下交互演示来理解 <td> 和 <th> 元素的属性和方法如何工作:
点击表格中的单元格以选中它,然后使用上方的控制器修改其属性或使用方法。
| ID | 姓名 | 部门 | 薪水 |
|---|---|---|---|
| 1 | 张三 | 技术部 | ¥8,000 |
| 2 | 李四 | 市场部 | ¥7,500 |
| 3 | 王五 | 人力资源 | ¥7,000 |