From 61746b9e11a05fddf56d2fe5de8f69b0276d4256 Mon Sep 17 00:00:00 2001 From: Jason Ren <40999116+jasonren0403@users.noreply.github.com> Date: Thu, 21 Mar 2024 13:36:55 +0800 Subject: [PATCH] [zh-cn] update `` html element (#18794) --- files/zh-cn/web/html/element/tr/index.md | 423 +++++++++++++++++++---- 1 file changed, 365 insertions(+), 58 deletions(-) diff --git a/files/zh-cn/web/html/element/tr/index.md b/files/zh-cn/web/html/element/tr/index.md index b83ec922b2e664..77980e711e0aea 100644 --- a/files/zh-cn/web/html/element/tr/index.md +++ b/files/zh-cn/web/html/element/tr/index.md @@ -1,105 +1,412 @@ --- -title: +title: :表格行元素 slug: Web/HTML/Element/tr +l10n: + sourceCommit: fffabdeeb9a069e40a070dadeedc93298b2aca7e --- -**HTML `` 元素**定义表格中的行。同一行可同时出现{{HTMLElement("td")}} 和{{HTMLElement("th")}} 元素。 +{{HTMLSidebar}} - - +[HTML](/zh-CN/docs/Web/HTML) **``** 元素定义了表格中的一行单元格。然后可以使用 {{HTMLElement("td")}}(数据单元格)和 {{HTMLElement("th")}}(标题单元格)元素的组合来建立该行的单元格。 + +{{EmbedInteractiveExample("pages/tabbed/tr.html","tabbed-taller")}} + +## 属性 + +此元素包含[全局属性](/zh-CN/docs/Web/HTML/Global_attributes)。 + +### 已废弃的属性 + +以下属性已被弃用,不应再使用。下文记录了这些属性,仅供更新现有代码时参考。 + +- `align` {{deprecated_inline}} + + - : 指定每行单元格的水平对齐方式。可能的{{Glossary("enumerated", "枚举")}}值包括 `left`、`center`、`right`、`justify` 和 `char`。如果支持,`char` 值将根据 [`char`](#char) 属性中定义的字符和 [`charoff`](#charoff) 属性定义的偏移量对文本内容进行对齐。请使用 {{cssxref("text-align")}} CSS 属性代替,因为该属性已被弃用。 + +- `bgcolor` {{deprecated_inline}} + + - : 定义每行单元格的背景颜色。值是 HTML 颜色;可以是以“`#`”为前缀的 [6 位十六进制 RGB 代码](/zh-CN/docs/Web/CSS/hex-color),也可以是[颜色关键字](/zh-CN/docs/Web/CSS/named-color)。不支持其他 CSS {{cssxref("color_value", "<color>")}} 值。请使用 {{cssxref("background-color")}} CSS 属性代替,因为该属性已被弃用。 + +- `char` {{deprecated_inline}} + + - : 指定内容与每行单元格中一个字符的对齐方式。当尝试对齐数字或货币值时,典型值包括句号(`.`)。如果 [`align`](#align) 未设置为 `char`,该属性将被忽略。 + +- `charoff` {{deprecated_inline}} + + - : 指定由 [`char`](#char) 属性指定的对齐字符偏移行单元格内容的字符数。 + +- `valign` {{deprecated_inline}} + + - : 指定每行单元格的垂直对齐方式。可能的{{Glossary("enumerated", "枚举")}}值包括 `baseline`、`bottom`、`middle` 和 `top`。请使用 {{cssxref("vertical-align")}} CSS 属性代替,因为该属性已被弃用。 + +## 使用说明 + +- `` 可以作为其 {{HTMLElement("table")}} 父元素的直接子元素,但前提是 `
` 没有 {{HTMLElement("tbody")}} 子元素,并且只能位于任何 {{HTMLElement("caption")}}、{{HTMLElement("colgroup")}} 和 {{HTMLElement("thead")}} 元素之后。否则,父元素必须是 {{HTMLElement("thead")}}、{{HTMLElement("tbody")}} 或 {{HTMLElement("tfoot")}} 元素。 +- CSS 伪类 {{cssxref(":nth-of-type")}}、{{cssxref(":first-of-type")}} 和 {{cssxref(":last-of-type")}} 通常用于选择所需的行集及其数据和标题单元格({{HTMLElement("td")}} 和 {{HTMLElement("th")}} 元素)。 + +## 示例 + +参见 {{HTMLElement("table")}} 以获取介绍通用标准和最佳实践的完整表格示例。 + +### 基本行设置 + +本例演示了一个有四行三列的表格,其中第一列包含行数据单元格的标题。 + +#### HTML + +四个 `` 元素用于创建四个表格行。每行包含三个单元格——一个标题单元格({{HTMLElement("th")}})和两个数据单元格({{HTMLElement("td")}})——形成三列。在每个标题单元格上设置的 [`scope`](/zh-CN/docs/Web/HTML/Element/th#scope) 属性指定了它们与哪些单元格相关,在本示例中就是与 `row`(行)中的所有数据单元格相关。 + +```html +
- - + + + - - + + + - - + + + - - + + + + +
Content categoriesNoneAAlfaAL fah
Permitted contentZero or more {{HTMLElement("td")}} or {{HTMLElement("th")}} elements, or a mix of themBBravoBRAH voh
Tag omissionStart tag is mandatory. End tag may be omitted if the {{HTMLElement("tr")}} element is immediately followed by a {{HTMLElement("tr")}} element, or if the parent table group ({{HTMLElement("thead")}}, {{HTMLElement("tbody")}} or {{HTMLElement("tfoot")}}) element doesn't have any more contentCCharlieCHAR lee
Permitted parents{{HTMLElement("table")}}, {{HTMLElement("thead")}}, {{HTMLElement("tbody")}} or {{HTMLElement("tfoot")}} elementDDeltaDELL tah
+``` + +#### CSS + +CSS {{cssxref(":nth-of-type")}} 伪类用于选择每一个“奇数”行,并将这些行的 {{cssxref("background-color")}} 设置为稍暗的色调,从而产生所谓的“斑马条纹”效果。这种交替的背景使表格中的数据行更容易解析和阅读——想象一下有许多行和列,并试图在某一行中找到一些数据的情景。此外,行标题单元格({{HTMLElement("th")}} 元素)用 {{cssxref("background-color")}} 突出显示,以区别于数据单元格({{HTMLElement("td")}} 元素)。 + +```css +tr:nth-of-type(odd) { + background-color: #eee; +} + +tr th[scope="row"] { + background-color: #d6ecd4; +} +``` + +```css hidden +table { + border-collapse: collapse; + border: 2px solid rgb(140 140 140); + font-family: sans-serif; + font-size: 0.8rem; + letter-spacing: 1px; +} + +th, +td { + border: 1px solid rgb(160 160 160); + padding: 8px 10px; +} +``` + +#### 结果 + +{{EmbedLiveSample("基本行设置", 650, 140)}} + +### 标题行 + +本示例扩展了[上一示例](#基本行设置)中的基本表格,在表格的第一行添加了标题行。 + +#### HTML + +我们添加了额外的表格行(``)作为第一行,其中的列标题单元格({{HTMLElement("th")}})为每列提供了一个标题。我们将这一行放在 {{HTMLElement("thead")}} 分组元素中,以表示这是表格的表头。[`scope`](/zh-CN/docs/Web/HTML/Element/th#scope) 属性被添加到该页眉行中的每个表头单元格(``)中,以明确指定每个表头单元格与其所在列中的所有单元格相关,即使这些单元格位于 {{HTMLElement("tbody")}} 中。 + +```html + + + + + + + + + + + + + + + - - + + + - - + + + -
符号代码发音
AAlfaAL fah
BBravoBRAH voh
Permitted ARIA rolesAnyCCharlieCHAR lee
DOM interface{{domxref("HTMLTableRowElement")}}DDeltaDELL tah
+``` -## Attributes +#### CSS -表格标签支持 [全局特性](/zh-CN/docs/HTML/Global_attributes)。还有一些过期的特性,你应该避免使用它们,但是可以了解它们,会在你阅读旧代码的时候有所帮助。 +CSS 与[上一示例](#基本行设置)几乎没有变化,只是增加了一些样式来突出显示“标题行”,从而使各列的标题从其他单元格中脱颖而出。 -- `align` {{Deprecated_inline}} +```css +tr:nth-of-type(odd) { + background-color: #eee; +} - - : 该枚举属性指定每个单元格中内容的水平对齐方式,可使用的属性值如下: +tr th[scope="col"] { + background-color: #505050; + color: #fff; +} - - `left`, 内容在单元格中左对齐 - - `center`, 内容在单元格中居中 - - `right`, 内容在单元格中右对齐 - - `justify`, 增加文本内容之间的空白以伸展这行文本,使得该单元格中的多行文本具有相同的长度。 - - `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](/zh-CN/docs/Web/HTML/Element/tr#char) and [`charoff`](/zh-CN/docs/Web/HTML/Element/tr#charoff) attributes. If this attribute is not set, the parent node's value is inherited. +tr th[scope="row"] { + background-color: #d6ecd4; +} +``` - > **备注:** Do not use this attribute as it is obsolete (not supported) in the latest standard. - > - > - To achieve the same effect as the `left`, `center`, `right` or `justify` values, use the CSS {{cssxref("text-align")}} property on it. - > - To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](/zh-CN/docs/Web/HTML/Element/tr#char) as the value of the {{cssxref("text-align")}} property. +```css hidden +table { + border-collapse: collapse; + border: 2px solid rgb(140 140 140); + font-family: sans-serif; + font-size: 0.8rem; + letter-spacing: 1px; +} -- `bgcolor` {{Deprecated_inline}} +th, +td { + border: 1px solid rgb(160 160 160); + padding: 8px 10px; +} +``` - - : This attribute defines the background color of each cell of the row. It can be either an [hexadecimal `#RRGGBB` or `#RGB` value]() or a [color keyword](/zh-CN/docs/Web/CSS/color_value#Color_keywords). +#### 结果 - > **备注:** the {{HTMLElement("tr")}} element should be styled using [CSS](/zh-CN/docs/CSS). To give a similar effect to the **bgcolor** attribute, use the [CSS](/zh-CN/docs/CSS) property {{cssxref("background-color")}}. +{{EmbedLiveSample("标题行", 650, 170)}} -- `char` {{Deprecated_inline}} +### 行排序 - - : This attribute is used to set the character to align the cells in a column on. Typical values for this include a period (.) when attempting to align numbers or monetary values. If [`align`](/zh-CN/docs/Web/HTML/Element/tr#align) is not set to `char`, this attribute is ignored. +目前还没有对 {{HTMLElement("table")}} 的行(`` 元素)进行排序的原生方法。但是可以使用 {{jsxref("Array.prototype.sort()")}}, {{domxref("Node.removeChild")}} 和 {{domxref("Node.appendChild")}} 在 JavaScript 中实现自定 `sort()` 函数,对 {{domxref("HTMLCollection")}} 的 `` 元素进行排序。 - > **备注:** Do not use this attribute as it is obsolete (and not supported) in the latest standard. To achieve the same effect as the [`char`](/zh-CN/docs/Web/HTML/Element/tr#char), in CSS3, you can use the character set using the [`char`](/zh-CN/docs/Web/HTML/Element/tr#char) attribute as the value of the {{cssxref("text-align")}} property. +#### HTML -- `charoff` {{Deprecated_inline}} +在这个基本表格中使用了 {{HTMLElement("tbody")}} 元素来标记表格的主体部分,并包含三行({{HTMLElement("tr")}} 元素)数据({{HTMLElement("td")}} 元素),创建了一列按降序排列的数字。 - - : This attribute is used to indicate the number of characters to offset the column data from the alignment characters specified by the **char** attribute. +```html + + + + + + + + + + + + +
3
2
1
+``` - > **备注:** Do not use this attribute as it is obsolete (and not supported) in the latest standard. +#### JavaScript -- `valign` {{Deprecated_inline}} +在下面的 JavaScript 代码中,创建的 `sort()` 函数被附加到 {{HTMLElement("tbody")}} 元素上,这样它就能按照数值递增的顺序对表格单元格进行排序,并相应地更新显示内容。 - - : This attribute specifies the vertical alignment of the text within each row of cells of the table header. Possible values for this attribute are: +```js +HTMLTableSectionElement.prototype.sort = function (cb) { + Array.from(this.rows) + .sort(cb) + .forEach((e) => this.appendChild(this.removeChild(e))); +}; - - `baseline`, which will put the text as close to the bottom of the cell as it is possible, but align it on the [baseline](https://en.wikipedia.org/wiki/Baseline_%28typography%29) of the characters instead of the bottom of them. If characters are all of the size, this has the same effect as `bottom`. - - `bottom`, which will put the text as close to the bottom of the cell as it is possible; - - `middle`, which will center the text in the cell; - - and `top`, which will put the text as close to the top of the cell as it is possible. +document + .querySelector("table") + .tBodies[0].sort((a, b) => a.textContent.localeCompare(b.textContent)); +``` - > **备注:** Do not use this attribute as it is obsolete (and not supported) in the latest standard: instead set the CSS {{cssxref("vertical-align")}} property on it. +```css hidden +table { + border-collapse: collapse; + border: 2px solid rgb(140 140 140); + font-family: sans-serif; + font-size: 0.8rem; + letter-spacing: 1px; +} -## Examples +td { + border: 1px solid rgb(160 160 160); + padding: 4px 8px; +} +``` -See {{HTMLElement("table")}} for examples on ``. +#### 结果 -## Specifications +{{EmbedLiveSample('行排序', '650', '80')}} -{{Specifications}} +### 点击表头单元格以进行排序 -## Browser compatibility +本示例扩展了[上一示例](#行排序)中的基本表格,使排序具有交互性,并可独立于多列。 -{{Compat}} +#### HTML -## See also +在表格主体({{HTMLElement("tbody")}} 元素)中的每一行(`` 元素)上添加一个额外的数据单元格({{HTMLElement("td")}} 元素),以创建第二列,按字母升序排列。使用 {{HTMLElement("thead")}} 元素,在主体部分之前添加标题部分,以引入包含表头单元格的标题行({{HTMLElement("th")}} 元素)。在下面的 JavaScript 代码中使用这些标题单元格,使其可以点击,然后在每次点击激活时执行相应的排序。 -- Other table-related HTML Elements: {{HTMLElement("caption")}}, {{HTMLElement("col")}}, {{HTMLElement("colgroup")}}, {{HTMLElement("table")}}, {{HTMLElement("tbody")}}, {{HTMLElement("td")}}, {{HTMLElement("tfoot")}}, {{HTMLElement("th")}}, {{HTMLElement("thead")}}; -- CSS properties and pseudo-classes that may be specially useful to style the `` element: +```html + + + + + + + + + + + + + + + + + + + + + +
数字字母
3A
2B
1C
+``` - - the {{cssxref(":nth-child")}} pseudo-class to set the alignment on the cells of the column; - - the {{cssxref("text-align")}} property to align all cells content on the same character, like '.'.< +#### JavaScript -{{HTMLSidebar}} +{{domxref("HTMLDocument", "文档")}}中的每个 {{HTMLElement("table")}} 的每个表头({{HTMLElement("th")}}元素)都添加了一个点击事件处理程序;它会根据行中包含的数据单元格({{HTMLElement("td")}} 元素)的内容对 {{HTMLElement("tbody")}} 的所有行(`` 元素)进行排序。 + +> **备注:** 此解决方案假设 {{HTMLElement("td")}} 元素由原始文本填充,没有后代元素。 + +```js +const allTables = document.querySelectorAll("table"); + +for (const table of allTables) { + const tBody = table.tBodies[0]; + const rows = Array.from(tBody.rows); + const headerCells = table.tHead.rows[0].cells; + + for (const th of headerCells) { + const cellIndex = th.cellIndex; + + th.addEventListener("click", () => { + rows.sort((tr1, tr2) => { + const tr1Text = tr1.cells[cellIndex].textContent; + const tr2Text = tr2.cells[cellIndex].textContent; + return tr1Text.localeCompare(tr2Text); + }); + + tBody.append(...rows); + }); + } +} +``` + +```css hidden +table { + border-collapse: collapse; + border: 2px solid rgb(140 140 140); + font-family: sans-serif; + font-size: 0.8rem; + letter-spacing: 1px; +} + +th, +td { + border: 1px solid rgb(160 160 160); + padding: 4px 8px; +} + +th { + background-color: #505050; + color: #fff; + cursor: pointer; +} +``` + +#### 结果 + +{{EmbedLiveSample('点击表头单元格以进行排序', '650', '100')}} + +> **备注:** 为了保证可用性和无障碍性,每个可排序列的标题单元格都必须可识别为排序按钮,并且每个标题单元格都必须以可视方式定义列当前是按升序还是降序排序,并使用 [`aria-sort`](/zh-CN/docs/Web/Accessibility/ARIA/Attributes/aria-sort) 属性。更多信息请参阅 [ARIA 创作实践指南](https://www.w3.org/WAI/ARIA/apg/)的[可排序表格示例](https://www.w3.org/WAI/ARIA/apg/patterns/table/examples/sortable-table/)。 + +## 技术概要 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 内容分类 +
允许的内容 + 允许使用零个或多个 {{HTMLElement("td")}} 和/或 {{HTMLElement("th")}} 元素;也允许使用{{Glossary("script-supporting element", "脚本支持元素")}}({{HTMLElement("script")}} 和 {{HTMLElement("template")}})。 +
标签省略 + 开始标记是必需的。如果 {{HTMLElement("tr")}} 元素后面紧跟着一个 {{HTMLElement("tr")}} 元素,或者该行是其父表组({{HTMLElement("thead")}}、{{HTMLElement("tbody")}} 或 {{HTMLElement("tfoot")}})元素中的最后一个元素,则可以省略结束标记。 +
允许的父元素 + {{HTMLElement("table")}}(仅当表格没有 {{HTMLElement("tbody")}} 子元素时,即便如此,也只能在任何 {{HTMLElement("caption")}}、{{HTMLElement("colgroup")}} 和 {{HTMLElement("thead")}} 元素之后);否则,父元素必须是 {{HTMLElement("thead")}}、{{HTMLElement("tbody")}} 或 {{HTMLElement("tfoot")}} 元素。 +
隐含的 ARIA 角色 + row +
允许的 ARIA 角色任意
DOM 接口{{DOMxRef("HTMLTableRowElement")}}
+ +## 规范 + +{{Specifications}} + +## 浏览器兼容性 + +{{Compat}} + +## 参见 + +- [学习:HTML 表格](/zh-CN/docs/Learn/HTML/Tables) +- {{HTMLElement("caption")}}、{{HTMLElement("col")}}、{{HTMLElement("colgroup")}}、{{HTMLElement("table")}}、{{HTMLElement("tbody")}}、{{HTMLElement("td")}}、{{HTMLElement("tfoot")}}、{{HTMLElement("th")}}、{{HTMLElement("thead")}}:其他与表格相关的元素 +- {{cssxref("background-color")}}:用于设置单元格背景颜色的 CSS 属性 +- {{cssxref("border")}}:用于控制行单元格边框的 CSS 属性 +- {{cssxref("text-align")}}:使每行单元格内容水平对齐的 CSS 属性 +- {{cssxref("vertical-align")}}:使每行单元格内容垂直对齐的 CSS 属性 +- {{cssxref(":nth-of-type")}}、{{cssxref(":first-of-type")}}、{{cssxref(":last-of-type")}}:选择特定单元格的伪类