카테고리 없음

[쇼핑몰 리팩토링] 09 JQuery 도입!!!

Yeji Heo 2024. 3. 20. 10:30

오직 JQuery라는 Javascript Framework 사용법을 익히기 위해서 의도적으로 진행한 리팩토링이다.

(Framework는 언제나 양날의 검이다...javascript를 구체적으로 몰라도 쓸 수 있으니까.. 유념하자)

 

JQuery API를 통해 쉽게 script구현이 가능하며, 그 방법은 아래와 같다.

 

Step 1. $()를 통해 JQuery객체화 

Step 2. JQuery객체에 API활용

 

+

JQuery를 통해 쉽게 element에 접근하고, API를 적용함으로써 다음과 같은 효과도 얻을 수 있다.

 

예를 들어, HTML element의 attribute에, javascript function을 직접 달아주면 

javascript와 html이 공존하므로 Coupling이 발생한다.

 

==> javascript단에서 HTML element에 접근해서 JQuery객체화, 원하는 기능을 처리

이러한 '접근'은 javascript로도 할 수는 있지만, JQuery를 통해 훨씬 쉽게 Decoupling관계를 만들 수 있다.


- JQuery접근법

어쨌든 개발은 API싸움! JQuery의 수많은 API를 잘 사용하기 위해서

API를 적용하고싶은 element에 '접근'하는 것이 핵심이다!

 

JQuery는 CSS의 접근법을 활용한다.

 

1. id로 접근

$( "#stop-log" ).append( "<div>" + msg + "</div>" );

id = "stop-log"인 element에 직접적으로 접근한다.

가장 직관적이고 심플하지만, id는 유일해야하는 식별성이라는 점에서

수많은 element마다 id로 접근하여 하나하나 제어하는 일은 많지 않을 것이다.

 


2. element이름으로 접근

td라는 element에 접근했는데

여러 td 중 식별을 위해 background라는 attribute로 한번 걸러주고

그것마저도 2개라서 array로 리턴된 JQuery객체에 인덱스로 접근했다. [0], [1]

	<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
	<script type="text/javascript">
			
		$(function(){
			
			$($('td[background="/images/ct_btnbg02.gif"]')[0]).click(function(){
				alert("목록으로 돌아갑니다.");
				$(document.location).attr("href","/product/listProduct?menu=manage");
			});
			
			$($('td[background="/images/ct_btnbg02.gif"]')[1]).bind("click", function(){
				alert("상품을 더 등록하시겠습니까?");
				$(document.location).attr("href","/product/addProductView.jsp");
			});
			
		});
			
	</script>

 

인덱스로 접근한 것은 JQuery객체가 아닌, element이므로

.click / .bind와 같은 JQuery API를 바로 적용할 수 없다.

그래서 $()로 한번 더 묶어서 API를 적용했다.


3. class attribute로 접근

 

element들을 그룹짓기 위해 붙인 class attribute를 통해 접근한다.

ct_btn01이라는 class가 붙은 모든 td에 접근한다.

$(function(){
	
	$('td.ct_btn01:contains("수정")').bind("click", function(){
		alert('수정하시겠습니까?');
		fncUpdateProduct();
	})
	
	$('td.ct_btn01:contains("취소")').bind("click", function(){
		alert('상품정보 수정을 취소하시겠습니까?');
		history.go(-1);
	})
	
	
});

 

 

td.ct_btn01로 접근한 element들 중에서도 명확한 식별을 위해 : 노테이션으로 추가정보를 제공하였다.

contains("수정")이라면, 접근한 element들 중에서 text로 "수정"을 갖고있는 것에 접근한다.

<td background="/images/ct_btnbg02.gif" class="ct_btn01" style="padding-top: 3px;">
					수정
</td>   <!-- contains("수정")이라면 요기에 접근! -->

<td background="/images/ct_btnbg02.gif" class="ct_btn01" style="padding-top: 3px;">
					취소
</td>