프로그래밍/jQuery 제이쿼리

제이쿼리 - each 반복문

Heidong 2021. 10. 29. 00:37
반응형

each로 반복문을 수행 할 수 있지만 break나 continue 같은 개념이 없다.

return false로 중간에 빠져 나와야 한다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<style type="text/css">
*{
	padding: 0; margin: 0;
}

body {
    font-size:14px;
	font-family:"맑은 고딕", 나눔고딕, 돋움, sans-serif;
}

a {
	color: #000;
	text-decoration: none;
}
a:hover, a:active {
	color: tomato;
	text-decoration: underline;
}

h3 {
	margin: 10px;
}

.box{
	width: 700px;
	margin: 30px auto;
}
.box table {
	width: 100%;
	border-collapse: collapse;
	border-spacing: 0;
}

.box table tr:first-child{
	border-top: 3px solid #777;
	background: #ccc;
}
.box table tr{
	height: 30px;
	border-bottom: 1px solid #777;
	text-align: center;
}

.box table span{
	cursor: pointer;
}
</style>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function(){
	$("table.cls td").each(function(index){
		if(index != 0 && index % 6 == 0) {
			$(this).css("color", "tomato");
		}
	});
});

/*
-- 반복
  .each() : 선택한 요소들을 각 요소마다 전달받은 콜백 함수를 반복 실행한다.
*/
</script>

</head>
<body>

<h3>each</h3>

<div class="box">
<table class="cls">
	<tr>
		<th width="80">학번</th>
		<th width="100">이름</th>
		<th width="80">국어</th>
		<th width="80">영어</th>
		<th width="80">수학</th>
		<th width="80">총점</th>
		<th width="80">평균</th>
		<th>변경</th>
	</tr>
	<tr>
		<td>1001</td>
		<td>너자바</td>
		<td>80</td>
		<td>70</td>
		<td>90</td>
		<td>240</td>
		<td>80</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1002</td>
		<td>서블릿</td>
		<td>75</td>
		<td>80</td>
		<td>60</td>
		<td>225</td>
		<td>75</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1003</td>
		<td>스프링</td>
		<td>80</td>
		<td>100</td>
		<td>90</td>
		<td>270</td>
		<td>90</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1004</td>
		<td>오라클</td>
		<td>85</td>
		<td>85</td>
		<td>85</td>
		<td>255</td>
		<td>85</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1005</td>
		<td>리액트</td>
		<td>80</td>
		<td>70</td>
		<td>60</td>
		<td>210</td>
		<td>70</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1006</td>
		<td>홍자바</td>
		<td>85</td>
		<td>85</td>
		<td>85</td>
		<td>255</td>
		<td>85</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1007</td>
		<td>이순신</td>
		<td>70</td>
		<td>70</td>
		<td>70</td>
		<td>210</td>
		<td>70</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1008</td>
		<td>이자바</td>
		<td>100</td>
		<td>100</td>
		<td>100</td>
		<td>300</td>
		<td>100</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1009</td>
		<td>가나다</td>
		<td>95</td>
		<td>100</td>
		<td>90</td>
		<td>285</td>
		<td>95</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1010</td>
		<td>하하하</td>
		<td>90</td>
		<td>90</td>
		<td>90</td>
		<td>270</td>
		<td>90</td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
	<tr>
		<td>1011</td>
		<td>후후후</td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td><span>수정</span> | <span>삭제</span></td>
	</tr>
</table>
</div>

</body>
</html>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function(){
	$(".btn1").click(function(){
		var arr = [1,3,5,7,9];
		var s = 0;
		$.each(arr, function(index, value){
			s += value;
		});
		alert("홀수합 : " + s);
	});
	
	// 다른 방법
	$(".btn2").click(function(){
		var arr = [2,4,6,8,10];
		var s = 0;
		$(arr).each(function(index, value){
			s += value;
		});
		alert("짝수합 : " + s);
	});
	
});

</script>

</head>
<body>

<h3>each - array</h3>

<div style="margin: 20px;">
	<button type="button" class="btn btn1"> 배열-1 </button>
	<button type="button" class="btn btn2"> 배열-2 </button>
</div>

</body>
</html>

이렇게 each로도 배열 반복문을 돌릴 수 있다.

index는 arr의 인덱스고, value는 그 인덱스에 따른 값이다.

그러니까 0번 인덱스부터 끝까지 돌면서 s에 합들을 넣는 것

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<style type="text/css">
*{
	padding: 0; margin: 0;
}

body {
    font-size:14px;
	font-family:"맑은 고딕", 나눔고딕, 돋움, sans-serif;
}

a {
	color: #000;
	text-decoration: none;
}
a:hover, a:active {
	color: tomato;
	text-decoration: underline;
}

.btn {
    color:#333;
    font-weight:500;
    border:1px solid #cccc;
    background-color:#fff;
    text-align:center;
    cursor:pointer;
    padding:3px 10px 5px;
    border-radius:4px;
}
.btn:active, .btn:focus, .btn:hover {
	 background-color:#e6e6e6;
	 border-color: #adadad;
	 color: #333;
}
.boxTF {
    border:1px solid #999;
    padding:4px 5px 5px;
    border-radius:4px;
    background-color:#fff;
}
.boxTA {
    border:1px solid #999;
    height:150px;
    padding:3px 5px;
    border-radius:4px;
    background-color:#fff;
    resize: none;
}

textarea:focus, input:focus {
	outline: none;
}

h3 {
	margin: 10px;
}

.box{
	width: 650px;
	margin: 30px auto;
}

.box table {
	width: 100%;
	border-collapse: collapse;
	border-spacing: 0;
}

.board-title {
	width:100%;
	height:50px;
	line-height:50px;
	text-align:left;
	font-weight: bold;
	font-size:15px;
}

.board-body tr:first-child{
	border-top: 3px solid #777;
}
.board-body tr {
	height: 40px;
	border-bottom: 1px solid #777;
}
.board-body td:first-child{
	text-align: center;
	width: 100px;
	background: #eee;
}

</style>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
function sendOk() {
	var f = document.boardForm;
	
	var returnNow = false;
	var s;
	$("form input, form textarea").each(function(){ // each는 브레이크 컨티뉴가 없음
		if(! $(this).val().trim()) {
			s = $(this).closest("tr").find("td:first-child").text();
			
			s = s.replace(/\s/g,'');
			alert(s + "을(를) 입력하세요.")
			
			$(this).focus();
			returnNow = true;
			return false; // 이렇게 해야 빠져 나감
		}
	});
	if(returnNow) return;
	
	alert("보내기 성공");

}
</script>

</head>
<body>

<h3>each - break 구현</h3>

<div class="box">
	<div class="board-title">
    	<h3><span>|</span> 게시판</h3>
	</div>
	
	<form name="boardForm" method="post">
	  <table class="board-body">
	  <tr> 
		  <td >제 목</td>
		  <td style="padding-left:10px;"> 
			<input type="text" name="subject" maxlength="100" class="boxTF" style="width: 97%;">
		  </td>
	  </tr>

	  <tr> 
		  <td>작성자</td>
		  <td style="padding-left:10px;"> 
			<input type="text" name="name" size="35" maxlength="20" class="boxTF">
		  </td>
	  </tr>

	  <tr> 
		  <td style="padding-top:5px;"  valign="top">내 용</td>
		  <td valign="top" style="padding:5px 0px 5px 10px;"> 
			<textarea name="content" cols="75" rows="12" class="boxTA" style="width: 97%;"></textarea>
		  </td>
	  </tr>

	  <tr>
		  <td>패스워드</td>
		  <td style="padding-left:10px;"> 
			   <input type="password" name="pwd" size="35" maxlength="7" class="boxTF">&nbsp;(게시물 수정 및 삭제시 필요 !!!)
		   </td>
	  </tr> 
	  </table>

	  <table>
		 <tr align="center"> 
		  <td height="45">
			  <button type="button" class="btn" onclick="sendOk();"> 등록하기 </button>
			  <button type="reset" class="btn"> 다시입력 </button>
			  <button type="button" class="btn"> 취소하기 </button>
		  </td>
		</tr>
	  </table>
	</form>
</div>

</body>
</html>

each 반복문을 이용해서 각각 내용을 하나라도 입력하지 않으면 등록하기 버튼이 다음으로 안넘어 간다.

function sendOk() {
	var f = document.boardForm;
	
	var returnNow = false;
	var s;
	$("form input, form textarea").each(function(){ // each는 브레이크 컨티뉴가 없음
		if(! $(this).val().trim()) {
			s = $(this).closest("tr").find("td:first-child").text();
			
			s = s.replace(/\s/g,'');
			alert(s + "을(를) 입력하세요.")
			
			$(this).focus();
			returnNow = true;
			return false; // 이렇게 해야 빠져 나감
		}
	});
	if(returnNow) return;
	
	alert("보내기 성공");

}

스크립트 부분만 따로 보자

대상은 form 안에 input과 textarea들이고 이놈들을 each로 반복문을 돌린다.

 

if문 = 만약 값이 없다면(값은 trim으로 공백 제거 했음) 선택한 항목(this)의 가까운 tr 태그 중에서

td의 첫번째 자식의 text값을 찾는다.

모든 띄어쓰기를 제거하고 알림창을 띄워서 이 부분을 입력하라고 알려준다.

그리고 포커스로 입력할 곳 활성화 시켜준다.

 

그리고 밖에서 반복문이 끝났는지 안끝났는지 알려주기 위해서 returnNow를 이용해서 

만약 반복문이 다 돌았으면 returnNow가 false인 채로 밑으로 내려와서 if문 지나쳐서 alert를 실행 할 것이고

반복문이 다 안돌았으면 반복문 내부에서 returnNow가 true로 되어 있기 때문에

반목문을 나와도 if문에 걸려서 그냥 return 되어버린다.

 

 

반응형