start . me .
Directory path . web .

HTML Document File : list-app_00.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>list app</title>
</head>
<body>
<script>

function list_item_html(item){
	var done = item[1]=="done"?'checked':''
	var checkbox = `<input ${done} type="checkbox" oninput="list_checkbox_input(this)">`
	var edit = `<input type="text" value="${item[0]}" oninput="list_text_input(this)">`
	var remove = `<button onclick="list_item_remove(this)">remove</button>`
	var index = `<button onclick="alert(child_index(this.parentNode))">index</button>`
	return "<div class='list_item_class'>" + checkbox + edit + remove + index + "</div>"
}

function list_item_add(button) {
	var item = [prompt('task'),'todo']
	var main_node = button.parentNode
	main_node.data_content.push(item)
	main_node.innerHTML += list_item_html(item)
}

function list_setup(list_content, main_node){
	main_node.data_content = list_content
	main_node.innerHTML = `<button onclick="list_item_add(this)">add</button>`
	main_node.innerHTML += `<button onclick="list_visually_filter('all',this)">all</button>`
	main_node.innerHTML += `<button onclick="list_visually_filter('todo',this)">todo</button>`
	main_node.innerHTML += `<button onclick="list_visually_filter('done',this)">done</button>`
	for(var item of list_content){
		main_node.innerHTML += list_item_html(item)
	}
}

function list_visually_filter(criterion, button){
	var main_node = button.parentNode
	var item_index = 0
	for(var item of main_node.querySelectorAll(".list_item_class")){
		var showed = true
		if(criterion=='todo' || criterion=='done'){
			showed = main_node.data_content[item_index][1]==criterion
		}
		item.style.display = showed?"":"none"
		item_index += 1
	}
}

function list_content_item_access(input_node){
	var list_item_node = input_node.parentNode
	var list_content_index = child_index(list_item_node)
	var list_node = list_item_node.parentNode
	var list_content = list_node.data_content
	return [ list_content, list_content_index ]
}

function list_checkbox_input(checkbox){
	var [ list_content, list_content_index ] = list_content_item_access(checkbox)
	list_content[list_content_index][1] = list_content[list_content_index][1]=="todo"?"done":"todo"
}

function list_text_input(text){
	var [ list_content, list_content_index ] = list_content_item_access(text)
	list_content[list_content_index][0] = text.value
}

function list_item_remove(button){
	var [ list_content, list_content_index ] = list_content_item_access(button)
	list_content.splice(list_content_index,1)
	button.parentNode.remove()
}

function child_index(element){
	return Array.from(element.parentNode.children).indexOf(element)
}
</script>

<div id="list1_div"></div>
<script>
var list1_content = [
	["task 1","done"],
	["task 2","todo"],
	["task 3","done"],
]
list_setup(list1_content, list1_div)
</script>

<hr>

<div id="list2_div"></div>
<script>
var list2_content = [
	["task 1","done"],
	["task 2","done"],
	["task 3","done"],
]
list_setup(list2_content, list2_div)
</script>

<script src="/web/show-source.js"></script>

</body>
</html>