Back to SweetTable Documentation

SweetTable Custom Structure Demo

Demonstrating SweetTable with non-table elements (div, ul, ol)

Div-Based Table

A table-like structure built entirely with div elements.

Product
Category
Price
Stock
Laptop
Electronics
$999.99
15
Desk Chair
Furniture
$149.99
8
Monitor
Electronics
$249.99
12
// Div-based table initialization
let divSweetTable;

function initDivTable() {
    const divTable = document.getElementById('div-table');

    divSweetTable = new SweetTable(divTable);

    divSweetTable.setCustomGetHeadersFunction((table) => {
        return table.querySelectorAll('.div-th');
    });

    divSweetTable.setCustomGetRowsFunction((table) => {
       return table.querySelectorAll('.div-tr');
    });

    divSweetTable.setCustomGetTbodyFunction((table) => {
        return table.querySelector('.div-body');
    });

    divSweetTable.setCustomGetCellFromRowFunction((row) => {
        return row.querySelectorAll('.div-td');
    });

    // Custom parsing for price column (index 2)
    divSweetTable.setCustomParseFunction(2, (text) => {
        return parseFloat(text.replace(/[$,]/g, ''));
    });

    divSweetTable.initiate();
    document.getElementById('initDivTable').disabled = true;
    document.getElementById('disengageDivTable').disabled = false;
}

function disengageDivTable() {
    if (divSweetTable && divSweetTable.isEngaged()) {
        divSweetTable.disengage();
        divSweetTable = null;
        document.getElementById('initDivTable').disabled = false;
        document.getElementById('disengageDivTable').disabled = true;
    }
}

UL-Based Table

A table-like structure built with unordered list (ul) elements.

// UL-based table initialization
let ulSweetTable;

function initUlTable() {
    const ulTable = document.getElementById('ul-table');
    ulSweetTable = new SweetTable(ulTable);

    ulSweetTable.setCustomGetHeadersFunction((table) => {
        return table.querySelectorAll('.ul-th');
    });

    ulSweetTable.setCustomGetRowsFunction((table) => {
        return table.querySelectorAll('.ul-tr');
    });

    ulSweetTable.setCustomGetTbodyFunction((table) => {
        return table.querySelector('.ul-body');
    });

    ulSweetTable.setCustomGetCellFromRowFunction((row) => {
    return row.querySelectorAll('.ul-td');
    });

    // Custom parsing for salary column (index 2)
    ulSweetTable.setCustomParseFunction(2, (text) => {
        return parseFloat(text.replace(/[$,]/g, ''));
    });

    // Custom parsing for date column (index 3)
    ulSweetTable.setCustomParseFunction(3, (text) => {
        const parts = text.trim().split('/');
        return new Date(Number(parts[2]), Number(parts[0]) - 1, Number(parts[1])).getTime();
    });

    ulSweetTable.initiate();
    document.getElementById('initUlTable').disabled = true;
    document.getElementById('disengageUlTable').disabled = false;
}

function disengageUlTable() {
    if (ulSweetTable && ulSweetTable.isEngaged()) {
        ulSweetTable.disengage();
        ulSweetTable = null;
        document.getElementById('initUlTable').disabled = false;
        document.getElementById('disengageUlTable').disabled = true;
    }
}

OL-Based Table

A table-like structure built with ordered list (ol) elements.

  1. Game
  2. Platform
  3. Release Year
  4. Metacritic Score
  1. The Legend of Zelda: Breath of the Wild Nintendo Switch 2017 97
  2. Red Dead Redemption 2 PlayStation 4 2018 97
  3. Super Mario Odyssey Nintendo Switch 2017 97
// OL-based table initialization
let olSweetTable;

function initOlTable() {
    const olTable = document.getElementById('ol-table');
    olSweetTable = new SweetTable(olTable);

    olSweetTable.setCustomGetHeadersFunction((table) => {
        return table.querySelectorAll('.ol-th');
    });

    olSweetTable.setCustomGetRowsFunction((table) => {
        return table.querySelectorAll('.ol-tr');
    });

    olSweetTable.setCustomGetTbodyFunction((table) => {
        return table.querySelector('.ol-body');
    });

    olSweetTable.setCustomGetCellFromRowFunction((row) => {
        return row.querySelectorAll('.ol-td');
    });

    olSweetTable.initiate();
    document.getElementById('initOlTable').disabled = true;
    document.getElementById('disengageOlTable').disabled = false;
}

function disengageOlTable() {
    if (olSweetTable && olSweetTable.isEngaged()) {
        olSweetTable.disengage();
        olSweetTable = null;
        document.getElementById('initOlTable').disabled = false;
        document.getElementById('disengageOlTable').disabled = true;
    }
}