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 question:
<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 the task markup is duplicated in two places: the initially-rendered tasks and new tasks.
It is a chore to keep the markup consistent for both initial and new tasks. Using a <template> element makes it easy to render both the initial tasks and newly-added tasks.
This solution also contains some UX improvements:
<form> to capture submission of new tasks. This will handle both Enter key presses 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 them about the newly-added task. There is unlikely to be 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" /><meta name="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.