Skip to content

Commit

Permalink
Add HTMLTable*Element members for cell position in a row (#33326)
Browse files Browse the repository at this point in the history
  • Loading branch information
teoli2003 committed May 1, 2024
1 parent 61c822f commit e5cb967
Show file tree
Hide file tree
Showing 8 changed files with 412 additions and 49 deletions.
82 changes: 82 additions & 0 deletions files/en-us/web/api/htmltablecellelement/cellindex/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
---
title: "HTMLTableCellElement: cellIndex property"
short-title: cellIndex
slug: Web/API/HTMLTableCellElement/cellIndex
page-type: web-api-instance-property
browser-compat: api.HTMLTableCellElement.cellIndex
---

{{ APIRef("HTML DOM") }}

The **`cellIndex`** read-only property of the {{domxref("HTMLTableCellElement")}} interface
represents the position of a cell within its row ({{htmlelement("tr")}}). The first cell has an index of `0`.

## Value

Returns the index of the cell, or `-1` if the cell is not part of any row.

## Examples

This example adds a label all the cell numbers of the first row of the `tbody`.

### HTML

```html
<table>
<thead>
<tr>
<th>Item</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bananas</td>
<td>$2</td>
</tr>
<tr>
<td>Rice</td>
<td>$2.5</td>
</tr>
</tbody>
</table>
```

```css hidden
table {
border-collapse: collapse;
}

th,
td,
table {
border: 1px solid black;
}

button {
margin: 1em 1em 1em 0;
}
```

### JavaScript

```js
const rows = document.querySelectorAll("tbody tr");
const cells = rows[0].cells;

for (const cell of cells) {
cell.textContent = `${cell.textContent} (cell #${cell.cellIndex})`;
}
```

### Result

{{EmbedLiveSample("Examples")}}

## Specifications

{{Specifications}}

## Browser compatibility

{{Compat}}
4 changes: 2 additions & 2 deletions files/en-us/web/api/htmltablecellelement/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ The **`HTMLTableCellElement`** interface provides special properties and methods
_Inherits properties from its parent, {{domxref("HTMLElement")}}._

- {{domxref("HTMLTableCellElement.abbr")}}
- : A string that can be used on `<th>` elements (not on {{HTMLElement("td")}}), specifying an alternative label for the header cell. This alternate label can be used in other contexts, such as when describing the headers that apply to a data cell. This is used to offer a shorter term for use by screen readers in particular, and is a valuable accessibility tool. Usually, the value of `abbr` is an abbreviation or acronym, but can be any text that's appropriate contextually.
- : A string that can be used on `<th>` elements (not on {{HTMLElement("td")}}), specifying an alternative label for the header cell. This alternate label can be used in other contexts, such as when describing the headers that apply to a data cell. This is used to offer a shorter term for use by screen readers in particular; and is a valuable accessibility tool. Usually, the value of `abbr` is an abbreviation or acronym, but can be any text that's appropriate contextually.
- {{domxref("HTMLTableCellElement.cellIndex")}} {{ReadOnlyInline}}
- : A long integer representing the cell's position in the {{domxref("HTMLTableRowElement.cells", "cells")}} collection of the {{HTMLElement("tr")}} the cell is contained within. If the cell doesn't belong to a `<tr>`, it returns `-1`.
- : A number representing the cell's position in the {{domxref("HTMLTableRowElement.cells", "cells")}} collection of the {{HTMLElement("tr")}} the cell is contained within. If the cell doesn't belong to a `<tr>`, it returns `-1`.
- {{domxref("HTMLTableCellElement.colSpan")}}
- : A positive number indicating the number of columns this cell must span; this lets the cell occupy space across multiple columns of the table. It reflects the [`colspan`](/en-US/docs/Web/HTML/Element/td#colspan) attribute.
- {{domxref("HTMLTableCellElement.headers")}} {{ReadOnlyInline}}
Expand Down
113 changes: 113 additions & 0 deletions files/en-us/web/api/htmltablerowelement/cells/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
---
title: "HTMLTableRowElement: cells property"
short-title: cells
slug: Web/API/HTMLTableRowElement/cells
page-type: web-api-instance-property
browser-compat: api.HTMLTableRowElement.cells
---

{{ APIRef("HTML DOM") }}

The **`cells`** read-only property of the {{domxref("HTMLTableRowElement")}} interface
returns a live {{domxref("HTMLCollection")}} containing the cells in the row. The `HTMLCollection` is live and is automatically updated when cells are added or removed.

## Value

A live {{domxref("HTMLCollection")}} of {{domxref("HTMLTableCellElement")}} objects.

## Examples

This example uses `HTMLTableRowElement.cells` to display the number of cell in a row.

### HTML

```html
<table>
<thead>
<tr>
<th>C1</th>
<th>C2</th>
<th>C3</th>
<th>C4</th>
<th>C5</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
</tr>
</tbody>
</table>

<button id="add">Add a cell</button>
<button id="remove">Remove last cell</button>
<div>This first row has <output>2</output> cell(s).</div>
```

```css hidden
table {
border-collapse: collapse;
}

th,
td,
table {
border: 1px solid black;
}

button {
margin: 1em 1em 1em 0;
}
```

### JavaScript

```js
// Obtain relevant interface elements
const bodySection = document.querySelectorAll("tbody")[0];
const row = bodySection.rows[0]; // Select the first row of the body section
const cells = row.cells; // The collection is live, therefore always up-to-date
const cellNumberDisplay = document.querySelectorAll("output")[0];

const addButton = document.getElementById("add");
const removeButton = document.getElementById("remove");

function updateCellNumber() {
cellNumberDisplay.textContent = cells.length;
}

addButton.addEventListener("click", () => {
// Add a new cell at the end of the first row
const newCell = row.insertCell();
newCell.textContent = `Cell ${cells.length}`;

// Update the row counter
updateCellNumber();
});

removeButton.addEventListener("click", () => {
// Delete the row from the body
row.deleteCell(-1);

// Update the row counter
updateCellNumber();
});
```

### Result

{{EmbedLiveSample("Examples", "100%", 175)}}

## Specifications

{{Specifications}}

## Browser compatibility

{{Compat}}

## See also

- {{domxref("HTMLTableRowElement.insertCell()")}}
- {{domxref("HTMLTableRowElement.deleteCell()")}}
130 changes: 130 additions & 0 deletions files/en-us/web/api/htmltablerowelement/deletecell/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
---
title: "HTMLTableRowElement: deleteCell() method"
short-title: deleteCell()
slug: Web/API/HTMLTableRowElement/deleteCell
page-type: web-api-instance-method
browser-compat: api.HTMLTableRowElement.deleteCell
---

{{APIRef("HTML DOM")}}

The **`deleteCell()`** method of the {{domxref("HTMLTableRowElement")}} interface removes a
specific row cell from a given {{htmlelement("tr")}}.

## Syntax

```js-nolint
deleteCell(index)
```

### Parameters

- `index` {{optional_inline}}
- : The cell index of the cell to remove. If `index` is `-1` or equal to the number of cells, the last cell of the row is removed.

### Return value

None ({{jsxref("undefined")}}).

### Exceptions

- `IndexSizeError` {{domxref("DOMException")}}
- : Thrown if `index` is greater than the number of cells or if it is smaller than `-1`.

## Examples

This example uses {{domxref("HTMLTableRowElement.insertCell()")}} to append a new cell to a
row.

### HTML

```html
<table>
<thead>
<tr>
<th>C1</th>
<th>C2</th>
<th>C3</th>
<th>C4</th>
<th>C5</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
</tr>
</tbody>
</table>

<button id="add">Add a cell</button>
<button id="remove">Remove last cell</button>
<div>This first row has <output>2</output> cell(s).</div>
```

```css hidden
table {
border-collapse: collapse;
}

th,
td,
table {
border: 1px solid black;
}

button {
margin: 1em 1em 1em 0;
}
```

### JavaScript

```js
// Obtain relevant interface elements
const bodySection = document.querySelectorAll("tbody")[0];
const row = bodySection.rows[0]; // Select the first row of the body section
const cells = row.cells; // The collection is live, therefore always up-to-date
const cellNumberDisplay = document.querySelectorAll("output")[0];

const addButton = document.getElementById("add");
const removeButton = document.getElementById("remove");

function updateCellNumber() {
cellNumberDisplay.textContent = cells.length;
}

addButton.addEventListener("click", () => {
// Add a new cell at the end of the first row
const newCell = row.insertCell();
newCell.textContent = `Cell ${cells.length}`;

// Update the row counter
updateCellNumber();
});

removeButton.addEventListener("click", () => {
// Delete the row from the body
row.deleteCell(-1);

// Update the row counter
updateCellNumber();
});
```

### Result

{{EmbedLiveSample("Examples", "100%", 175)}}

## Specifications

{{Specifications}}

## Browser compatibility

{{Compat}}

## See also

- {{domxref("HTMLTableElement.insertRow()")}}
- The HTML element representing cells: {{domxref("HTMLTableCellElement")}}
14 changes: 7 additions & 7 deletions files/en-us/web/api/htmltablerowelement/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,29 @@ _Inherits properties from its parent, {{domxref("HTMLElement")}}._
- {{domxref("HTMLTableRowElement.cells")}} {{ReadOnlyInline}}
- : Returns a live {{domxref("HTMLCollection")}} containing the cells in the row. The `HTMLCollection` is live and is automatically updated when cells are added or removed.
- {{domxref("HTMLTableRowElement.rowIndex")}} {{ReadOnlyInline}}
- : Returns a `long` value which gives the logical position of the row within the entire table. If the row is not part of a table, returns `-1`.
- : Returns a number that gives the logical position of the row within the entire table. If the row is not part of a table, returns `-1`.
- {{domxref("HTMLTableRowElement.sectionRowIndex")}} {{ReadOnlyInline}}
- : Returns a `long` value which gives the logical position of the row within the table section it belongs to. If the row is not part of a section, returns `-1`.
- : Returns a number that gives the logical position of the row within the table section it belongs to. If the row is not part of a section, returns `-1`.

## Instance methods

_Inherits methods from its parent, {{domxref("HTMLElement")}}_.

- {{domxref("HTMLTableRowElement.deleteCell()", "deleteCell(index)")}}
- {{domxref("HTMLTableRowElement.deleteCell()")}}
- : Removes the cell corresponding to `index`. If `index` is `-1`, the last cell of the row is removed. If `index` is less than `-1` or greater than the amount of cells in the collection, a {{DOMxRef("DOMException")}} with the value `IndexSizeError` is raised.
- {{domxref("HTMLTableRowElement.insertCell()", "insertCell(index)")}}
- : Returns an {{DOMxRef("HTMLTableCellElement")}} representing a new cell of the row. The cell is inserted in the collection of cells immediately before the given `index` position in the row. If `index` is `-1`, the new cell is appended to the collection. If `index` is less than `-1` or greater than the number of cells in the collection, a {{DOMxRef("DOMException")}} with the value `IndexSizeError` is raised.
- {{domxref("HTMLTableRowElement.insertCell()")}}
- : Returns an {{domxref("HTMLTableCellElement")}} representing a new cell of the row. The cell is inserted in the collection of cells immediately before the given `index` position in the row. If `index` is `-1`, the new cell is appended to the collection. If `index` is less than `-1` or greater than the number of cells in the collection, a {{DOMxRef("DOMException")}} with the value `IndexSizeError` is raised.

## Deprecated properties

> **Warning:** These properties have been deprecated and should no longer be used. They are documented primarily to help understand older code bases.
- {{domxref("HTMLTableRowElement.align")}} {{deprecated_inline}}
- : A string containing an enumerated value reflecting the [`align`](/en-US/docs/Web/HTML/Element/tr#align) attribute. It indicates the alignment of the element's contents with respect to the surrounding context. The possible values are `"left"`, `"right"`, and `"center"`.
- : A string containing an enumerated value reflecting the [`align`](/en-US/docs/Web/HTML/Element/tr#align) attribute. It indicates the alignment of the element's contents to the surrounding context. The possible values are `"left"`, `"right"`, and `"center"`.
- {{domxref("HTMLTableRowElement.bgColor")}} {{deprecated_inline}}
- : A string containing the background color of the cells. It reflects the obsolete [`bgColor`](/en-US/docs/Web/HTML/Element/tr#bgcolor) attribute.
- {{domxref("HTMLTableRowElement.ch")}} {{deprecated_inline}}
- : A string containing one single character. This character is the one to align all the cell of a column on. It reflects the [`char`](/en-US/docs/Web/HTML/Element/tr#char) and default to the decimal points associated with the language, e.g. `'.'` for English, or `','` for French. This property was optional and was not very well supported.
- : A string containing one single character. This character is the one to align all the cell of a column on. It reflects the [`char`](/en-US/docs/Web/HTML/Element/tr#char) and defaults to the decimal points associated with the language, e.g. `'.'` for English, or `','` for French. This property was optional and was not very well supported.
- {{domxref("HTMLTableRowElement.chOff")}} {{deprecated_inline}}
- : A string containing an integer indicating how many characters must be left at the right (for left-to-right scripts; or at the left for right-to-left scripts) of the character defined by `HTMLTableRowElement.ch`. This property was optional and was not very well supported.
- {{domxref("HTMLTableRowElement.vAlign")}} {{deprecated_inline}}
Expand Down

0 comments on commit e5cb967

Please sign in to comment.