Civiele & structurele engineering
Een Javascript-bladwijzerbeheer aanmaken met lokale opslagbestendigheid
Table of Contents
De basisbeginselen begrijpen
Het bouwen van een bladwijzer manager met JavaScript en de Web Storage API is een uitstekend project voor het beheersen van fundamentele front-end concepten. In de kern, de toepassing moet omgaan met drie primaire operaties: create, read, en delete] ..een klassieke CRUD patroon, minus updates voor nu. De gegevens leven in de browser ]lokale opslag[[[FLT:]], waardoor bladwijzers blijven bestaan over sessies zonder server.
Voordat u een enkele regel code schrijft, versterk u uw begrip van de volgende pijlers:
- De DOM API: U zult elementen opvragen, luisteren naar gebeurtenissen en de documentboom manipuleren om bladwijzers dynamisch weer te geven.
- localOpslag: Deze sleutelwaardeopslag bewaart gegevens zelfs nadat de browser gesloten is. Het ondersteunt alleen strings, dus objecten moeten geserialiseerd worden met en gedeserialiseerd worden met .
- Event-driven programmering: Formulieren zenden gebeurtenissen uit; verwijderen knoppen vuur gebeurtenissen. Meesteren is niet onderhandelbaar.
- Stuurmethoden: , en zullen helpen de lijst van bladwijzers efficiënt te renderen en te manipuleren.
De hoofdbladwijzerbeheer opbouwen
HTML-structuur
Begin met een minimaal semantisch HTML-skelet. Het formulier verzamelt de naam van de bladwijzer en de URL; een niet-geordende lijst geeft de opgeslagen bladwijzers weer.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bookmark Manager</title>
</head>
<body>
<h1>My Bookmarks</h1>
<form id="bookmarkForm">
<label for="name">Name</label>
<input type="text" id="name" required />
<label for="url">URL</label>
<input type="url" id="url" required />
<button type="submit">Add Bookmark</button>
</form>
<ul id="bookmarkList"></ul>
<script src="app.js" defer></script>
</body>
</html>
Let op het attribuut op het script tag ..het zorgt ervoor dat de DOM volledig wordt ontleed voordat het script draait, waardoor de behoefte aan een wikkel in moderne opstellingen wordt geëlimineerd.
Stijl voor gebruiksvriendelijkheid (facultatief maar aanbevolen)
Hoewel CSS niet de focus is, verbetert een schone interface de gebruikerservaring. Voeg een eenvoudige stylesheet toe om het formulier te spatief te maken, geef knoppen een consistente look en stijl van de bladwijzerlijst items met zweefeffecten. Minimale inline styling kan ook worden geïnjecteerd via JavaScript, maar een aparte heeft de voorkeur voor onderhoud.
<!-- inside <head> -->
<link rel="stylesheet" href="style.css" />
Gebruik in flexbox voor de vormindeling, een maximale breedte voor de container en aparte visuele feedback voor het verwijderen van knoppen om toevallige klikken te voorkomen.
JavaScript Logic
Alle persistentie en interactiviteit leven in . De volgende secties splitsen elke functie.
Gegevensinitialisatie
We hebben een centrale variabele nodig die de huidige lijst van bladwijzers vasthoudt. Het moet worden geïnitialiseerd van of terugvallen naar een lege array.
let bookmarks = [];
function loadBookmarks() {
const stored = localStorage.getItem('bookmarks');
if (stored) {
bookmarks = JSON.parse(stored);
} else {
bookmarks = [];
}
}
function saveBookmarks() {
localStorage.setItem('bookmarks', JSON.stringify(bookmarks));
}
loadBookmarks();
De functie wordt elke keer als de array verandert ..genoemd na het toevoegen, bewerken of verwijderen van een bladwijzer. Dit zorgt ervoor dat de opslag altijd wordt gesynchroniseerd met de in-geheugen array.
Bladwijzers tonen
Het renderen van de bladwijzerlijst betekent itereren over de array en het maken van lijstitems met een ankertag en een delete knop.
function renderBookmarks() {
const list = document.getElementById('bookmarkList');
list.innerHTML = ''; // clear existing entries
bookmarks.forEach(function(bookmark, index) {
const li = document.createElement('li');
li.dataset.index = index;
const link = document.createElement('a');
link.href = bookmark.url;
link.textContent = bookmark.name;
link.target = '_blank';
link.rel = 'noopener noreferrer';
const deleteBtn = document.createElement('button');
deleteBtn.textContent = 'Delete';
deleteBtn.addEventListener('click', function() {
deleteBookmark(index);
});
li.appendChild(link);
li.appendChild(deleteBtn);
list.appendChild(li);
});
}
Gebruik in plaats van innerHTML vermijdt XSS kwetsbaarheden wanneer bladwijzernamen HTML bevatten. De knop verwijderen gebruikt een sluiting om de bladwijzer te vastleggen.
Bladwijzer toevoegen
Luister naar de vorm . gebeurtenis, voorkomen dat de standaard pagina herladen, maak een bladwijzer object, duw het naar de array, volharden, en opnieuw renderen.
document.getElementById('bookmarkForm').addEventListener('submit', function(e) {
e.preventDefault();
const nameInput = document.getElementById('name');
const urlInput = document.getElementById('url');
const newBookmark = {
name: nameInput.value.trim(),
url: urlInput.value.trim()
};
// Basic validation: ensure URL starts with http/https
if (!newBookmark.url.startsWith('http://') && !newBookmark.url.startsWith('https://')) {
newBookmark.url = 'https://' + newBookmark.url;
}
bookmarks.push(newBookmark);
saveBookmarks();
renderBookmarks();
// Reset form
nameInput.value = '';
urlInput.value = '';
nameInput.focus();
});
Deze aanpak is eenvoudig. Voor productie zou je het URL-formaat verder willen valideren met behulp van constructor of een regex.
Een bladwijzer verwijderen
Verwijdering verwijdert het item op de opgegeven index en updates opslag en de DOM.
function deleteBookmark(index) {
bookmarks.splice(index, 1);
saveBookmarks();
renderBookmarks();
}
Met muteert de array op zijn plaats. Als u liever onveranderlijkheid, kunt u [ gebruiken en herinschrijven , maar voor een klein project als dit, is duidelijk en performant.
Verbetering van de toepassing
Zodra de basis CRUD werkt, overwegen deze verbeteringen om een prototype te veranderen in een robuust hulpmiddel.
Bladwijzers bewerken
Vervang de statische naam/link door een inline-bewerkingsmodus. Wanneer de gebruiker op een bewerkingsknop klikt, wisselt u de ankertag met invoervelden die voorgevuld zijn met de huidige waarden. Bij opslaan, bijwerken en aanhouden.
Implementatie hint: voeg een functie toe die bewerkbare ingangen aanmaakt. Gebruik event delegatie op de lijst om te bewerken slaat op zonder meerdere luisteraars aan te sluiten.
Categoriering met tags
Voeg een optionele eigenschap toe aan elk bladwijzerobject (bijv. ). Verleng vervolgens de UI met een filterinvoer die items verbergt waarvan de tags niet overeenkomen. U kunt tags opslaan als een door komma's gescheiden tekenreeks binnen het formulier en ze splitsen in een array.
Import en export
Laat gebruikers toe om een reservekopie te maken of bladwijzers over te dragen. Gebruik een of een bestandsdownload. Exporteert serializes in een JSON-tekenreeks en activeert een download via en . Importeren leest de JSON en mergt met bestaande bladwijzers.
function exportBookmarks() {
const data = JSON.stringify(bookmarks, null, 2);
const blob = new Blob([data], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'bookmarks.json';
a.click();
URL.revokeObjectURL(url);
}
Zoeken en filteren
Voeg een invoer toe boven de bladwijzerlijst. Op elke gebeurtenis filtert u de array op naam (of URL) en roept u een variant op van ] die alleen de overeenkomsten weergeeft. Om te voorkomen dat u de oorspronkelijke lijst verliest, slaat u een gefilterde kopie op of gebruikt u een berekende parameter.
Testen en Browser compatibiliteit
localStorage wordt ondersteund in alle moderne browsers, maar oudere versies van Internet Explorer (IE 8+) hadden een andere API. Als je moet ondersteunen legacy omgevingen, testen met polyfills of terugvallen op cookies. Vandaag de dag . Chrome, Firefox, Safari, Edge (zowel Chroom als legacy) handvat en zonder problemen.
Controleer bij het testen:
- Data overleeft pagina verfrist en browser herstart.
- Een bladwijzer verwijderen updates van zowel de UI als opslag.
- Speciale tekens in bladwijzernamen (quotes, ampersands) worden correct weergegeven.
- URL's met en zonder worden genormaliseerd.
Gebruik ontwikkelaarsgereedschappen > Toepassing > Opslag > Lokale opslag om opgeslagen gegevens handmatig te inspecteren.
Voor geautomatiseerd testen, overwegen Cypress of Playwright om de gebruikerswerkstromen te simuleren Vul formulier, voeg toe, verwijder, herlaad .. en stel dat de lijst blijft bestaan.
Conclusie
Dit project toont aan hoe een paar dozijn lijnen van vanille JavaScript een volledig functionele, persistente webapplicatie kan creëren. Je hebt geleerd om de localStorage API te benutten voor het vasthouden van gegevens, event delegatie[ voor efficiënte UI updates, en CRUD operaties[ zonder backend. Het patroon dat je initialiserende staat vanaf opslag, muteren toestand door functies, en opnieuw renderen van de DOM . is de basis van vele moderne front-end kaders zoals React of Vue.
Om je begrip te verdiepen, verken je de MDN documentatie over localStorage en lees je over ]event handling in de DOM. Voor meer geavanceerd staatsmanagement, kijk je naar IndexedDB voor grotere datasets of servicemedewerkers[ voor offline-eerste ervaringen. Met deze bouwstenen kun je nu je bladwijzermanager uitbreiden naar een volwaardige persoonlijke kennisbasis.