알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
javascript vs JQuery 본문
javascript vs JQuery
해당 강의를 보기 전에 javascript를 알고 보는것이 좋습니다.
먼저 javascript 예제 코드 입니다.
<html> <head> <script type="text/javascript"> function addEvent(target, eventType,eventHandler, useCapture) { if (target.addEventListener) { // W3C DOM target.addEventListener(eventType,eventHandler,useCapture?useCapture:false); } else if (target.attachEvent) { // IE DOM var r = target.attachEvent("on"+eventType, eventHandler); } } function clickHandler(event) { var nav = document.getElementById('navigation'); for(var i = 0; i < nav.childNodes.length; i++) { var child = nav.childNodes[i]; if(child.nodeType==3) continue; child.className = ''; } event.target.className = 'selected'; } addEvent(window, 'load', function(eventObj) { var nav = document.getElementById('navigation'); for(var i = 0; i < nav.childNodes.length; i++) { var child = nav.childNodes[i]; if(child.nodeType==3) continue; addEvent(child, 'click', clickHandler); } }) </script> <style type="text/css"> #navigation li { list-style:none; float:left; padding:5px; } #navigation { cursor:pointer; } #navigation .selected { background-color:red; color:white; } </style> </head> <body> <ul id="navigation"> <li>HTML</li> <li>CSS</li> <li>javascript</li> <li class="selected">jQuery</li> <li>PHP</li> <li>mysql</li> </ul> </body> </html>
위 샘플 코드가 많으니 분석을 해보도록 하겠습니다.
<style type="text/css"> #navigation li { list-style:none; float:left; padding:5px; } #navigation { cursor:pointer; } #navigation .selected { background-color:red; color:white; } </style> </head> <body> <ul id="navigation"> <li>HTML</li> <li>CSS</li> <li>javascript</li> <li class="selected">jQuery</li> <li>PHP</li> <li>mysql</li> </ul> </body>
이코드만 보면 css 는 select 라는 이름의 클래스를 background-color:red;color:white; 으로 만들어 주는 군요.
function addEvent(target, eventType,eventHandler, useCapture) { if (target.addEventListener) { // W3C DOM target.addEventListener(eventType,eventHandler,useCapture?useCapture:false); } else if (target.attachEvent) { // IE DOM var r = target.attachEvent("on"+eventType, eventHandler); } } addEvent(window, 'load', function(eventObj) { var nav = document.getElementById('navigation'); for(var i = 0; i < nav.childNodes.length; i++) { var child = nav.childNodes[i]; if(child.nodeType==3) continue; addEvent(child, 'click', clickHandler); } })
function addEvent 는 브라우져 호환성으로 인해 각 브라우저에 맞게 이벤트를 주기 위해서 사용 됩니다.
addEvent을 사용 하여 브라우저가 load 가 완료 될때 이벤트로 function(eventObj) 함수를 실행합니다.
function(eventObj) { var nav = document.getElementById('navigation'); for(var i = 0; i < nav.childNodes.length; i++) { var child = nav.childNodes[i]; if(child.nodeType==3) continue; addEvent(child, 'click', clickHandler); } }
위의 함수를 파라메터로 주어 이벤트로 실행 시키게 합니다.
실행 시키는 함수 안에서는
var nav = document.getElementById('navigation');
엘리먼트를 선택하고 nav객체 넣고 그 하위 객체들에게 addEvent함수를 써서 click 시 이벤트 함수를 넘겨 줍니다.
function clickHandler(event) { var nav = document.getElementById('navigation'); for(var i = 0; i < nav.childNodes.length; i++) { var child = nav.childNodes[i]; if(child.nodeType==3) continue; child.className = ''; } event.target.className = 'selected'; }
클릭시 실행 되는 함수로 엘레먼트가 선택 될때 id = navigation의 하위 자식들을 모두 child.className = '' 을 만들고
선택된 자신만 event.target.className = 'selected'; 가 되어 css 부분의
#navigation .selected {
background-color:red;
color:white;
}
해당 코드로 인해 빨간색 배경이 글자가 하얀색이 되는 코드 입니다.
위에서 child.nodeType==3 은 어떤 브라우저들 공백이나 문자들 또한 자식 객체로 잡아버리는 경우가 있습니다.
그럴때를 대비해서 그런 객체는 continue 로 넘깁니다.
JQuery 예제 코드 입니다.
<html> <head> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script type="text/javascript"> $('#navigation li').live('click', function() { $('#navigation li').removeClass('selected'); $(this).addClass('selected'); }) </script> <style type="text/css"> #navigation li { list-style:none; float:left; padding:5px; } #navigation { cursor:pointer; } #navigation .selected { background-color:red; color:white; } </style> </head> <body> <ul id="navigation"> <li>HTML</li> <li>CSS</li> <li>javascript</li> <li class="selected">jQuery</li> <li>PHP</li> <li>mysql</li> </ul> </body> </html>
분석을 해보겠습니다.
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script type="text/javascript"> $('#navigation li').live('click', function() { $('#navigation li').removeClass('selected'); $(this).addClass('selected'); }) </script>
이부분만 다르고 겨우4줄 코드로 바뀌었습니다.
$('#navigation li') 는 id가 navigation 의 부분에서 tag가 li 녀석들을 선택합니다. css 선택자 문법으로 사용합니다.
live 는 JQuery 에서 이벤트를 사용할수 있게 지원되는 라이브러리 함수 입니다. API 라고 합니다.
$('#navigation li').removeClass('selected'); 클래스 이름들을 지우고
$(this).addClass('selected'); 현재 선택한 엘리먼트 에게만 class 이름을 'selected' 라고 해줍니다.
JQuery 에서 이벤트 함수에 넘겨준 함수에서는 선택된 엘리먼트를 말합니다.
'Web > JQuery' 카테고리의 다른 글
[jQuery]엘리먼트 제어 (0) | 2017.08.23 |
---|---|
[javascript,jQuery] 이벤트란? (0) | 2017.08.23 |
[jQuery] Chain이란? (0) | 2017.08.23 |
JQuery 선택자 (0) | 2017.08.22 |
jQuery란? (0) | 2017.08.22 |