Sibil & Inhinyeriyang Pampasabog
Paglikha ng isang Javascript Bookmark Master na may Lokal na Storage Lindence
Table of Contents
Pag - unawa sa mga Saligang Bagay
Ang pagtatayo ng isang bookmark manager na may JavaScript at ng Web Storage API ay isang napakahusay na proyekto para sa pagdadalubhasa sa mahahalagang konsepto sa front-end.[2] Sa pinaka - ubod nito, ang aplikasyon ay dapat humawak ng tatlong pangunahing operasyon: Ang paggawa ng, basap, atdete[FLT][T], [[T] klas] a classic CURUR, NT.[T-8] Ang mga adcapor ay na mga adclecleclecleclecleclecleclecation [[T] ay na nagreacepor[T] ay na na na na na na na ngayon:[[[T] ay na na na na na na na na na na na na na na na na na na na nagpapahintulot ng mga [[[[[[[[[[T] [[T] [[T] [[T] [[T]
Bago isulat ang isang kodigo, patibayin ang iyong pagkaunawa sa sumusunod na mga haligi:
- Ang DOM API: Ikaw ay magtatanong ng mga elemento, makikinig sa mga pangyayari, at magmamaneobra sa puno ng dokumento upang ipakita ang mga panandang aklat sa dinamikong paraan.
- [localStorage: Ang key-halagang tindahang ito ay nagpapanatili ng datos kahit na pagkatapos na sarado ang browser.Umusuporta lamang ito sa mga kuwerdas, kaya ang mga bagay ay dapat na i-serialized sa pamamagitan ng at i-serialized sa pamamagitan ng .
- ⁇ t-Worn programming: Ang Forms ay naglalabas ng na mga pangyayari; delete but its fire na mga pangyayari. Mastering Ang mga kaganapan ay hindi-negoriable.
- Mga paraan ng Array: , , at ] ay tutulong sa pag-aanunsyo at pagmamanipula ng mga tala ng aklat.
Pagtatayo ng Matataas na Manuno ng Kore Book
HTML Structure
Paandarin ang midya Sa pamamagitan ng isang minimum, semantikong kalansay ng HTML. Ang anyo ay nangongolekta ng pangalan ng bookmark ⁇ at URL; isang hindi naayos na talaan ang nagsasalin ng mga nakaimbak na mga pananda ng aklat.
<!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>
Pansinin ang na attribute sa script na tagichiit na tumitiyak sa DOM ay ganap na naka-pares bago ang pag-takbo ng script, inaalis ang pangangailangan ng isang na pambalot sa modernong setups.
Pag - asinta Para sa Kakayahan (Optional Ngunit Inirerekomenda)
Bagaman hindi ang CSS ang pokus, ang isang malinis na interface ay nagpapabuti sa karanasan ng gumagamit. Magdagdag ng simpleng istiloheet sa espasyo ng anyo, magbigay ng hindi nagbabagong hitsura sa mga butones, at estilo ng mga bagay na may mga speaker effects.Munting inline styling ay maaari ring iturok sa pamamagitan ng JavaScript, ngunit ang isang hiwalay ay mas pinipili para sa pagpapanatili.
<!-- inside <head> -->
<link rel="stylesheet" href="style.css" />
Sa , gumamit ng pahigang kahon para sa pormang pagkakaayos, isang sukdulang lapad para sa lalagyan, at iba't ibang impormasyon sa paningin para sa mga buton na delete upang maiwasan ang di - sinasadyang mga pindot.
JavaScript Logic – Ang Puso ng Pagkakapit
Ang lahat ng mga persistibo at interaktibo ay nakatira sa . Ang mga sumusunod na seksiyon ay sumisira sa bawat tungkulin.
Pagpapasimula ng Data
Kailangan natin ang isang sentral na variable na hawak ang kasalukuyang listahan ng mga pananda ng aklat. o kaya ay bumabalik sa isang walang laman na hanay.
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();
Ang tungkulin ay tinatawag sa tuwing nagbabago ang hanay – pagkatapos ng pagdaragdag, pagsasaayos, o pag-iintsa ng isang panandang pang-aklat.Titiyakin nito na ang imbakan ay palaging kasabay ng in-memory array.
Pagpapakita ng mga Marka sa Aklat
Ang pagbibigay ng talaan ng mga panandang pang-aklat ay nangangahulugang pag-iinteresyo sa hanay at paglikha ng mga bagay na pangtala na may tagong pang-klad at isang deleteng buton.
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);
});
}
Ang paggamit sa halip na indibidwalHML ay umiiwas sa mga volerabilidad ng XSS kapag ang mga pangalan ng panandang aklat ay naglalaman ng HTML. Ang delete button ay gumagamit ng isang delete upang maagaw ang indise ng bookmarkimen.
Pagdaragdag ng Isang Tanda
Pakinggan ang pangyayaring formifics , pigilan ang default page reload, lumikha ng isang bookmark object, itulak ito sa array, magpatuloy, at muling-provider.
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();
});
Para sa produksiyon, baka gusto mong patunayan ang URL format na ginagamit pa ang na constructor o regex.
Pag - aalis ng Isang Kuta sa Aklat
Inaalis ng deleksiyon ang bagay sa ibinigay na index at updates na imbakan at sa DOM.
function deleteBookmark(index) {
bookmarks.splice(index, 1);
saveBookmarks();
renderBookmarks();
}
Ginagamit ang ) ) sa pag-uuri ng array sa lugar. Kung mas gusto mo ang di-pagbabago, magagamit mo at muling mag-sign , ngunit para sa isang maliit na proyektong katulad nito, ay malinaw at isinasagawa.
Pag - aaral sa Aplikasyon
Minsang ang pangunahing mga gawa ng CRUD, isaalang - alang ang mga pagsulong na ito upang gawing matibay na kasangkapan ang isang modelo.
Pag - aayos ng mga Marka sa Aklat
Palitan ang static na pangalan/link ng isang inline edit mode. Kapag ang gumagamit ay nag-eeksperimento ng isang edit button, palitan ang anching tag ng input fields pre-fiunded na may kasalukuyang mga halaga. On weat, i-update ang array at magpatuloy.
Implementasyong pahiwatig: magdagdag ng isang tungkulin na lumilikha ng mga maisasaayos na input. Gamitin [ Sa talaan upang pangasiwaan ang mga natitipid nang hindi naglalagay ng maramihang tagapakinig.
Kategorisasyon kasama ng mga Tag
Magdagdag ng opsyonal property sa bawat bookmark object (e.g., ). Pagkatapos, palawigin ang UI ng isang filter input na nagtatago ng mga bagay na ang mga tags don ⁇ t match. Maaari kang mag-imbak ng mga tag bilang isang comma-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-ang" na stret na stret na stret na nasa sa loob sa loob sa loob sa loob sa anyo at hinati.
Pag - aangkat at Pag - uulat
Pahintulutan ang mga gumagamit nito na mag - backup o maglipat ng mga bookmark. Gamitin ang isang o isang file download. sa isang strand ng JON at mag - umpisa ng pag - download sa pamamagitan at .
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);
}
Paghahanap at Paglaon
Dagdagan ng input sa itaas ng bookmark list. Sa bawat pangyayari, salain ang array sa pangalan (o URL) at tumawag ng variety ng na nagtatanghal lamang ng mga posporo. Upang maiwasang mawala ang orihinal na talaan, mag-imbak ng isang nasalanang kopya o gumamit ng isang computed parame.
Pagsubok at Pagkabigo ng Browser
Ang lokal na Stoutrage ay sinusuportahan sa lahat ng mga modernong browser, ngunit ang mga lumang bersyon ng Internet Explorer (IE 8+) ay may ibang API. kung kailangan mong suportahan ang mga kapaligirang pamana, pagsubok na may mga polyfill o pagbagsak pabalik sa mga cookies. Todayiers Crome, Firefox, Safari, Edge (parehong Chromium at pamana) ang hawakan at[T4][T4].
Kapag sinusubok, tiyakin:
- Nakatatagal ang impormasyon sa pahina na nakagiginhawa at muling nagpapainit ng mga browser.
- Ang pagtanggal ng isangmarket ng libro ay nagreresulta sa parehong UI at imbakan.
- Ang mga espesyal na karakter sa mga tatak ng aklat (quotes, ampersands) ay isinalin nang tama.
- Ang mga URL na may ay normalisado.
Gamitin ang na mga kasangkapang pang-edukasyon Para sa awtomatikong pagsusuri, isaalang-alang ang paggamit ng Cypress
[[FLT]]] [FLT]] o kaya'y idagdag ang listahan ng mga impormasyon. — Indriftp.
Pagsasaayos
Ang proyektong ito ay nagpapakita kung paanong ang ilang dosenang linya ng vanilla JavaScript ay maaaring lumikha ng isang lubusang gumagana, patuloy na pagkakapit ng web.localSttorage API para sa data persisture, [[2][2] evitation para sa mahusay na UI updates, at CRU[T:2]]]] ⁇ 5] nang walang panimulang entments na regulat ang isang estado na ginagamit sa pamamagitan ng mga Philippines-compositions, na Philippines at pag-composition na ginagamit sa pamamagitan ng modernong enterage na tulad ng estado. — na nag-compositions.
Upang mapalalim ang iyong pagkaunawa, galugarin ang MDN document on localStorage at basahin ang tungkol sa [[2].[T:3] Para sa mas masulong na pamamahala ng estado, tingnan ang IndexedD&B[ para sa mas malaking datassets o[T:TL] [[L] [[T] [[FL] [[4] Ang iyong mga unang mga karanasan sa paggawa ay maaaring magkaroon ng isang buong-TC.[C.[[kailangan ng mga karanasan sa isang ent] [[7] [[8] [[T] [[8] [[8] [[8] [[C.