Day 60: Table Elements
Tags: webdev, javascript, 100daysofcode, html
Published: 2023-10-03 15:00:00


Tables are a fundamental part of web development, used to display data in a structured and organized manner. They consist of various elements, including `<thead>`, `<tbody>`, `<td>`, `<tr>`, `<tfoot>`, and `<th>`. 

## Table Elements Overview 📜

### 1. `<thead>` - Table Header

The `<thead>` element is used to group and define the header content in a table. It typically contains one or more `<tr>` elements that, in turn, contain `<th>` elements, defining the column headers.

Example:
```html
<table>
  <thead>
    <tr>
      <th>Header 1</th>
      <th>Header 2</th>
    </tr>
  </thead>
  <!-- tbody and data rows here -->
</table>
```

### 2. `<tbody>` - Table Body

The `<tbody>` element encapsulates the main content of the table, containing one or more `<tr>` elements, each representing a data row, and containing one or more `<td>` elements, which hold the actual data.

Example:
```html
<table>
  <thead>
    <tr>
      <th>Header 1</th>
      <th>Header 2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Data 1</td>
      <td>Data 2</td>
    </tr>
    <!-- More data rows here -->
  </tbody>
</table>
```

### 3. `<td>` - Table Data Cell

The `<td>` element represents a data cell within a table row (`<tr>`). It contains the actual content or data for a specific cell.

Example:
```html
<tr>
  <td>Data 1</td>
  <td>Data 2</td>
</tr>
```

### 4. `<tr>` - Table Row

The `<tr>` element defines a row in the table. It can contain one or more `<td>` elements representing individual cells or `<th>` elements if it's part of the table header.

Example:
```html
<tr>
  <td>Data 1</td>
  <td>Data 2</td>
</tr>
```

### 5. `<tfoot>` - Table Footer

The `<tfoot>` element is used to group and define the footer content in a table. Similar to `<thead>`, it typically contains one or more `<tr>` elements with `<th>` elements to define footer columns.

Example:
```html
<table>
  <thead>
    <tr>
      <th>Header 1</th>
      <th>Header 2</th>
    </tr>
  </thead>
  <tbody>
    <!-- Data rows here -->
  </tbody>
  <tfoot>
    <tr>
      <th>Footer 1</th>
      <th>Footer 2</th>
    </tr>
  </tfoot>
</table>
```

### 6. `<th>` - Table Header Cell

The `<th>` element defines a header cell within a table. It is typically used within `<thead>` or `<tfoot>` to provide header or footer content for columns.

Example:
```html
<tr>
  <th>Header 1</th>
  <th>Header 2</th>
</tr>
```

## Scaling Table 📈

Tables are great for displaying data, but they can become challenging to work with when they contain a large number of rows. Here are some strategies to scale a table effectively:

### 1. Pagination

Implement pagination to split the data into smaller chunks, displaying only a subset of rows at a time. Users can navigate through pages to access the desired data.

Example: 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/peszda5gz1x64tnahq7r.png)

### 2. Virtualization

Virtualization techniques like windowing or infinite scrolling can be used to load and render only the visible rows, reducing the initial rendering time and memory usage.

### 3. Server-Side Rendering

If the dataset is extremely large, consider fetching data from the server as the user scrolls or interacts with the table, loading only the data needed at that moment.


## Disadvantages of Using Tables 🚫

While tables are useful for displaying tabular data, they have some disadvantages:

1. **Limited Styling**: Tables can be challenging to style and make responsive, especially as they grow in complexity.

2. **Accessibility**: Ensuring tables are accessible to screen readers and other assistive technologies can be complex.

3. **Responsive Design**: Creating responsive tables that adapt well to various screen sizes can be a significant challenge.

4. **Complexity**: Tables can become complex to manage as the data or table structure grows.

## Grid Libraries 📊

To overcome the limitations of native HTML tables, many developers turn to grid libraries like ag-Grid. These libraries provide powerful features for displaying and managing tabular data, including:

- Advanced sorting and filtering.
- Built-in pagination and virtualization.
- Customizable column and row rendering.
- Accessibility features out of the box.

Here's an example of using ag-Grid:

```html
<div id="myGrid" style="height: 500px; width: 100%;" class="ag-theme-alpine"></div>

<script>
  var gridOptions = {
    columnDefs: [
      { headerName: "Header 1", field: "data1" },
      { headerName: "Header 2", field: "data2" },
    ],
    // ...other options
  };

  // specify the data
  var rowData = [
    { data1: "Data 1", data2: "Data 2" },
    // ...more data
  ];

  // lookup the container we want the Grid to use
  var eGridDiv = document.querySelector("#myGrid");

  // create the grid passing in the div to use together with the columns & data we want to use
  new agGrid.Grid(eGridDiv, gridOptions);

  // ...other grid configuration
</script>
```

Grid libraries like ag-Grid offer a comprehensive solution for managing complex data presentation needs efficiently.