알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

javascript vs JQuery 본문

Web /JQuery

javascript vs JQuery

백곳 2017. 8. 22. 19:39

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
Comments