You're given some existing HTML for a Todo List app. Add the following functionality to the app:
<input> field should be cleared upon successful addition.ids, data attributes, replacing some tags, etc), but the result should remain the same visually.There are a few ways to approach this questions:
<template>s and client-side render both initial and new tasks. See solution.In this approach, <template>s are used for rendering both initial and new tasks. You might have realized that you have the task markup duplicated in two places: the initially-rendered tasks and new tasks.
It is a chore to make the markup consistent for both initial and new tasks. Using a <template> element will make it easy to render both the initial task and newly-added tasks.
This solution also contains some UX improvements:
<form> to capture submission of new tasks. This will handle both Enter keys and "Submit" button clicks.When rendering user input, there's a risk of inserting potentially malicious content resulting in Cross Site Scripting (XSS). To prevent XSS:
Element.innerHTML, set Node.textContent instead which inserts strings as raw text rather than parsing it as HTML.<input>s should be labelled either via <label>s or aria-label attributes. Since the original markup doesn't contain a <label>, we can add aria-label to the <input>.aria-live region can be added to inform about the newly-added task. There is unlikely enough time to do this during an interview but you will get bonus points for mentioning it. Read more about ARIA live regions on MDN.<script>, <style> or <link>) and ensure there's no XSS.<input> is cleared after a task is added.<!doctype html><html><head><meta charset="UTF-8" /><metaname="viewport"content="width=device-width, initial-scale=1.0" /></head><body><div><h1>Todo List</h1><form><inputaria-label="Add new task"type="text"placeholder="Add your task" /><div><button id="submit">Submit</button></div></form><ul></ul></div><template id="task-template"><li><span></span><button>Delete</button></li></template><script src="src/index.js"></script></body></html>
console.log() statements will appear here.