Slik bruker du en bestemt klasse i JavaScript for å telle tabellceller

Slik bruker du en bestemt klasse i JavaScript for å telle tabellceller
Slik bruker du en bestemt klasse i JavaScript for å telle tabellceller

Utløser en modal med aktiv klassetelling i en tabell

Det kan være lurt å bruke tilpasset oppførsel basert på innholdet i hver celle når du arbeider med HTML-tabeller. Du kan for eksempel bruke spesifikke mønstre eller kriterier for å dynamisk tilordne klasser til tabellceller. Bordet ditt kan bli mer nyttig og engasjerende som et resultat.

I dette eksemplet vil tabellceller som tilfredsstiller visse krav ha en klasse navngitt aktiv lagt til dem. EN JavaScript funksjon som undersøker hver celle, verifiserer innholdet, og deretter bruker klassen riktig brukes til å gjøre dette. Det er en produktiv metode for å organisere bestemte celler i henhold til deres data.

Etter å ha brukt aktiv klasse til et undersett av celler, kan telle antall celler som har denne klassen være et hyppig neste trinn. Hvis du ønsker å starte en hendelse eller handling, slik åpning av en modal som viser antallet, kan telle disse cellene være ganske nyttig.

Denne opplæringen vil lære deg hvordan du bruker JavaScript til å telle antall celler som har aktiv klasse og for å automatisk starte en modal som viser tellingen. Bruker jQuery, er løsningen grei, effektiv og enkel å implementere.

Kommando Eksempel på bruk
.each() Hvert element i et sett med matchede elementer itereres over av denne jQuery-funksjonen. Den bruker betinget logikk eller klasser ved å iterere over hver tabellcelle () in our example.
addClass() The selected items receive one or more class names added to them by this jQuery method. The script applies the aktiv eller ingen klasse til celler i henhold til innholdet deres.
.dialog() Used with jQuery UI to generate a modal dialog. When the script triggers the modal, the autoOpen: true option makes sure it opens automatically and shows the number of active items.
.tekst() The text content of the chosen components is retrieved or set using this technique. In this instance, it checks to see if the contents of every celle samsvarer med et bestemt mønster.
RegExp() Vanlige uttrykk lages med denne JavaScript-konstruktøren. Skriptet kan tildele klasser basert på innhold ved å identifisere mønstre som f.eks tall etterfulgt av store bokstaver eller c etterfulgt av sifre.
classList.add() Denne grunnleggende JavaScript-teknikken gir et element en bestemt klasse. Den fungerer på samme måte som jQuerys addClass() i vanilla JavaScript-løsningen, og legger til aktiv eller ingen klasse avhengig av forhold.
DOMContentLoaded Når HTML-dokumentet er ferdig lastet og analysert, utløses DOMContentLoaded-hendelsen. I vanilla JavaScript-eksemplet sørger det for at skriptet kjøres etter at DOM er ferdig lastet.
querySelectorAll() Hvert element i dokumentet som samsvarer med den gitte CSS-velgeren, returneres av denne JavaScript-funksjonen. I det grunnleggende JavaScript-eksemplet brukes det til å velge hver element in the table for further processing.
forEach() An array method in JavaScript that lets you iterate over elements. Here, it's utilized to iterate over every table cell that querySelectorAll() returned and apply the required logic to each one.

Forstå skriptet: Telle celler og utløse en modal

I det første skripteksemplet blir hver tabellcelle iterert over, innholdet blir evaluert og en klasse tilordnet avhengig av evalueringen ved hjelp av jQuery. Denne funksjonen er gjort mulig ved å iterere gjennom hver av de elementer i tabellen ved hjelp av .hver() metode. Regulære uttrykk brukes til å bruke to betingede kontroller inne i denne løkken. Disse mønstrene fastslår om hver celles innhold holder seg til et bestemt format. Cellen får aktiv klasse hvis innholdet følger et mønster, for eksempel et tall og en stor bokstav. For at cellene skal kategoriseres dynamisk, er dette avgjørende.

Med RegExp() konstruktør, konstrueres et regulært uttrykk for samsvarende tall etterfulgt av bokstaver. Denne teknikken sørger for at celler med data, for eksempel "1A" eller "3C," gjenkjennes og merkes med gjeldende klasse. Cellen mottar en egen klasse kalt ingen hvis innholdet samsvarer med et annet mønster, slik "c" etterfulgt av et tall. Dette gjør det mulig å klassifisere dataene i tabellen mer presist. Videre har addClass() metoden garanterer at celler kan legge til disse klassene uten å slette noen klasser de allerede har.

Det neste trinnet er å telle de riktige cellene og starte en modal etter at de alle har blitt merket med den aktive klassen. Hver gang en celle får den aktive klassen, økes antallet og lagres i en variabel med navn activeCount. Antallet kvalifiserende celler i tabellen må fastslås ved hjelp av denne tellingen. Ved å bruke .dialog() funksjon fra jQuery UI, en modal genereres når tellingen er ferdig. De autoOpen: sant attributt lar modalen åpnes automatisk. Antallet aktive celler vises inne i modalen.

I det andre tilfellet brukes vanilla JavaScript for å duplisere den samme prosedyren. querySelectorAll() brukes i stedet for jQuery i denne tilnærmingen for å velge alle tabellceller, og en enkel forEach() loop itererer gjennom hver celle. Regulære uttrykk brukes for å matche celleinnholdet, akkurat som i jQuery-løsningen. Hvis et samsvar blir oppdaget, oppdateres activeCount og den aktive klassen legges til ved hjelp av classList.add() metode. Til syvende og sist, endring av den interne HTML-en til et forhåndsdefinert modalt element i DOM-en aktiverer modalen. Det samme resultatet som jQuery-eksemplet oppnås ved å bruke denne løsningen, som ikke er avhengig av eksterne biblioteker.

Å telle celler med en spesifikk klasse og utløse en modal

Denne metoden teller elementer som har en gitt klasse og tildeler dynamisk klasser til dem ved hjelp av jQuery. Det åpner deretter et modalt vindu.

$(document).ready(function() {
  var activeCount = 0;
  $('td').each(function() {
    var $this = $(this);
    if ($this.text().match(new RegExp(/[0-9][A-Z]/)) !== null) {
      $this.addClass('active');
      activeCount++;
    }
    if ($this.text().match(new RegExp(/c[0-9]/)) !== null) {
      $this.addClass('none');
    }
  });
  // Trigger the modal with the count of 'active' items
  $('#myModal').dialog({ autoOpen: true, modal: true, title: 'Active Count',
      open: function() { $(this).html('Number of active items: ' + activeCount); } });
});

Alternativ: Bruke Vanilla JavaScript for å telle aktive celler

I stedet for å stole på tredjepartsbiblioteker som jQuery, legger denne løsningen til en klasse og teller cellene ved hjelp av ren JavaScript.

document.addEventListener('DOMContentLoaded', function() {
  var cells = document.querySelectorAll('td');
  var activeCount = 0;
  cells.forEach(function(cell) {
    if (/[0-9][A-Z]/.test(cell.textContent)) {
      cell.classList.add('active');
      activeCount++;
    } else if (/c[0-9]/.test(cell.textContent)) {
      cell.classList.add('none');
    }
  });
  // Open the modal to display the count
  var modal = document.getElementById('myModal');
  modal.style.display = 'block';
  modal.innerHTML = 'Number of active items: ' + activeCount;
});

Backend-tilnærming: Bruke Node.js og Express med EJS-mal

Dette Node.js eksempel bruk EJS-mal for å gjengi celleantallet i et modalt vindu mens man teller celler på serversiden.

const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
  const tableData = [['1A', '2B', '3C'], ['c1', '4D', '5E']];
  let activeCount = 0;
  tableData.forEach(row => {
    row.forEach(cell => {
      if (/[0-9][A-Z]/.test(cell)) {
        activeCount++;
      }
    });
  });
  res.render('index', { activeCount });
});
app.listen(3000, () => console.log('Server running on port 3000'));

Enhetstesting med Jest for Backend Solution

Her utvikler vi enhetstester for Node.js-løsningen vha Spøk for å få den aktive tellelogikken til å fungere etter hensikten.

const { countActiveCells } = require('./countActive');
test('counts active cells correctly', () => {
  const tableData = [['1A', '2B', '3C'], ['c1', '4D', '5E']];
  expect(countActiveCells(tableData)).toBe(4);
});
test('returns zero if no active cells', () => {
  const tableData = [['c1', 'c2', 'c3'], ['c4', 'c5', 'c6']];
  expect(countActiveCells(tableData)).toBe(0);
});

Utvider cellevalg og klassehåndtering i JavaScript

Arbeider med JavaScript og HTML-tabeller involverer også muligheten til å dynamisk modifisere klasser som svar på brukerinnspill eller innhold. Du kan gjøre mer enn bare å telle cellene; du kan også håndtere brukerinndata og umiddelbart endre innholdet i tabellen. For eksempel ved å bruke metoder som removeClass() i jQuery eller classList.remove() i vanilla JavaScript kan du dynamisk endre klassen, markere eller til og med fjerne klassen når en bruker klikker på en tabellcelle. Tabeller blir betydelig mer interaktive som et resultat, og ytterligere tilpasning basert på oppdateringer av innhold i sanntid er mulig.

En tabell som viser sanntidsdata der spesifikke celler må separeres visuelt avhengig av en klasseendring, vil være et nyttig bruksområde for dette. Det er enkelt å binde funksjoner som forårsaker disse modifikasjonene ved å bruke hendelseslyttere. I JavaScript kan du for eksempel bruke addEventListener() for å lytte etter hendelser på bestemte celler, for eksempel klikk eller tastetrykk. Ytterligere klasseendringer eller til og med oppdateringer til en teller som gjenspeiler antallet aktiv cellene i tabellen kan være resultatet av denne interaksjonen.

Du kan også tenke på situasjoner der celler skal oppdateres automatisk uten innspill fra brukeren. Tabellinnhold kan oppdateres og overvåkes kontinuerlig via et intervall eller AJAX-anrop. Regelmessige uttrykk og metoder som f.eks setInterval() la tabellen automatisk endre klassene og starte en modal når en terskel er nådd. Tabeller kan nå brukes i mer dynamiske applikasjoner, som dashbord og datadrevne innstillinger.

Ofte stilte spørsmål angående JavaScript-klassehåndtering og celleteller

  1. Hvordan kan jeg telle komponenter som tilhører en bestemt klasse i vanilla JavaScript?
  2. For å velge hvert element med den klassen, bruk document.querySelectorAll('.className'); å telle dem, bruk length.
  3. Basert på innholdet i tabellcellen, hvordan kan jeg legge til en klasse i den?
  4. Du kan bruke en klasse ved å bruke classList.add() og inspiser innholdet i en celle ved hjelp av textContent eller innerText eiendommer.
  5. Hva skiller text() i vanilje JavaScript fra textContent i jQuery?
  6. textContent er en innebygd JavaScript-egenskap, og text() er en jQuery-metode som henter eller modifiserer innholdet i utvalgte elementer.
  7. Når jeg teller celler som tilhører en bestemt klasse, hvordan kan jeg starte en modal?
  8. For å konstruere en modal i jQuery og få den til å utløses avhengig av antall elementer med en bestemt klasse, bruk .dialog().
  9. Hvordan kan jeg ta en klasse ut av et element i JavaScript?
  10. I vanilje JavaScript kan du bruke classList.remove('className') for å fjerne en klasse fra et element.

Siste tanker om celletelling og modaler

JavaScript eller jQuery kan brukes til å administrere telleceller med en spesifisert klasse, for eksempel aktiv, på en effektiv måte. Regulære uttrykk er et nyttig verktøy for å identifisere mønstre i tabellinnhold, noe som letter dynamiske klasseoppgaver og andre interaksjoner.

Videre er en nyttig metode for å informere brukere om en tabells status å starte en modal basert på antallet av disse aktive cellene. De .dialog() funksjon i jQuery eller en tilpasset modal er to metoder som gir stor allsidighet når det gjelder håndtering av tabellinnhold.

Kilder og referanser
  1. Informasjon om dynamisk tillegging av klasser og håndtering av innhold ved hjelp av JavaScript og jQuery ble hentet fra en detaljert veiledning tilgjengelig på jQuery API-dokumentasjon .
  2. Innsikt i bruk av regulære uttrykk i JavaScript for å manipulere innhold ble referert fra dokumentasjonen som finnes på MDN Web Docs .
  3. Modal opprettelse ved hjelp av jQuery UI Dialog-metoden og dens detaljerte bruk kan utforskes på jQuery UI-dialogdokumentasjon .
  4. Viktigheten av å telle elementer med spesifikke klasser i JavaScript og praktiske eksempler kan gjennomgås i artikler som FreeCodeCamp JavaScript-veiledning .