[JavaScript_JQuery] 2021.01.26. DAY_64 태그에 자식태그를 추가, 수정, 삭제하기 (ul, li / table tr, td)

2021. 1. 26. 14:06Web_Front-end/JavaScript

 

※ ul태그에 li태그 추가, 수정, 삭제하기

  • 등록, 수정, 삭제 버튼이 있다

  • 등록버튼을 누르면 : input text창에 작성한 입력값이 li태그를 생성해서 ul태그에 추가한다
  • 수정버튼을 누르면 : input text창에 작성하여 등록된 li의 값이 수정된다
    • 단, 수정 버튼을 누르려면 등록을 1개이상하고, 수정할 li목록을 선택해야한다
    • 선택한 li를 나타내기 위해 css스타일을 설정하고 class를 추가하여 변경한다
  • 삭제버튼을 누르면 : 등록되어 목록에 표시된 li값을 선택하고, 삭제 버튼을 누르면 목록에서 삭제된다
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
<style type="text/css">
	.active{
		background-color: pink;
	}
</style>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function(){
	
	let sel_li;
	
	$("#btnAdd").click(function(){
		let food = $("#input").val();
		let li = $("<li></li>").text(food);
		$("#food_list").append(li);
		
		$(li).click(function(){
			sel_li = this;
			$("li").removeClass("active");
			$(this).addClass("active");
			$("#input").val(  $(this).text() );
		});
	});
	
	
	$("#btnUpdate").click(function(){
		$(sel_li).text( $("#input").val()   );
	});
	
	$("#btnDelete").click(function(){
		$(sel_li).remove();
	});
})
</script>
</head>
<body>
	<h2>좋아하는 음식을 추가하세요</h2>
	<input id="input" type="text">
	<input id="btnAdd" type="button" value="등록">
	<input id="btnUpdate" type="button" value="수정">
	<input id="btnDelete" type="button" value="삭제">
	<hr>
	<ul id="food_list"></ul>
</body>
</html>

 


※ 위와 같은 방법으로, table에 추가, 삭제, 수정하는 연습

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	.active{
		background-color: pink;
	}
</style>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
	$(function() {
		let input_arr;	//입력한 양식 중에 text속성의 내용이 담긴 배열
		let td_list;	//눌려진 tr의 td들이 담긴 배열
		let sel_tr; 	//눌려진 tr을 바라볼 변수
		
		//input 태그의 button에 따로 id를 지정하지 않고, 선택하여 작업하는 방법
		let btn_list = $("input[type=button]");
		
		//삭제하는 함수
		//empty()	: 자식 노드를 삭제
		//remove()	: 자기 자신을 삭제
		$(btn_list[2]).click(function(){//삭제 버튼을 눌렀을 때
			$(sel_tr).remove(); //눌려진 tr을 삭제한다 (행)
		})
		
		$(btn_list[1]).click(function(){//수정 버튼을 눌렀을 때
			let total = Number( $(input_arr[1]).val() ) + Number( $(input_arr[2]).val() ) + Number( $(input_arr[3]).val() );
			let avg = total/3;
			for(i=0; i<input_arr.length; i++){
				//input : val() //td,tr : text()
				$(td_list[i]).text($(input_arr[i]).val());
			}
			$(td_list[4]).text(total);
			$(td_list[5]).text(avg);
			$("input[type=text]").val(""); 
		})
		
		//$("input") : input태그를 모두 찾는다 따라서 속성에 대한 조건으로 filter를 한다
		$(btn_list[0]).click(function() {//등록 버튼을 눌렀을 때
			input_arr = $("input[type=text]");
			let tr = $("<tr></tr>"); //document.createElement 와 같은작업

		
			//tr태그를 눌렀을 때, 이벤트 : 테이블의 행을 누를때
			//마우스로 클릭한 tr의 td들을 찾아서, 작업
			$(tr).click(function() {
				
				sel_tr = $(this);
				//css처리
				$("tr").removeClass("active"); //모든 tr의 class를 삭제해준다
				$(this).addClass("active"); //클릭한 tr에 class를 추가해준다
				
				
				//$(tr).find("td");
				//this : 현재 눌러진 tr //$("id,class등의 선택자").find("") 이렇게 사용가능하다
				td_list = $(this).find("td");
				
				//클릭한 tr의 td내용을 input=text창에 다시 입력하는 일
				for(i=0; i<input_arr.length; i++){
					$(input_arr[i]).val( $(td_list[i]).text() );
				}
			})
			
			let total = 0; //총점
			for(i=0; i<input_arr.length; i++){
				let td = $("<td></td>").text( $(input_arr[i]).val() );
				if(i != 0){//이름(index:0)을 제외한 나머지 입력양식(점수)를 누적해서 더한다
					total += Number($(input_arr[i]).val());
				}
				$(tr).append(td);
			}
			let avg = total/(input_arr.length-1);
			$(tr).append( $("<td></td>").text(total) ); //td태그를 생성, total을 넣고 바로 tr에 추가
			$(tr).append( $("<td></td>").text(avg) ); //td태그를 생성, avg을 넣고 바로 tr에 추가
			$("tbody").append(tr); //tbody를 선택하고, tr을 추가
			
			//다음 입력할 데이터를 위해 text창에 적힌 문자들을 "" empty로 비운다
			//val() : 값을 가져온다 (==getter)
			//val("매개변수") : 값을 입력한다 (==setter)
			$("input[type=text]").val(""); 
		})
	})
</script>
</head>
<body>
	이름 : <input type="text"><br>
	국어 : <input type="text"><br>
	영어 : <input type="text"><br>
	수학 : <input type="text"><br>
	<input type="button" value="등록">
	<input type="button" value="수정">
	<input type="button" value="삭제">
	<hr>
	<table border="1">
		<thead>
		<tr>
			<th>이름</th>
			<th>국어</th>
			<th>영어</th>
			<th>수학</th>
			<th>총점</th>
			<th>평균</th>
		</tr>
		</thead>
		<tbody></tbody>
	</table>
</body>
</html>

값을 입력하여 테이블에 추가하고, 수정할 tr을 선택한다
선택된 tr이 수정되었다
선택한 tr이 삭제되었다