การ เข้าใจ พื้น ฐาน
การสร้างโปรแกรมจัดการที่คั่นหน้าด้วยจาวาสคริปต์และเว็บ page API เป็นโครงงานที่ดีสําหรับความเชี่ยวชาญของคอนเซ็ปต์ด้านหน้าหลัก โปรแกรมต้องดําเนินการ 3 แบบ: [FLT: 0] สร้าง [FLT: 1) สร้าง [FLT: 1], [FT:2] อ่าน [FTTT: 3] และ[FT: 4] DLT [FLT: 5] – รูปแบบคลาสสิก - การปรับปรุงชีวิตของเบราว์เซอร์ในปัจจุบัน [FLTT] [TLT] [TLLLT]] ] เครือข่ายแบบนอกระบบ: เครือข่ายของเบเกญร็ อนุญาตให้มีการย้ายผ่านเครือข่ายของบาร์บีเวอร์กี (FTLTIFTIFT:
ก่อน จะ เขียน รหัส บรรทัด เดียว ให้ ทํา ให้ ความ เข้าใจ ของ คุณ มั่นคง ใน เรื่อง เสา หลัก ต่อ ไป นี้:
- [FLT: 0] DOM API: คุณจะสอบถามองค์ประกอบ, ฟังเหตุการณ์ และจัดการต้นไม้เอกสารเพื่อแสดงที่คั่นหน้าแบบไม่เปลี่ยนแปลง
- [FLT: 0]. localStoprise: ] ร้านขายคีย์นี้ยังเป็นข้อมูลแม้จะปิดแล้วก็ตาม มันรองรับเฉพาะสตริงเท่านั้น วัตถุจะต้องถูกต่อเติมเข้ากับ [FLT: 0] และเสื่อมค่าด้วย [FTT: 1].
- [FLT: 0] โปรแกรมแบบ Hent-drider: Forms ปล่อย เหตุการณ์ที่; ลบปุ่มยิง [FT:3] เหตุการณ์ที่เกิดขึ้นใน ค.ศ.
- [FLT: 0]] วิธีอาเรย์: ] [[FLT: 6]] และ[FLT: 6] จะช่วยในการแสดงและจัดการรายการที่คั่นหน้าอย่างมีประสิทธิภาพ
การสร้างโปรแกรมจัดการที่คั่นหน้าหลัก
โครงสร้าง 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>
โปรดสังเกตว่า [FLT: 9] แอตทริบิวต์บนแท็กสคริปต์ -- มันเพื่อให้แน่ใจว่า DOM ถูกวิเคราะห์อย่างละเอียดก่อนสคริปต์ทํางาน โดยจะกําจัดความต้องการ [FLT: 10] ที่ถูกคอมไพล์ในรูปแบบสมัยใหม่
การ บรรเลง เพลง เพื่อ ความ สามารถ (เป็น ไป ได้ แต่ ได้ รับ การ แนะ นํา)
CSS ไม่ใช่โฟกัส ส่วนติดต่อแบบบริสุทธิ์นั้นสามารถปรับปรุงประสบการณ์ของผู้ใช้ได้ เพิ่มรูปแบบสไตล์ชีตแบบเรียบง่ายไปยังช่องว่างในแบบฟอร์ม ให้ดูสม่ําเสมอ และทํารูปแบบรายการที่คั่นหน้าด้วยลูกเล่นการลอยตัว โดยส่วนที่น้อยที่สุดคือ styling สามารถถูกฉีดโดยจาวาสคริปต์ได้เช่นกัน แต่แยก [FLT: 11] เหมาะกับการรักษาได้
<!-- inside <head> -->
<link rel="stylesheet" href="style.css" />
ใน [FLT: 13] ใช้ตัวย่อของรูปแบบผัง, ความกว้างสูงสุดของกล่อง และเสียงเตือนแบบเห็นได้ชัดเจนในการลบปุ่มเพื่อป้องกันการคลิกแบบไม่ได้ตั้งใจ
ตรรกะจาวาสคริปต์ – หัวใจของโปรแกรม
ความต่อเนื่องและปฏิกิริยาทั้งหมดอยู่ใน . ส่วนต่อไปนี้จะลดลงแต่ละฟังก์ชัน.
เริ่มการเริ่มข้อมูล
เราต้องการตัวแปรกลางที่ถือรายการของที่คั่นหน้าปัจจุบัน โดยมันควรจะถูกตั้งต้นจาก [FLT: 15] หรือถอยกลับไปอยู่ในอาร์เรย์ที่ว่างเปล่า
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();
[FLT: 17] ฟังก์ชันนี้เรียกว่า ทุกครั้งที่อาร์เรย์เปลี่ยนแปลง ทุกครั้งที่เพิ่ม, แก้ไขหรือลบคั่นหน้า
แสดงที่คั่นหน้า
การแสดงรายการที่คั่นหน้า หมายถึง การทําการสร้างรายการตาม [FLT: 18] อาร์เรย์ และสร้างรายการด้วยป้ายสมอและปุ่มลบ
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);
});
}
ใช้ [FLT: 20] แทนการใช้ข้อมูล HTML ภายใน หลีก เลี่ยงความไม่เสถียรของ XSSS เมื่อชื่อที่คั่นหน้ามี HTML อยู่ ปุ่ม ลบจะใช้การปิดเพื่อจับภาพดัชนีของที่คั่นหน้า
เพิ่มคั่นหน้า
ฟังเหตุการณ์ [FLT: 21] ของแบบฟอร์ม ป้องกันการโหลดหน้าปริยาย สร้างวัตถุที่คั่นหน้า ผลักดันมันไปยังอาร์เรย์ ต่อเนื่อง และรีเดอร์ (Re-render)
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 มากขึ้น โดยใช้ [FLT: 23] ตัวสร้างหรือ regax
ลบที่คั่นหน้า
การลบรายการที่มีผลลบ ที่คลังดัชนีและการปรับปรุงและ DOM
function deleteBookmark(index) {
bookmarks.splice(index, 1);
saveBookmarks();
renderBookmarks();
}
ใช้ [FLT: 25] เปลี่ยนแปลงลําดับลําดับตําแหน่ง ถ้าคุณต้องการใช้งานแบบไม่จํากัด คุณสามารถใช้ และ reasign [FT: 27] แต่สําหรับโครงการเล็กๆ แบบนี้ ชัดเจนและดําเนินการได้
การควบคุมโปรแกรม
เมื่อ CRUD พื้นฐานทํางาน พิจารณาการปรับปรุงเหล่านี้จะเปลี่ยนต้นแบบเป็นเครื่องมือที่แข็งแกร่ง
กําลังแก้ไขที่คั่นหน้า
แทนที่ชื่อตายตัว/ เชื่อมโยงด้วยโหมดแก้ไขแบบข้อความ ซึ่งเมื่อผู้ใช้คลิกที่ปุ่มแก้ไข ให้สลับรูปแบบ สมอด้วยช่องป้อนข้อมูล ก่อนด้วยค่าปัจจุบัน เมื่อบันทึก จะมีการปรับปรุงอาร์เรย์ และยังคงคงตําแหน่งไว้
คําใบ้การเติมข้อมูล: เพิ่มฟังก์ชัน [FLT: 29] ที่สร้างการใส่ข้อมูลแก้ไขได้ ใช้ [FLT: 0] ตัวแทน ในรายการเพื่อจัดการการแก้ไขโดยไม่ต้องแนบผู้ฟังหลายคน
การกําหนดค่าด้วยป้ายกํากับ
เพิ่มคุณสมบัติ [FLT: 30] สมบัติของแต่ละที่คั่นหน้า (เช่น [FLT: 31]] จากนั้นเพิ่มข้อมูล UI ด้วยตัวกรองที่ซ่อนรายการที่ป้ายกํากับไม่เข้าคู่กับรายการ คุณสามารถจัดเก็บป้ายกํากับเป็นเครื่องหมายจุลภาค- dictiond ภายในรูปแบบและแยกมันเข้ากับอาร์เรย์ได้
นําเข้าและส่งออก
อนุญาตให้ผู้ใช้ทําการสํารองข้อมูล หรือทําการโอนถ่ายที่คั่นหน้าได้ ใช้ หรือดาวน์โหลดแฟ้มได้ ส่งออกเป็นอนุกรม เป็นข้อความ JONson และเรียกดาวน์โหลดผ่านทาง [FLT: 34] และ[FLT: 35] นําเข้าข้อมูลและผนวกเข้ากับที่คั่นหน้าที่มีอยู่แล้ว
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);
}
ค้นหาและกรอง
เพิ่มรายการที่ป้อนมาเหนือที่คั่นหน้า ในแต่ละรายการ [FLT: 37] ตัวกรองรายการ ตัวกรองลําดับ และเรียกค่าต่าง ๆ ของรายการ [FT: 39] ที่แสดงเฉพาะรายการที่เข้าคู่กับรายการเท่านั้น เพื่อไม่ให้สูญเสียรายการเดิม ให้จัดเก็บรายการตัวกรองที่คัดลอกหรือใช้พารามิเตอร์คํานวณไว้
การเข้ากันได้กับเบราว์เซอร์
เว็บเบราว์เซอร์รุ่นใหม่ทั้งหมดสนับสนุนการท่องเว็บ แต่รุ่นที่เก่ากว่าของอินเทอร์เน็ตเอกซ์พลอเรอร์ (IT 8+) มีเอพีไอแบบอื่น หากคุณต้องสนับสนุนสภาพแวดล้อมมรดก ทดสอบด้วยโพลีพัล หรือถอยกลับไปหาคุกกี้ ปัจจุบัน [FLT: 0] chorome, Firefox, Safari, Edia, Ed (FLT: 1) (ทั้งโครเมียมและมรดก) จัดจัดการ [FLT: 40] และ [FLT] [LTL: BOL] โดยไม่มีปัญหา
เมื่อ ทดสอบ ให้ ตรวจ สอบ:
- ข้อมูลอยู่รอดจากหน้ารีเฟรช และเบราว์เซอร์ที่เริ่มใช้งานอีกครั้ง
- การลบที่คั่นหน้า การปรับปรุงทั้ง UI และจัดเก็บ
- อักขระพิเศษในชื่อที่คั่นหน้า (comes, amsports) ถูกแปลอย่างถูกต้องแล้ว
- ที่อยู่ URL ที่มีทั้งไม่มี ถูกปรับให้เป็นปกติ
ใช้ [FLT: 0] เครื่องมือขยายภาพ > โปรแกรม & gt; จัดเก็บข้อมูลท้องถิ่นเพื่อตรวจสอบข้อมูลด้วยตนเอง [FLT: 2) สําหรับการทดสอบอัตโนมัติ พิจารณาใช้ CEGE [FLT: 4] หรือ[FLT: 5] PlayT [FTH] play[FTHT] จําลองผู้ใช้งาน — แบบฟอร์ม, กรอกข้อมูล, ลบ, และยืนยันการถอดภาพ
รูปแบบการวน
โครงการนี้แสดงให้เห็นว่า จาวาสคริปต์ไม่กี่สิบเส้น สามารถสร้างโปรแกรมเว็บที่ใช้งานได้อย่างเต็มที่ได้โดยสมบูรณ์ คุณเรียนรู้ที่จะควบคุม [FLT: 0] ท้องถิ่น API เพื่อใช้ข้อมูล [FLT: 1) เพื่อความต่อเนื่อง . สืบค้น [FTT: 3] สําหรับ ULT: FIT และ [FLT] CTUV[FLTLLT] โดยไม่ต้องใช้รูปแบบการนําไปใช้ในระบบย่อย (FTIFLT) — ตั้งต้นการจัดเก็บข้อมูล, การจัดเก็บข้อมูล, การย้ายสถานะ, และ resentering ormormalformormalformormalformormorm (in). resenterformates).
เพื่อเพิ่มความเข้าใจของคุณ ให้สํารวจ [FLT: 0] เอกสารของ MDN บนท้องที่ [FLT: 1) และอ่านเกี่ยวกับ event language in DOLT[FTT:3]. สําหรับการจัดการระบบเพิ่มเติม ดูเพิ่มที่ [FLTT: 4] infededDB [FLT: 5] สําหรับข้อมูลขนาดใหญ่ [FT] หรือ [FT] FT [FT] [FT] เวิร์ค เวิร์คเวอร์ชัน [FTIFF(FFLLL] ]. – บล็อกเหล่านี้ โดยมีพื้นฐานการก่อสร้างใหม่ คุณสามารถขยายความรู้ส่วนตัวของคุณได้.