Aaj pehli baar JavaScript app banaoge — ek to-do list jisme kaam add, done aur delete ho. Page band karke dobara kholo, tasks wahi milenge, kyunki hum unhe localStorage me save karenge.
<form> + submit event — button click aur Enter dono se add{ text, done }render() pattern — array badlo, phir poori list dobara banaolocalStorage + JSON.stringify / JSON.parse — data browser me saveclassList, createElement, textContentHar step me "Editor me daalo" dabao — ya best: khud type karo, haath se likha code yaad rehta hai. ✍️
<form> me rakha — isse Enter dabane par bhi add hoga.<ul id="list"> khaali hai — tasks JavaScript se aayenge.autocomplete="off" — browser purane suggestions na dikhaye. <div class="app">
<h1>Aaj ke kaam ✅</h1>
<form id="form">
<input id="task" placeholder="Naya kaam likho..."
autocomplete="off">
<button>Add</button>
</form>
<ul id="list"></ul>
<p id="count"></p>
</div>
display: grid + place-items: center.width: 320px ka — phone par bhi fit.body {
margin: 0;
min-height: 100vh;
display: grid;
place-items: center;
background: #0f172a;
font-family: sans-serif;
}
.app {
width: 320px;
padding: 24px;
background: #fff;
border-radius: 20px;
}
h1 { margin: 0 0 16px; font-size: 24px; }
form { display: flex } — input aur button side by side.input { flex: 1 } — input bachi hui saari jagah le leta hai.form { display: flex; gap: 8px; }
input {
flex: 1;
padding: 10px 12px;
border: 2px solid #e2e8f0;
border-radius: 10px;
}
button {
padding: 10px 16px;
border: 0;
border-radius: 10px;
background: #6366f1;
color: #fff;
cursor: pointer;
}
li flex hai — text left, ✕ button right.li.done span — jab task par done class ho, text par line-through.ul { list-style: none; padding: 0; }
li {
display: flex;
justify-content: space-between;
padding: 10px 0;
border-bottom: 1px solid #e2e8f0;
cursor: pointer;
}
li.done span {
text-decoration: line-through;
color: #94a3b8;
}
li button { background: #ef4444; padding: 2px 8px; }
#count { color: #64748b; font-size: 14px; margin: 0; }
tasks ek array hai — har task ek object: { text: 'Gym', done: false }.JSON.stringify (array → text) aur JSON.parse (text → array).|| [] — pehli baar kuch saved nahi hota (null), to khaali array lo.try / catch — kuch browsers (private mode) me localStorage band hota hai, tab bhi app chalega.const form = document.querySelector('#form');
const input = document.querySelector('#task');
const list = document.querySelector('#list');
const count = document.querySelector('#count');
let tasks = [];
try {
tasks = JSON.parse(localStorage.getItem('tasks')) || [];
} catch (e) {}
function save() {
try {
localStorage.setItem('tasks', JSON.stringify(tasks));
} catch (e) {}
}
forEach se har task ka li banao.textContent se text daala — user ka likha text kabhi HTML ki tarah run nahi hoga (safe).done ulta. ✕ par click → splice se array se hatao.e.stopPropagation() — ✕ dabane par li ka click (done) na chale.update() = save + render. Rule: data badlo → update().function render() {
list.innerHTML = '';
tasks.forEach((t, i) => {
const li = document.createElement('li');
li.className = t.done ? 'done' : '';
li.innerHTML = '<span></span><button>✕</button>';
li.querySelector('span').textContent = t.text;
li.onclick = () => { t.done = !t.done; update(); };
li.querySelector('button').onclick = (e) => {
e.stopPropagation();
tasks.splice(i, 1);
update();
};
list.append(li);
});
const done = tasks.filter(t => t.done).length;
count.textContent = `${done} / ${tasks.length} done`;
}
function update() { save(); render(); }
e.preventDefault() — form submit par page reload nahi hoga.trim() se aage-peeche ke space hatao; khaali ho to kuch mat karo.render() — page khulte hi saved tasks dikhao.form.addEventListener('submit', (e) => {
e.preventDefault();
const text = input.value.trim();
if (!text) return;
tasks.push({ text, done: false });
input.value = '';
update();
});
render();
Naya day aate hi reel aayegi — @codeyantra follow karo 🔔