Table of Contents
درک پایه ها
ساخت یک مدیر نشانه با جاوا اسکریپت و API Web Storage یک پروژه عالی برای تسلط بر مفاهیم پایه جلو است، در هسته آن، برنامه باید سه عملیات اولیه را انجام دهد: نشانه گذاری ، بدون استفاده از داده های سرور [FLT3]، و حذف [F5: [F5] - یک الگوی کلاسیک برای به روز رسانی های سرور در سراسر اطلاعات مرورگر [F]
قبل از نوشتن یک خط کد، درک خود را از ستون های زیر تقویت کنید:
- API DOM: شما عناصر جستجو، گوش دادن به رویدادها، و دستکاری درخت سند برای نشان دادن نشانه های پویا.
- محلی ذخیره سازی: این فروشگاه ارزش کلیدی، داده ها را حتی پس از بسته شدن مرورگر حفظ می کند، پس اشیاء باید با و بدون بهره برداری با ، زنجیره ای شوند.
- برنامه ریزی مبتنی بر [FLT1] [FLT1] [FLT 2:2] [در مورد حوادث] [مشرکان] غیر قابل مذاکره است.
- [[۱] [۱۰] روش های آرپی: [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱۰] [۱۰] [۱۰] [۳] [۳] [۳] [۳] [۱] [۱۰] [۶] [۶] [۶] [۵] [۶] [۸] [۸] [۸] [۸] [۸] [۵] [به صورت] [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى] [براى] [براى [براى] [براى] [براى] [براى [براى [براى [براى] [براى] [براى] [براى [براى] [براى [براى
ساخت Core Bookmark Manager
ساختار HTML
با یک اسکلت HTML حداقل و معنایی شروع کنید.شکل نام و URL نشانه را جمع آوری می کند؛ یک لیست بدون سفارش نشانه های ذخیره شده را ارائه می دهد.
<!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>
به [[رده:]] توجه کنید و در این زمینه به عنوان [[رده:رده:]] و [[رده:رده:]] و [[رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده:رده ها و یا در این کار بر روی لینک های نرم افزار و یا به صورت حساب های بزرگ تر از دست به کار می آیند.
⁇ - حق امتیاز برای ما (اختیاری اما توصیه شده)
در حالی که CSS تمرکز نیست، یک رابط تمیز تجربه کاربر را بهبود می بخشد. اضافه کردن یک سبک ساده به فضا کردن فرم، دکمه ها را یک نگاه ثابت، و سبک لیست نشانه ها با اثرات هوانگ، حداقل در خط نیز می تواند از طریق جاوا اسکریپت تزریق شود، اما یک جداگانه (FLT 11 ترجیح می دهد برای حفظ قابلیت.
<!-- inside <head> -->
<link rel="stylesheet" href="style.css" />
در [FLT13]، از flexbox برای طرح فرم، حداکثر عرض برای container، و بازخورد بصری متمایز برای دکمه های حذف شده برای جلوگیری از کلیک های تصادفی استفاده کنید.
منطق جاوا اسکریپت - قلب درخواست
همه ی تلاش ها و تعاملات در [FLT 14] زندگی می کنند.بخش های زیر هر تابع را از بین می برند.
داده های اولیه
ما نیاز به یک متغیر مرکزی داریم که لیست فعلی نشانه ها را در خود جای داده باشد و یا از آن به یک آرایه خالی برگردیم.
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();
تابع هر بار که تغییرات آرایه نامیده می شود - پس از اضافه کردن، ویرایش یا حذف یک نشانه، این تضمین می کند که ذخیره سازی همیشه با آرایه درون حافظه هماهنگ شده است.
نمایش Bookmarks
ارائه لیست نشانه به معنای آن است که بر روی آرایه و ایجاد آیتم های لیست با یک برچسب لنگر و یک دکمه حذف شده است.
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);
});
}
استفاده از به جای HTML داخلی از آسیب پذیری های XSS اجتناب می کند، زمانی که نام های نشانه حاوی HTML هستند، دکمه حذف از بسته شدن برای ثبت فهرست نشانه ها استفاده می کند.
اضافه کردن یک علامت
به دنبال رویداد فرم (FLT:21) گوش دهید، از بارگذاری صفحه پیش فرض جلوگیری کنید، یک شی نشانه ایجاد کنید، آن را به آرایه، ادامه دهید و دوباره وارد شوید.
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();
});
این رویکرد ساده است.برای تولید، شما ممکن است بخواهید فرمت URL را بیشتر با استفاده از [FLT23] سازنده یا regex تأیید کنید.
دانلود کتابچه راهنمایان
Deletion آیتم را در فهرست بندی و به روز رسانی ذخیره سازی و DOM حذف می کند.
function deleteBookmark(index) {
bookmarks.splice(index, 1);
saveBookmarks();
renderBookmarks();
}
اگر از آن استفاده کنید، می توانید از آن استفاده کنید و آن را به صورت جداگانه و با استفاده از آن، به صورت مستقیم و با استفاده از آن، به کار ببرید.
افزایش درخواست
هنگامی که CRUD پایه کار می کند، این پیشرفت ها را در نظر بگیرید تا نمونه اولیه را به یک ابزار قوی تبدیل کنید.
دانلود کتاب های ادیت
جایگزین نام استاتیک / لینک با یک حالت ویرایش خط.هنگامی که کاربر کلیک یک دکمه ویرایش، مبادله برچسب لنگر با زمینه های ورودی قبل از پر با ارزش های فعلی. OnSave، به روز رسانی آرایه و ادامه.
در این میان، یک تابع (FLT 29) را اضافه کنید که ورودی های قابل ویرایشی ایجاد می کند.(FLT:0) حتی در لیست قرار دهید تا بدون اینکه شنونده های متعدد را به کار گیرند، ویرایش شود.
کاتینگ با تگ ها
سپس یک ویژگی اختیاری (FLT:30) را به هر شی نشانه اضافه کنید (به عنوان مثال، [FLT 31] سپس UI را با یک ورودی فیلتر گسترش دهید که آیتم های لیستی را که برچسب ها مطابقت ندارند را پنهان می کند.شما می توانید برچسب ها را به عنوان یک رشته پیچیده در داخل فرم ذخیره کنید و آنها را به یک آرایه تقسیم کنید.
واردات و صادرات
اجازه دهید کاربران برای پشتیبان گیری یا انتقال نشانه ها استفاده از یک یا یک دانلود فایل. Export Serializes را به یک رشته JSON و ایجاد یک دانلود از طریق و واردات JSON را بخوانید و با نشانه های موجود ادغام می شود.
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);
}
جستجو و فیلتر
در هر صفحه ای از این فهرست به نام اضافه کنید و از آن ها استفاده کنید و به آن ها بگویید که این کار تنها در صورت عدم استفاده از لیست اصلی، یک کپی فیلتر شده یا از یک پارامتر محاسبه شده است.
تست و سازگاری مرورگر
LocalStorage در تمام مرورگرهای مدرن پشتیبانی می شود، اما نسخه های قدیمی تر Internet Explorer (IE 8+) دارای یک API متفاوت است، اگر شما باید از محیط های میراث پشتیبانی کنید، با پلی پرکارها تست کنید یا به کوکی ها برگردید.امروز (FLT:0Chrome، فایرفاکس، Safari، Edge [F:1] (هر دو Chromium و میراث) و (F:41) بدون مسائل.
هنگام تست، بررسی کنید:
- داده ها زنده می مانند تازه سازی صفحه و مرورگر دوباره شروع می شود.
- حذف یک به روز رسانی نشانه هر دو UI و ذخیره سازی.
- شخصیت های ویژه در نام های نشانه ( ⁇ ، ampersands) به درستی ارائه می شوند.
- و بدون آن که از آن استفاده شود، به صورت عادی و عادی می باشد.
استفاده از ابزار توسعه دهنده (FLT 1) و [FLT:]؛ کاربرد و ذخیره سازی و ذخیره سازی؛ ذخیره سازی محلی برای بازرسی داده های ذخیره شده به صورت دستی.[۱۰] برای تست خودکار، در نظر گرفتن استفاده از Cypress [FLT: ۴ یا لینک صحیح [F6]
نتیجه گیری
این پروژه نشان می دهد که چگونه چند خط از ویلی جاوا اسکریپت می تواند یک برنامه وب کاملا کاربردی و مداوم ایجاد کند (شما آموخته اید که از API محلی ذخیره سازی ( برای پایداری داده ها استفاده کنید، event] برای به روز رسانی های کارآمد UI و CR عملیات [UD] [FLT] از طریق یک الگوی ذخیره سازی اولیه استفاده می شود.
برای عمیق تر کردن درک خود، بررسی مستندات در LocalStorage و خواندن در مورد در DOM برای مدیریت پیشرفته تر دولت، نگاهی به درdexedDB برای داده های بزرگتر یا کارکنان [F6] در حال حاضر می توانید به این تجربه های شخصی سازی کنید.