<tr>ï¼è¡¨æ ¼è¡å ç´
åºçº¿
广æ³å¯ç¨
*
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
HTML <tr> å
ç´ å®ä¹äºè¡¨æ ¼ä¸çä¸è¡åå
æ ¼ãç¶åå¯ä»¥ä½¿ç¨ <td>ï¼æ°æ®åå
æ ¼ï¼å <th>ï¼æ é¢åå
æ ¼ï¼å
ç´ çç»åæ¥å»ºç«è¯¥è¡çåå
æ ¼ã
å°è¯ä¸ä¸
<table>
<caption>
Alien football stars
</caption>
<tr>
<th scope="col">Player</th>
<th scope="col">Gloobles</th>
<th scope="col">Za'taak</th>
</tr>
<tr>
<th scope="row">TR-7</th>
<td>7</td>
<td>4,569</td>
</tr>
<tr>
<th scope="row">Khiresh Odo</th>
<td>7</td>
<td>7,223</td>
</tr>
<tr>
<th scope="row">Mia Oolong</th>
<td>9</td>
<td>6,219</td>
</tr>
</table>
th,
td {
border: 1px solid rgb(160 160 160);
padding: 8px 10px;
}
th[scope="col"] {
background-color: #505050;
color: #fff;
}
th[scope="row"] {
background-color: #d6ecd4;
}
td {
text-align: center;
}
tr:nth-of-type(even) {
background-color: #eee;
}
table {
border-collapse: collapse;
border: 2px solid rgb(140 140 140);
font-family: sans-serif;
font-size: 0.8rem;
letter-spacing: 1px;
}
caption {
caption-side: bottom;
padding: 10px;
}
屿§
æ¤å ç´ å å«å ¨å±å±æ§ã
å·²åºå¼ç屿§
以ä¸å±æ§å·²è¢«å¼ç¨ï¼ä¸åºå使ç¨ãä¸æè®°å½äºè¿äºå±æ§ï¼ä» 便´æ°ç°æä»£ç æ¶åèã
align-
æå®æ¯è¡åå æ ¼çæ°´å¹³å¯¹é½æ¹å¼ãå¯è½çæä¸¾å¼å æ¬
leftãcenterãrightãjustifyåcharãå¦ææ¯æï¼charå¼å°æ ¹æ®char屿§ä¸å®ä¹çå符åcharoff屿§å®ä¹çåç§»éå¯¹ææ¬å 容è¿è¡å¯¹é½ã请使ç¨text-alignCSS 屿§ä»£æ¿ï¼å ä¸ºè¯¥å±æ§å·²è¢«å¼ç¨ã bgcolor-
å®ä¹æ¯è¡åå æ ¼çèæ¯é¢è²ã弿¯ HTML é¢è²ï¼å¯ä»¥æ¯ä»¥â
#â为åç¼ç 6 ä½åå è¿å¶ RGB 代ç ï¼ä¹å¯ä»¥æ¯é¢è²å ³é®åã䏿¯æå ¶ä» CSS<color>å¼ã请使ç¨background-colorCSS 屿§ä»£æ¿ï¼å ä¸ºè¯¥å±æ§å·²è¢«å¼ç¨ã char-
æå®å 容䏿¯è¡åå æ ¼ä¸ä¸ä¸ªå符ç坹齿¹å¼ãå½å°è¯å¯¹é½æ°åæè´§å¸å¼æ¶ï¼å ¸åå¼å æ¬å¥å·ï¼
.ï¼ã妿alignæªè®¾ç½®ä¸ºcharï¼è¯¥å±æ§å°è¢«å¿½ç¥ã charoff-
æå®ç±
char屿§æå®ç对é½å符åç§»è¡åå æ ¼å 容çå符æ°ã valign-
æå®æ¯è¡åå æ ¼çåç´å¯¹é½æ¹å¼ãå¯è½çæä¸¾å¼å æ¬
baselineãbottomãmiddleåtopã请使ç¨vertical-alignCSS 屿§ä»£æ¿ï¼å ä¸ºè¯¥å±æ§å·²è¢«å¼ç¨ã
使ç¨è¯´æ
<tr>å¯ä»¥ä½ä¸ºå ¶<table>ç¶å ç´ çç´æ¥åå ç´ ï¼ä½åææ¯<table>没æ<tbody>åå ç´ ï¼å¹¶ä¸åªè½ä½äºä»»ä½<caption>ã<colgroup>å<thead>å ç´ ä¹åãå¦åï¼ç¶å ç´ å¿ é¡»æ¯<thead>ã<tbody>æ<tfoot>å ç´ ã- CSS 伪类
:nth-of-typeã:first-of-typeå:last-of-typeé常ç¨äºéæ©æéçè¡éåå ¶æ°æ®åæ é¢åå æ ¼ï¼<td>å<th>å ç´ ï¼ã
示ä¾
åè§ <table> 以è·åä»ç»éç¨æ ååæä½³å®è·µç宿´è¡¨æ ¼ç¤ºä¾ã
åºæ¬è¡è®¾ç½®
æ¬ä¾æ¼ç¤ºäºä¸ä¸ªæåè¡ä¸åçè¡¨æ ¼ï¼å ¶ä¸ç¬¬ä¸åå å«è¡æ°æ®åå æ ¼çæ é¢ã
HTML
å个 <tr> å
ç´ ç¨äºå建åä¸ªè¡¨æ ¼è¡ãæ¯è¡å
å«ä¸ä¸ªåå
æ ¼ââä¸ä¸ªæ é¢åå
æ ¼ï¼<th>ï¼åä¸¤ä¸ªæ°æ®åå
æ ¼ï¼<td>ï¼ââå½¢æä¸åã卿¯ä¸ªæ é¢åå
æ ¼ä¸è®¾ç½®ç scope 屿§æå®äºå®ä»¬ä¸åªäºåå
æ ¼ç¸å
³ï¼å¨æ¬ç¤ºä¾ä¸å°±æ¯ä¸ rowï¼è¡ï¼ä¸çæææ°æ®åå
æ ¼ç¸å
³ã
<table>
<tr>
<th scope="row">A</th>
<td>Alfa</td>
<td>AL fah</td>
</tr>
<tr>
<th scope="row">B</th>
<td>Bravo</td>
<td>BRAH voh</td>
</tr>
<tr>
<th scope="row">C</th>
<td>Charlie</td>
<td>CHAR lee</td>
</tr>
<tr>
<th scope="row">D</th>
<td>Delta</td>
<td>DELL tah</td>
</tr>
</table>
CSS
CSS :nth-of-type 伪类ç¨äºéæ©æ¯ä¸ä¸ªâ奿°âè¡ï¼å¹¶å°è¿äºè¡ç background-color è®¾ç½®ä¸ºç¨æçè²è°ï¼ä»è产çæè°çâæé©¬æ¡çº¹âææãè¿ç§äº¤æ¿çèæ¯ä½¿è¡¨æ ¼ä¸çæ°æ®è¡æ´å®¹æè§£æåé
读ââæ³è±¡ä¸ä¸æè®¸å¤è¡ååï¼å¹¶è¯å¾å¨æä¸è¡ä¸æ¾å°ä¸äºæ°æ®çæ
æ¯ãæ¤å¤ï¼è¡æ é¢åå
æ ¼ï¼<th> å
ç´ ï¼ç¨ background-color çªåºæ¾ç¤ºï¼ä»¥åºå«äºæ°æ®åå
æ ¼ï¼<td> å
ç´ ï¼ã
tr:nth-of-type(odd) {
background-color: #eee;
}
tr th[scope="row"] {
background-color: #d6ecd4;
}
ç»æ
æ é¢è¡
æ¬ç¤ºä¾æ©å±äºä¸ä¸ç¤ºä¾ä¸çåºæ¬è¡¨æ ¼ï¼å¨è¡¨æ ¼ç第ä¸è¡æ·»å äºæ é¢è¡ã
HTML
æä»¬æ·»å äºé¢å¤çè¡¨æ ¼è¡ï¼<tr>ï¼ä½ä¸ºç¬¬ä¸è¡ï¼å
¶ä¸çåæ é¢åå
æ ¼ï¼<th>ï¼ä¸ºæ¯åæä¾äºä¸ä¸ªæ é¢ãæä»¬å°è¿ä¸è¡æ¾å¨ <thead> åç»å
ç´ ä¸ï¼ä»¥è¡¨ç¤ºè¿æ¯è¡¨æ ¼ç表头ãscope 屿§è¢«æ·»å å°è¯¥é¡µçè¡ä¸çæ¯ä¸ªè¡¨å¤´åå
æ ¼ï¼<th>ï¼ä¸ï¼ä»¥æç¡®æå®æ¯ä¸ªè¡¨å¤´åå
æ ¼ä¸å
¶æå¨åä¸çææåå
æ ¼ç¸å
³ï¼å³ä½¿è¿äºåå
æ ¼ä½äº <tbody> ä¸ã
<table>
<tr>
<th scope="col">符å·</th>
<th scope="col">代ç </th>
<th scope="col">åé³</th>
</tr>
<tr>
<th scope="row">A</th>
<td>Alfa</td>
<td>AL fah</td>
</tr>
<tr>
<th scope="row">B</th>
<td>Bravo</td>
<td>BRAH voh</td>
</tr>
<tr>
<th scope="row">C</th>
<td>Charlie</td>
<td>CHAR lee</td>
</tr>
<tr>
<th scope="row">D</th>
<td>Delta</td>
<td>DELL tah</td>
</tr>
</table>
CSS
CSS ä¸ä¸ä¸ç¤ºä¾å 乿²¡æååï¼åªæ¯å¢å äºä¸äºæ ·å¼æ¥çªåºæ¾ç¤ºâæ é¢è¡âï¼ä»è使ååçæ é¢ä»å ¶ä»åå æ ¼ä¸è±é¢èåºã
tr:nth-of-type(odd) {
background-color: #eee;
}
tr th[scope="col"] {
background-color: #505050;
color: #fff;
}
tr th[scope="row"] {
background-color: #d6ecd4;
}
ç»æ
è¡æåº
ç®åè¿æ²¡æå¯¹ <table> çè¡ï¼<tr> å
ç´ ï¼è¿è¡æåºçåçæ¹æ³ã使¯å¯ä»¥ä½¿ç¨ Array.prototype.sort(), Node.removeChild å Node.appendChild å¨ JavaScript ä¸å®ç°èªå® sort() 彿°ï¼å¯¹ HTMLCollection ç <tr> å
ç´ è¿è¡æåºã
HTML
å¨è¿ä¸ªåºæ¬è¡¨æ ¼ä¸ä½¿ç¨äº <tbody> å
ç´ æ¥æ è®°è¡¨æ ¼ç主ä½é¨åï¼å¹¶å
å«ä¸è¡ï¼<tr> å
ç´ ï¼æ°æ®ï¼<td> å
ç´ ï¼ï¼å建äºä¸åæéåºæåçæ°åã
<table>
<tbody>
<tr>
<td>3</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>1</td>
</tr>
</tbody>
</table>
JavaScript
å¨ä¸é¢ç JavaScript 代ç ä¸ï¼å建ç sort() 彿°è¢«éå å° <tbody> å
ç´ ä¸ï¼è¿æ ·å®å°±è½æç
§æ°å¼éå¢ç顺åºå¯¹è¡¨æ ¼åå
æ ¼è¿è¡æåºï¼å¹¶ç¸åºå°æ´æ°æ¾ç¤ºå
容ã
HTMLTableSectionElement.prototype.sort = function (cb) {
Array.from(this.rows)
.sort(cb)
.forEach((e) => this.appendChild(this.removeChild(e)));
};
document
.querySelector("table")
.tBodies[0].sort((a, b) => a.textContent.localeCompare(b.textContent));
ç»æ
ç¹å»è¡¨å¤´åå æ ¼ä»¥è¿è¡æåº
æ¬ç¤ºä¾æ©å±äºä¸ä¸ç¤ºä¾ä¸çåºæ¬è¡¨æ ¼ï¼ä½¿æåºå ·æäº¤äºæ§ï¼å¹¶å¯ç¬ç«äºå¤åã
HTML
å¨è¡¨æ ¼ä¸»ä½ï¼<tbody> å
ç´ ï¼ä¸çæ¯ä¸è¡ï¼<tr> å
ç´ ï¼ä¸æ·»å ä¸ä¸ªé¢å¤çæ°æ®åå
æ ¼ï¼<td> å
ç´ ï¼ï¼ä»¥å建第äºåï¼æåæ¯ååºæåãä½¿ç¨ <thead> å
ç´ ï¼å¨ä¸»ä½é¨åä¹åæ·»å æ é¢é¨åï¼ä»¥å¼å
¥å
å«è¡¨å¤´åå
æ ¼çæ é¢è¡ï¼<th> å
ç´ ï¼ãå¨ä¸é¢ç JavaScript 代ç ä¸ä½¿ç¨è¿äºæ é¢åå
æ ¼ï¼ä½¿å
¶å¯ä»¥ç¹å»ï¼ç¶å卿¯æ¬¡ç¹å»æ¿æ´»æ¶æ§è¡ç¸åºçæåºã
<table>
<thead>
<tr>
<th>æ°å</th>
<th>忝</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>A</td>
</tr>
<tr>
<td>2</td>
<td>B</td>
</tr>
<tr>
<td>1</td>
<td>C</td>
</tr>
</tbody>
</table>
JavaScript
ææ¡£ä¸çæ¯ä¸ª <table> çæ¯ä¸ªè¡¨å¤´ï¼<th>å
ç´ ï¼é½æ·»å äºä¸ä¸ªç¹å»äºä»¶å¤çç¨åºï¼å®ä¼æ ¹æ®è¡ä¸å
å«çæ°æ®åå
æ ¼ï¼<td> å
ç´ ï¼çå
容对 <tbody> çææè¡ï¼<tr> å
ç´ ï¼è¿è¡æåºã
夿³¨ï¼æ¤è§£å³æ¹æ¡å设 <td> å
ç´ ç±åå§ææ¬å¡«å
ï¼æ²¡æå代å
ç´ ã
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);
});
}
}
ç»æ
夿³¨ï¼ä¸ºäºä¿è¯å¯ç¨æ§åæ éç¢æ§ï¼æ¯ä¸ªå¯æåºåçæ é¢åå
æ ¼é½å¿
é¡»å¯è¯å«ä¸ºæåºæé®ï¼å¹¶ä¸æ¯ä¸ªæ é¢åå
æ ¼é½å¿
须以å¯è§æ¹å¼å®ä¹åå½åæ¯æååºè¿æ¯éåºæåºï¼å¹¶ä½¿ç¨ aria-sort 屿§ãæ´å¤ä¿¡æ¯è¯·åé
ARIA åä½å®è·µæåç坿åºè¡¨æ ¼ç¤ºä¾ã
ææ¯æ¦è¦
| å 容åç±» | æ |
|---|---|
| å 许çå 容 |
å
许使ç¨é¶ä¸ªæå¤ä¸ª <td> å/æ <th> å
ç´ ï¼ä¹å
许使ç¨èæ¬æ¯æå
ç´ ï¼<script> å <template>ï¼ã
|
| æ ç¾çç¥ |
å¼å§æ è®°æ¯å¿
éçã妿 <tr> å
ç´ åé¢ç´§è·çä¸ä¸ª <tr> å
ç´ ï¼æè
è¯¥è¡æ¯å
¶ç¶è¡¨ç»ï¼<thead>ã<tbody> æ <tfoot>ï¼å
ç´ ä¸çæåä¸ä¸ªå
ç´ ï¼åå¯ä»¥çç¥ç»ææ è®°ã
|
| å 许çç¶å ç´ |
<table>ï¼ä»
å½è¡¨æ ¼æ²¡æ <tbody> åå
ç´ æ¶ï¼å³ä¾¿å¦æ¤ï¼ä¹åªè½å¨ä»»ä½ <caption>ã<colgroup> å <thead> å
ç´ ä¹åï¼ï¼å¦åï¼ç¶å
ç´ å¿
é¡»æ¯ <thead>ã<tbody> æ <tfoot> å
ç´ ã
|
| éå«ç ARIA è§è² |
row
|
| å 许ç ARIA è§è² | ä»»æ |
| DOM æ¥å£ | HTMLTableRowElement |
è§è
| è§è |
|---|
| HTML > # the-tr-element > |
æµè§å¨å ¼å®¹æ§
åè§
- å¦ä¹ ï¼HTML è¡¨æ ¼
<caption>ã<col>ã<colgroup>ã<table>ã<tbody>ã<td>ã<tfoot>ã<th>ã<thead>ï¼å ¶ä»ä¸è¡¨æ ¼ç¸å ³çå ç´background-colorï¼ç¨äºè®¾ç½®åå æ ¼èæ¯é¢è²ç CSS 屿§borderï¼ç¨äºæ§å¶è¡åå æ ¼è¾¹æ¡ç CSS 屿§text-alignï¼ä½¿æ¯è¡åå æ ¼å 容水平对é½ç CSS 屿§vertical-alignï¼ä½¿æ¯è¡åå æ ¼å 容åç´å¯¹é½ç CSS 屿§:nth-of-typeã:first-of-typeã:last-of-typeï¼éæ©ç¹å®åå æ ¼ç伪类