01. jQuery.ajax( options )

Parameters : options(Map) - key/value 쌍으로 이루어진 값. 모든 option의 값 들은 생략가능하며, $.ajaxSetup()의 형태로 default 값을 만들어서 사용이 가능하다. option을 구성하는 값은 다음과 같다.

options펼쳐보기

Returns : XMLHttpRequest

Description : jQuery에서 제공하는 Ajax toolkit. (Load a remote page using an HTTP request)

예제


■ Javascript 파일을 실행 가능한 형태로 load한다.

 

<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(function() {

    $.ajax({

      type: "GET",

      url: "./test.js",

      dataType: "script",

      success:function(data){

        call("jQuery!");

      }

    });

  });       

</script>

 

위 예제는 jQuery ajax를 통해서 local directory에 위치하는 test.js인 Javascript 파일을 load한 후 실행하는 예제이다. 이 때 jQuery ajax의 옵션 중 dataType이 "script"로 설정되어 있어야 한다.


test.js

 

function call(param){

  alert("Parameter is "+param);

}


<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(function() {

    $.ajax({

      type: "POST",

      url: "http://localhost/jquery/js/remote.js",

      dataType: "script",

      complete:function(){

       alert(remoteScript("jQuery!"));

      }

    });

  });      

</script>

 

위 예제는 local에 위치하는 Javascript 파일이 아니라, 다른 서버에 존재하는 Javascript 파일을 load하는 예제이다. local에 존재하는 Javascript 파일을 laod하여 사용하는 것과 차이가 없음을 알 수 있다.


remote.js

 

function remoteScript(userName){

       return "Hello, "+useName;

}


■ Server로 데이터를 보내고, 요청에 대한 응답을 받는다.

 

<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(document).ready(function(){

    $.ajax({

      type: "GET",

      url: "http://www.google.co.kr/search",

      data: {

        q: "jquery"

      },

      success: function(data, textStatus){

        $.each($($("img:not([src*='icons']):not([src$='png'])", data)), function(i){

          if (i < 4)

            $("#message").append($(this));

        });

      }

    });

  });

</script>

<style>

  div {

      font-family: verdana;

      font-size: 12px;

      border: 1px solid gray;

      width: 350px;

      text-align: center;

  }

</style>

 

<body>

  <div id="message"></div>

</body>

 

Ajax에서 일반적으로 가장 많이 사용되는 형태 중 하나이다. url의 값으로 등록된 주소로 data에 해당하는 값을 보내고, 요청에 해당하는 응답을 success의 callback function을 통해서 받게 된다.

콜백함수의 인수로 들어오는 값의 첫 번째 인자는 서버에서 보내온 결과 값을 의미하고, 두 번째 인자인 textStatus는 성공일 경우 "success" 문자열을 나타낸다.


■ 최신의 HTML Page를 가져온다.

 

<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(document).ready(function(){

    $.ajax({

      url: "cache.html",

      cache: false,

      success: function(data, textStatus){

        $("#message").append(data);

      }

    });

  });

</script>

<style>

  div {

      font-family: verdana;

      font-size: 12px;

      border: 1px solid gray;

      width: 200px;

      text-align: center;

  }

</style>

 

<body>

  <div id="message"></div>

</body>

 

cache의 값이 true일 경우 browser cache에 저장되어 있는 HTML page의 구성 요소(img, css, Javascript)의 정보를 가져온다. cache의 값이 false일 경우 browser의 cache에 HTML page의 구성요소 값이 존재하더라도, 서버에서 모든 정보를 다시 읽어와 화면에 보여준다.


■ 서버로 전송된 요청에 대한 응답이 있기 전까지 화면의 조작을 막게 된다.

 

<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(document).ready(function(){

    var html = $.ajax({

      url: "http://localhost/jquery/ajax/",

      data: {

        "param": "jQuery!",

        "async": "false"

      },

      async: false

    }).responseText;

    $("#message").append(html);

    $("button").click(function(){

      alert($("button").text())

    });

  });

</script>

<style>

  div {

      font-family: verdana;

      font-size: 12px;

      border: 1px solid gray;

      width: 200px;

      text-align: center;

  }

</style>

 

<body>

  <button>Hello, jQuery</button><br><br>

  <div id="message"></div>

</body>

 

옵션 async의 값이 false일 경우 요청에 대한 응답이 오기 전까지 화면에 대한 조작을 할 수 없게 된다.

위의 예제는 화면이 로드됨과 동시에 Hello, jQuery 버튼을 클릭해도 alert 창이 보이지 않다가 3초 후에 보이게 된다.

parameter로 async=false의 형태로 값을 보내면 서버에서 값을 확인한 후에 async의 값이 false일 경우 3초간 thread를 sleep 시키게 된다. 따라서 응답은 3초 후에 클라이언트에게 전송되고 응답을 받기 전인 요청 후 3초간은 화면에서의 조작을 할 수 없게 되는 것이다.


 

 

02. load( url [,data] [,callback] )

Parameters : url(String) - server url, data(Map)(Optional) - name/value 쌍의 서버로 전송할 데이터, callback(Function)(Optional) - 요청에 대한 응답 정보를 입력 값으로 받는 콜백함수

Returns : jQuery

Description : jQuery ajax의 가장 간단한 형태중 하나. jQuery 1.2 부터는 url에 jQuery selector를 적용 가능하다. url의 값으로 등록된 파일을 load하여 현재의 document 안에 삽입한다. callback function의 입력 값 형태는 function(responseText, textStatus, XMLHttpRequest)와 같으며, responseText는 결과 값, textStatus는 성공 여부를 'success' 와 'error' 의 형식으로 나타낸다.

예제


$("#links").load(http://www.google.co.kr img);

 

id가 links인 엘리먼트 안에 url의 값을 load한다.  www.google.co.kr 에 접속 했을 때 보여주는 페이지에서 img 엘리먼트를 모두 가져와서 보여준다.


$("#links").load("feed.html img");

 

local에 존재하는 feed.html 을 load한 후 가져온 문서에서 img 엘리먼트를 가져와서 현재 docuemtn에 id가 links인 엘리먼트 안에 포함시킨다.


feed.html

...

<p>Hello, jQuery!</p>

So, easy!

<img src="../../img/jQuery.jpg">

...


<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(document).ready(function(){

    $("#links").load("feed.html p", function(){

      alert($(this).html());

    });

  });

</script>

 

<body>

  <div>

    <b id="links"></b>

  </div>

</body>

 

load(url, data, callback)의 3번째 입력 값인 콜백함수를 추가했다. 여기서 콜백함수 안에 구현된 this는 $("#links")를 의미한다.


 

 

03. jQuery.get( url [,data] [,callback] [,type] )

Parameters : url(String) - The URL of the page to load, data(Map)(Optional) - {name:value} 쌍의 서버로 전송할 데이터, callback(Function)(Optional) - 요청이 성공으로 완료된 후 호출될 콜백함수, type(String)(Optional) - Type of data to be returned to callback function: "xml", "html", "script", "json", "jsonp", or "text"

Returns : XMLHttpRequest

Description : Get방식으로 서버와 통신하는 jQUery Ajax 형태이다. 세 번째 콜백함수는 요청에 대한 응답이 성공일 경우만 호출된다. 따라서 성공이 아니니 경우의 처리를 원할 경우 Global jQUery Ajax Function 이나, jQuery.ajax(...) 의 형태를 사용해야 한다. callback function의 형태는 function(data, textStatus)의 형태이며, 데이터는 성공일 경우의 응답 결과값을 나타내고, textStatus 는 성공일 경우만 'success'문자열로 입력된다.

예제


<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(function(){

    $.get("http://www.google.co.kr", function(data){

      $(data).find('img').appendTo("#result");

    });

  });

</script>

 

<body>

  <div>

    <span id="result"></span>

    <br>

</div>

</body>

 

url 값이 http://www.google.co.kr 인 페이지를 호출한 후 요청 url의 결과 값에서 img 엘리먼트를 추출, document에 있는 id가 "result"인 엘리먼트 안에 추가한다.


<script src="../../js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

  $(function(){

    $.ajaxSetup({

      dataType: "text"

    });

    $.get("http://localhost/jquery/ajax/", {

      "param": "jQuery!"

    }, function(data, textStatus){

      alert(textStatus);

      $("#result").append(data);

    });

  });

</script>

 

<body>

  <div>

    <span id="result"></span>

    <br>

       </div>

</body>

 

서버로 데이터를 전송하고, 성공일 경우 XMLHttpRequest의 상태 값을 alert로 확인한 후, 서버에서 보내온 응답을 id가 'result' 인 엘리먼트에 추가한다.

이 예제에서 상단부의 $ajaxSetup(...)은 현재 document에서 모든 jQuery를 통한 Ajax 설정에 적용되는 공통 값(전역속성)이라고 생각하면 될 것이다. 공통설정에서 dataType의 option을 'text'의 형태로 정했다. (jQuery에서 dataType이 생략될 경우 jQuery 내부에서 text 값을 적용할지 XML 형식의 값을 적용할지, 그렇지 않으면 나머지 값들을 적용할지 판단한다.)


<script type="text/javascript">

  $.ajaxSetup({

    dataType: "text"

  });

  $(function(){

    $.get("http://localhost/jquery/ajax/", {

      "한글": "입니다!"

    }, function(data, textStatus){

      alert(textStatus);

      $("#result").append(data);

    });

    $("#result").ajaxComplete(function(evt, xhr, opt){

      //this --> DOM Element

      $(this).append("<br>Event called[" + evt.type + "] " +

      "<br>server url[" +

      opt.url +

      "]  " +

      "<br>data type[" +

      opt.dataType +

      "]  " +

      "<br>data[" +

      opt.data +

      "]");

    });

  });

</script>

 

GET 방식으로 요청이 이루어질 경우 실제 option 값들이 어떤 식으로 보내지는지 확인하는 예제이다.

GET 방식일 경우 data option 의 name:value의 값들이 url의 서버 주소 뒤에 쿼리 문자열 형태로 변경이 되며, 한글일 경우 위의 예제처럼 encoding 되어 서버로 전송되는 것을 알 수 있다.


jquery  ajax 활용 

jQuery

 

jQuery 다루기

 

  • jQuery 여러 기능들

 

화면에 새로운 HTML을 생성하여 나타내여라! - $( )
  1. $( "<div> 안녕 하세요 </div>" );
  • 정말 요즘 인기 있는 개그프로처럼 "참~~ 쉽죠잉~~" 이다. 그냥 $(" ")넣어만 주면 HTML로 출력 된다는 것이다.

예제 : http://gisung2.cafe24.com/jquery/chapter2/new.divs.html

 

확장된 집합을 배열로 접근하자
  1. $('span[title]')[0]
  • 위 코드는 모든 span 엘리먼트의 title속성값의 0 == 첫번째 값을 반환한다. (jQuery의 반화값은 자바스크립트 배열과 매우 유사한 형태임으로 배열 & length & size();를 사용할 수 있고 값을 얻어 오기 위해 get()이란 메서드를 사용할 수도 있다.

  1. $('span[title]').get(0)

도 가능 하다는 뜻이다^^;

 

이미 선택된 셀렉터에 추가 하기 - add - Add elements to the set of matched elements.
  1. $('span[title], span[title]')
    또는
    $('span[title]').add(span[title])

 

  1. <script>
        $(document).ready(function(){   
           $("div").css("border", "2px solid red")
               .add("p")
               .css("background", "yellow");
        });
    </script>

 

http://docs.jquery.com/Traversing/add#expr [새창으로 여세요]

  • add는 기존의 확장 집합에 새로운 확장집합을 추가 한다고 생각하면 된다.^^; 또 add()  메서드는 HTML을 동적으로 엘리먼트에 추가 할수 있다.

http://api.jquery.com/add/

 

엘리먼트 순회하기 - each - Iterate over a jQuery object, executing a function for each matched element.
  1. $('li').each(function(index) {
        alert(index + ': ' + $(this).text());
      });

  • .each 셀렉터와 일치하는 집합을 돌면서 해당 엘리먼트를 호출한다. 여기서의 this는 현재의 현재 가르키는 엘리먼트이다. 위 예제는 현재 엘리먼트의 text를 alert로 보여주게 된다.

http://gisung2.cafe24.com/jquery/study/each1_1.jsp

클릭시 toggleClass란 메소드를 각각의 엘리먼트에 적용하는 예제 이다.

 

속성값 설정하기 - attr - Get the value of an attribute for the first element in the set of matched elements.
  1. <img id="greatphoto" src="brush-seller.jpg" alt="brush seller" />
  2.  
  3. $('#greatphoto').attr('alt', 'Beijing Brush Seller');
  4.  
  5. $('#greatphoto')
      .attr('title', 'Photo by Kelly Clark');

    $('#greatphoto').attr({
      alt: 'Beijing Brush Seller',
      title: 'photo by Kelly Clark'
    });
  6.  
  7. $('#greatphoto').attr('title', function() {
      return this.alt + ' - photo by Kelly Clark'
    );
  8.  
  9. $('img').attr('alt', function(index){
       return this.title;
    });
  • 개발을 하다보면 엘리먼트의 속성값이 접근해야 할 경우가 많다. jQuery의 attr을 사용하여 쉽게 속성값을 변경하고 얻어 올 수 있다. 셀렉터에 의해 반환된 집합이 한개 이상이라면 엘리먼트를 돌면서 해당되는 엘리먼트에 접근하는 것이 가능한다. 또한 한번에 다수의 엘리먼트를 설정하고 싶을때는 위 두번째, 세번재 예제와 같이 하면 된다. attr 은 명시한 속성이 없으면 undefined를 리턴한다. 

클래스 추가 제거 하기 - addClass, removeClass - Adds the specified class(es) to each of the set of matched elements., Remove one or all classes from each element in the set of matched elements.
  1. $('p').addClass('myClass yourClass');


    $('p').removeClass('myClass noClass').addClass('yourClass');


    $('ul li:last').addClass(function() {
      return 'item-' + $(this).index();
    });

  • addClass 는 반환된 집합에 인자로 받은 클래스를 적용한다.
  • removeClass 는 반환된 집합에 인자로 받은 클래스를 제거 한다.

http://gisung2.cafe24.com/jquery/study/addClass1_1.jsp 

클래스 변경하기 -  toggleClass - Add or remove a class from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
  1. $('#foo').toggleClass(className, addOrRemove);

    if (addOrRemove) {
        $('#foo').addClass(className);
      }
      else {
        $('#foo').removeClass(className);
      }
    }
     
    $('div.foo').toggleClass(function() {
      if ($(this).parent().is('.bar') {
        return 'happy';
      } else {
        return 'sad';
      }
    });

  • toggleClass 메서드의 매개변수로 전달받은 클래스가 셀렉터에 의해 선택되어진 확장 엘리먼트에 이미 적용되어 있다면 제거 하고 그렇지 않다면 추가한다. 

css 설정 하기 - css - Get the value of a style property for the first element in the set of matched elements.
  1. .css( propertyName )
    .css( propertyName, value )
    .css( propertyName, function(index, value) )

  • css()메서드를 이용하여 css를 설정하고 또는 값을 얻어 올 수 있다. 첫번째 propertyName 하나만 인자로 주어진 경우에는 설정되어 있는 값을 리턴한다. 인자가 두개인 경우엔 해당 property에 value값을 넣게 된다. 

셀렉터와 일치하는 엘리먼트가 있는지 여부를 리턴한다. - is - Check the current matched set of elements against a selector and return true if at least one of these elements matches the selector.
  1. .is( selector )
  2.  
  3. $('ul').click(function(event) {
      if ($(event.target).is('li') ) {
        $(event.target).css('background-color', 'red');
      }
    });
  • is 메서드는 확장된 집합에 인자로 받은 selector와 일치하는 엘리먼트가 있는지 여부를 알려 주는 메서드 이다. 위 코드는 event.target 이 li 인지를 확인하는 코드이다. 

HTML 코드 삽입하기 - html - Get the HTML contents of the first element in the set of matched elements.
  1. $('div.demo-container')
      .html('<p>All new content. <em>You bet!</em></p>');

    $('div.demo-container').html(function() {
      var emph = '<em>' + $('p').length + ' paragraphs!</em>';
      return '<p>All new content for ' + emph + '</p>';
    });

  • html() 은 해당 앨리먼트의 contents의 모두 리턴하고 .html('코드') 은 해당 앨리먼트에 콘텐츠로 설정한다. 

HTML 컨텐츠 설정하기 - text - Get the combined text contents of each element in the set of matched elements, including their descendants.
  1. var str = $("p:first").text();


    $('ul li').text(function() {
      return 'item number ' + ($(this).index() + 1);
    });

  • 혹 이쯤 되면 느낌이 오시나요! text 와 html 은 거진 동일하다. 둘다 앨리먼트의 contents를 가져오는 것인데 html은 html코드까지 얻어 오는 반면 text는 contents의 text 값만 얻어 온다. 아래 예제를 보면 단번에 "아~~~~~~" 하게 될것이다.

http://gisung2.cafe24.com/jquery/study/text1_1.jsp 

앨리먼트 더하고 빼고 지지고 복고^^; - append() - Insert content, specified by the parameter, to the end of each element in the set of matched elements.
  1. A.append( content )
    A.append( function(index, html) )
  2. 이런 응용이 가능 하겠죠
  3. $('.container').append($('h2'));
  • 이름만 들어도 느낌이 또 오실 것입니다. append 는 A에 인자로 받은 content를 추가 하가 됩니다. 인자로 function을 사용 가능하며 function의 인자로 index 

엘리먼트 이동하기 - .appendTo() - Insert every element in the set of matched elements to the end of the target.
  1. A.appendTo( target )
  2. $('h2').appendTo($('.container'));
  • appendTo 는 append와 그 역할이 비슷하다. 하지만 append 는 A.에 content를 더하는 반면 appendTo 는 target에 A를 더한다.

http://gisung2.cafe24.com/jquery/study/appendTo1_1.jsp

 

append 와 appendTo의 역할은 거진 동일하다. 하지만  target 과 content 열할을 하는 위치가 다르니 꼭 주의하기 바란다. 또 앨리먼트 하나만 이동시킬 경우는  appendTo가 좀더 편하다고 한다.

중요한것은 append 와 appendTo 는 target의 수에 따라 == selector을 통해 반환한 앨리먼트가 한개이면 이동을 하고 한개 이상이면 복사를 한다는 것이다.

http://gisung2.cafe24.com/jquery/chapter3/lab.move.and.copy.html

  • 위 예제를 통해서 제대로 이해하고 넘어갔으면 좋겠다. 왜? 자주 쓰일것 같아서 이다^^;

값 얻어 오기 또 넣어주기 - val() - Get the current value of the first element in the set of matched elements.
  1. $("#single").val();

    $('select.foo option:selected').val();    // get the value from a dropdown select
    $('select.foo').val();                    // get the value from a dropdown select even easier
    $('input:checkbox:checked').val();        // get the value from a checked checkbox
    $('input:radio[name=bar]:checked').val(); // get the value from a set of radio buttons

  • 엘리먼트의 값을 얻어 오는 메서드이다. 값 뿐만 아니라 :selected,  :checked 셀렉터를 함께 사용하면 장점이 극대화 된다.

http://gisung2.cafe24.com/jquery/study/val1_1.jsp

이와는 반대로 값을 넣을 수 도 있다.

  1. .val( value )

    $('input:text.items').val(function(index, value) {
       return value + ' ' + this.className;
    });
  • 위와 같이 값을 설정할 수 있다.

http://gisung2.cafe24.com/jquery/study/val1_2.jsp 

이전 확장 집합으로 돌아 가기 - end() - End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.
  1. <!DOCTYPE html>
    <html>
    <head>
      <style>p { margin:10px; padding:10px; }</style>
      <script src="/scripts/jquery-1.4.js"></script>
    </head>
    <body>
        <p><span>Hello</span>, how are you?</p>
       <script>

    $("p").find("span").end().css("border", "2px red solid");

    </script>

    </body>
    </html>

  • 장문에 jQuery 코딩을 하다 보면 자주 사용하게 될것이다^^;(제생각임) 커맨드 체인을 이용하여 확장집합을 변형 시킬때. end()를 사용함으로써 이전 확장 집합으로 되돌아 갈 수 있는 것이다.

http://gisung2.cafe24.com/jquery/study/end1_1.jsp 

찾아라 - index() - Search for a given element from among the matched elements.
  1. <!DOCTYPE html>
    <html>
    <head>
      <style>div { font-weight: bold; color: #090; }</style>
      <script src="/scripts/jquery-1.4.js"></script>
    </head>
    <body>
       <ul>
         <li id="foo">foo</li>
         <li id="bar">bar</li>
         <li id="baz">baz</li>
       </ul>
    <div></div>
    <script>

        var listItem = $('#bar');
        $('div').html( 'Index: ' + $('li').index(listItem) );</script>
    </body>
    </html>

  • 화면엔 "Index: 1" 가 출력 된다. 먼저 셀렉터로 확장 집합을 만들고 해당 엘리먼트가 몇번째 인지 리턴한다. 없으면 -1 이다^^; 

확장집합 필터링 하기 - filter() - Reduce the set of matched elements to those that match the selector or pass the function's test.
  1. $('li').filter(function(index) {
      return $('strong', this).length == 1;
    }).css('background-color', 'red');


    $('li').filter(function(index) {
      return index % 3 == 2;
    }).css('background-color', 'red');
  • 제법 괜찮은 놈임에는 틀림이 없다. 확장집합을 필터링 한다. function을 실행하여 false를 리턴한 엘리먼트는 제거 된다.

http://gisung2.cafe24.com/jquery/study/filter1_1.jsp

http://gisung2.cafe24.com/jquery/study/filter1_2.jsp

  • 왠지 이놈은 자주 쓸것 같다! 자주 쓰면 나쁠것 같긴 하지만! 흠..(제생각)

  1. this.innerHTML.match('^\d+$/');
  • 이런식으로 filter 안 function 에서 match를 사용하여 text 와 정규식이 일치하는 엘리먼트가 있다면 선택 할 수 있다. 
확장 집합에 일부 부분 집합을 리턴한다. - slice() - Reduce the set of matched elements to a subset specified by a range of indices.
  1. <ul>
      <li>list item 1</li>
      <li>list item 2</li>
      <li>list item 3</li>
      <li>list item 4</li>
      <li>list item 5</li>
    </ul>

    $('li').slice(2).css('background-color', 'red');

    $('li').slice(2, 4).css('background-color', 'red');

  • 선택된 확장집합에서 연속된 일부 특정 영역을 리천한다. ps. slice(포함됨, 미포함됨); 0부터 시작함 

http://gisung2.cafe24.com/jquery/study/slice1_1.jsp 

존재하는가? 일치하는가? - is() - Check the current matched set of elements against a selector and return true if at least one of these elements matches the selector.
  1. <ul>
      <li>list <strong>item 1</strong></li>
      <li><span>list item 2</span></li>
      <li>list item 3</li>
    </ul>


    $('ul').click(function(event) {
      if ($(event.target).is('li') ) {
        $(event.target).css('background-color', 'red');
      }
    });

  • 확장집합.is(셀렉터) 와 같은 형식으로 확장집합과  인자로 넘어온 셀렉터에의해 반환된 집합이 일치하면 true 그렇지 않다면 false를 리턴한다. 

복사본을 리턴하라 - clone() - Create a copy of the set of matched elements.
$('.hello').clone().appendTo('.goodbye');
  • 위와 같이 clone()를 사용하면 첫번째 셀렉터에 의해 선택된 .hello 라는 클래스를 사용하는 집합이 .goodbye에 더해지는 것이 아니라 .hello 집합의 복사본이 이동 또는 복사 되어 진다.

http://gisung2.cafe24.com/jquery/study/find1_1.jsp 

원본 집합에서 검색 조건 셀렉터와 일치하는 새로운 집합을 리턴 - find() - Get the descendants of each element in the current set of matched elements, filtered by a selector.
  • <!DOCTYPE html>
    <html>
       <head>
         <script src="/scripts/jquery-1.4.js"></script>
       </head>
       <body>
           <p><span>Hello</span>, how are you?</p>
           <p>Me? I'm <span>good</span>.</p>
           <script>
               $("p").find("span").css('color','red');
            </script>
        </body>
    </html>
  • 타이틀 그대로 입니다. 선택되어진 확장 집합에서 find에 인자로 넘어온 셀렉터와 일치하는 집합만 리턴한다는 것 입니다^^; 제법 유용 하겠네요!

http://gisung2.cafe24.com/jquery/study/find1_1.jsp 

기타 메서드

$(window).width();   // returns width of browser viewport
$(document).height(); // returns width of HTML document
 
$("#getp").click(function () {
  $("p").width(30);
});

  • 엘리먼트의 가로 세로 크기를 얻어 온다.

 

 

 

jQuery

 

jQuery 의 셀렉터

 

  • 셀렉터
  • jQuery 는 강력한 Selectors를 제공한다. 우리는 개발을 하다 보면 엘리먼트 하나 또는 엘리먼트 집합을 선택하고 다뤄야 하는 일이 많다. 이런한 경우에 집합 그룹을 쉽고 편리하게 얻을 수 있는 방법으로 Selectors를 제공 하는 것이다.
  • 셀렉터의 종류

    1. 기본 CSS 셀렉터
    2. 자식 셀렉터, 컨테이너 셀렉터, 어트리뷰트 셀렉터
    3. 위치로 선택하기
    4. jQuery 정의 셀렉터 사용하기
  • 기본 CSS 셀렉터
  1. $("p a.specialClass")

위 소스와 같은 형식은 CSS를 좀 해보심 분들이라면 한번쯤? 보셨을 겁니다. CSS에서 특정 엘리먼트에 대한 스타일을 정의할때 많이 사용하는 방법입니다. jQuery에서도 이와 같은 셀렉터를 사용 가능 합니다.

  1. a 또는 p 또는 div  - 는 모든 링크(<a>) 엘리먼트 또는 (<p>)엘리먼트 또는 (<div>)엘리먼트를 뜻합니다.
  2. #specialID  - 는 specialID를 아이디로 가지고 있는 엘리먼트와 일치 하는 셀렉터 입니다.
  3. .specialClass - 는 specialClass를 클래스로 가지는 모든 엘리먼트와 일치하는 셀렉터 입니다.
  4. a#specialID.specialClass -  아이디가 specialID이고 specialClass를 클래스로 가지는 링크와 일치하는 셀렉터이다.
  5. p a.specialClass - <p> 엘리먼트 내에 선언되고 specialClass를 클래스로 가지는 모든 링크와 일치하는 셀렉터이다. 
  • jQuery 에서 가장 중요한 부분이 셀렉터가 아닌가 싶다. 다시 쉽게 설명한다면 javascript를 코딩할때 특정 div 또는 특정 input를 선택해야 할때가 있다. 그 이유는 input 엘리먼트의 값을 얻어 오거나 div에 innerHTML로 값을 넣기 위에 해당 엘리먼트를 자바스크립트내에 obj 형태로 얻어 와야 하는 것이다.
  1. <script language="javascript">
        var value = document.getElementById('inputName').value;
    1. alert( value );
  2. </script>

기존에는 이런 식으로 inputName을 선택해서 그 value값을 얻어왔을 것이다. 하지만 jQuery의 css셀렉터를 이용한다면

  1. <script language="javascript">
  2. var value = $('#inputName').val();
  3. alert( value );
  4. </script>

이런 식으로 엘리먼트를 얻어 올 수 있다는 것이다. 지금은 하나의 엘리먼트를 얻어 오는 부분 이였지만 배열 및 반복된 작업을 할때는 소스 코드를 엄청나게 줄여 주게 된다. 

  • 셀렉터 예제를 쉽게 테스트해 볼수 있는 소스 코드를 받아 보도록 하자 [여기]  jqia.source.zip

http://www.manning.com/jQueryinAction 에서 다운 받아 테스트 할 수 있다.

다운 받은 소스를 사용 하셔도 되고요! 일단 http://gisung2.cafe24.com/jquery/chapter2/lab.selectors.html 이곳에서 셀렉터 예제는 테스트 가능 합니다.

예제 : http://gisung2.cafe24.com/jquery/chapter2/lab.selectors.html 

  • 자식 셀렉터, 컨테이너 셀렉터
  1. <ul class="myList">
      <li><a href="http://jquery.com">jQuery supports</a>
        <ul>
          <li><a href="css1">CSS1</a></li>
          <li><a href="css2">CSS2</a></li>
          <li><a href="css3">CSS3</a></li>
          <li>Basic XPath</li>
        </ul>
      </li>
      <li>jQuery also supports
        <ul>
          <li>Custom selectors</li>
          <li>Form selectors</li>
        </ul>
      </li>
    </ul>

위와 같은 소스에서 우리가 붉은색만을 얻어 오고 싶을때  $('ul.myList li a') 와 같은 형식으로 셀렉터를 시도할 것이다. 여기서 문제는 하나의 a 엘리먼트가 아니가 세개 모두 얻어 올 것이다. 이러한 문제는 자식 셀렉터로 해결 가능하다.

  1. jQuery statement: $("ul.myList li a")             기본 CSS셀렉터
  2. jQuery statement: $("ul.myList > li > a")         자식 셀렉터 사용

위처럼 자식 셀렉터(child selector)은 오른쪽 부등호(>)로 구분한다. 위 소스 내용은 myList라는 클래스를 갖고 있는 ul엘리먼트의 첫번째 li 엘리먼드의 첫번째 a 엘리먼트란 뜻이다.

 

  • 어트리뷰트 셀렉터(attribute selector) (강력함)

어 트리뷰트 셀렉터는 매우 강력한 능력을 갖고 있다. 예를 들어 <a> 에서 href 속성의 값으로 http:// 로 시작하는 링크에만 특정 class를 적용하고 싶을 경우 기존의 저 스크립트 방식 이였다면 일일이 엘리먼트에 class를 주거나 스크립트에서 id를 참조 하여 일일이 작업해 주어야 했을 것이다.  하지만 어드리 뷰트 셀렉터를 사용한다면 이렇게 마무리 된다. 

  1. jQuery statement: $("a[href^=http://]")

대박이다!  위 처럼 한줄로 모든 http://로 시작하는 링크를 참조 할 수 있는 것이다.  어트리뷰트 셀렉터는 속성의 값과 상관없이 속성을 갖고 있기만 해도 참조가 가능하다. 

  1. jQuery statement: $("form[method]")

이렇게 하면 method 속설을 갖고 있는 form 엘리먼트를 찾게 되는 것이다. 또는 이렇게? 

  1. jQuery statement: $("input[type=text]")

이 렇게 하면 type속성 값이 text인 input 엘리먼트를 모조리다 참조 할 수 있는 것이다. 페이지에 input 가 100개 있다고 하자 이 모든 놈들은 저 코딩 할줄로 참조 할수 있다는 말이다^^; 대박..대박.. 어트리뷰터 셀렉터에서는 약간의 정규식을 사용할 수 있다. 간단하게 설명한다. 

  1. div[title^=my]         //대박
  2. a[href=$=.pdf]         //대박
  3. a[href*=jquery.com]    //쩌름 대박

먼 저 ^ 는 시작값을 뜻하는 것이고 $ 는 마지막 값을 * 는 임의의 문자열을 포함한다라는 뜻이다. 기억 하는가 예전에는 임의의 문자열을 찾을려면 indexOf로 쫄로리 값을 찾아야 했으나 a[href*=jquery.com] 이거 한방으로 된다는거^^; 가이 대단한다.

 

  • 컨테이너 셀렉터(container selector)
  1. jQuery statement: $("li:has(a)")

a 엘리먼트를 포함하는 모든 li엘리먼트와 일치할 것이다.

 

  • jQuery가 지원하는 기본 CSS 셀렉터
    셀렉터 설명
    * 모든 엘리먼트와 일치
    E 태그명이 E인 모든 엘리먼트와 일치
    E F E의 자손이면서 태그명이 F인 모든 엘리먼트와 일치
    E>F E의 바로 아래 자식이면서 태그명이 F인 모든 엘리먼트와 일치
    E+F E의 형제 엘리먼트로 바로 다음에 나오는 엘리먼트 F와 일치
    E~F E의 형제 엘리먼트로 다음에 나오는 모든 엘리먼트 F와 일치
    E:has(F) 태그명이 F인 자손을 하나 이상 가지는 태크명이 E인 모든 엘리먼트와 일치
    E.C 클래스명 C를 가지는 모든 엘리먼트E와 일치. E의 생략은 *.C와 동일함
    E#ID 아이디가 ID인 엘리먼트 E와 일치, E의 생략은 *#ID와 일치
    E[A] 어트리뷰터 A를 가지는 모든 엘리먼트 E와 일치
    E[A=V] 값이 V인 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
    E[A^=V] 값이 V로 시작하는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치

    E[A$=V]

    E[A*=V]

    값이 V로 끝나는 어트리뷰터트 A를 가지는 모든 엘리먼트 E와 일치

    값에 V를 포함하는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치

 

  • 위치로 선택하기
  • 엘리먼트 위치나 다른 엘리먼트와 연관된 관계를 기반으로 엘리먼트를 선택해야 할 때가 있다. 첫 번째 엘리먼트만 선택한다던지, 또는 리스트에서 홀수 짝수만 선택해야 하는 경우가 그렇다고 하겠다.
  1. jQuery statement: $("a:first")

위 셀렉터는 페이지에서 첫번째 <a> 엘리먼트와 일치한다.

  1. jQuery statement: $("p:odd")

위셀렉터는 모든 홀수 번째 문단(<p>) 엘리먼트와 일치한다. 짝수는 아래와 같다.

  1. jQuery statement: $("p:even")

 

  • jQuery가 지원하는 고급 위치 기반 셀렉터. DOM에서 위치를 기반으로 엘리먼트를 선택한다.
    셀렉터 설명
    :first 페이지에서 처음으로 일치하는 엘리먼트. li a:first는 리스트 아이템의 첫 번째 링크를 반환한다.
    :last 페이지에서 마지막으로 일치하는 엘리먼트. li a:last는 리스트 아이템의 마지막 링키를 반환한다.
    :first-child 첫 번째 자식 엘리먼트. li:first-child는 각 리스트의 첫 번째 아이템을 반환한다.
    :last-child 마지막 자식 엘리먼트. li:last-child는 각 리스트의 마지막 아이템을 반환한다.
    :only-child 형제가 없는 모든 엘리먼트를 반환한다.
    :nth-child(n) n번째 자식 엘리먼트. li:nth-child(2)는 각 리스트의 두 번째 리스트 아이템을 반환한다.
    :nth-child(even|old) 짝수 또는 홀수 자식 엘리먼트. li:nth-child(even)은 각 목록의 짝수 번째 자식 엘리먼트를 반환한다.
    :nth-child(Xn+Y)

    전달된 공식에 따른 n번째 자식 엘리먼트. Y는 0인 경우 생략 가능하다.

    li:nth-child(3n)은 3의 배수 번째 아이템을 반환한다.

    li:nth-child(5n+1)은 5의 배수 + 1 번째 아이템을 반환한다.

    :even / :odd 페이지 전체의 짝수/홀수 번째 엘리먼트. li:even 은 모든 짝수 번째 아이템을 반환한다.
    :eq(n) n번째로 일치하는 엘리먼트
    :gt(n) n번째 엘리먼트(포함하지 않음) 이후의 엘리먼트와 일치
    :lt(n) n번째 엘리먼트(포함하지 않음) 이전의 엘리먼트와 일치

다른 셀렉터는 인덱스가 0부터 시작 하지만 n번째 자식 셀렉터는 1부터 시작된다.

 

  • jQuery 정의 셀렉터 사용하기
  • 어 트리뷰트를 이용하는 방식은 컨트롤(체크박스)의 초기 상태밖에 확인하지 못하므로 jQuery는 jQuery 정의 셀렉터인 :checked를 제공한다. :checked 셀렉터는 일치하는 엘리먼트 중 선택 상태인 엘리먼트만 필터링해 남겨 둔다.
  1. :checkbox:checked:enabled         //대박
  2. jQuery statement: $(":checkbox:checked:enabled")

위 코딩은 enabled되어 있는 checkbox중에서 체크되어 있는 엘리먼트만 일치시킬 수 있는 것이다. 대박인 것이다.

 

  • jQuery 정의 필터 셀렉터. 대상 엘리먼트를 식별해내는 데 강력한 기능을 준다.
    셀렉터 설명
    :animated 현재 애니메이션이 적용되고 있는 엘리먼트를 선택한다.
    :button 모든 버튼을 선택한다.(input[type=submit], input[type=reset], input[type=button], button)
    :checkbox 체크박스 엘리먼트만 선택한다
    :checked 선택된 체크박스나 라디오 버튼만을 선택한다.(CSS에서 지원)
    :contains(foo) 텍스트 foo를 포함하는 엘리먼트만 선택
    :disabled 인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택한다.(CSS에서 지원)
    :enabled 인터페이스에서 활성화 상태인 모든 폼 엘리먼트를 선택한다.(CSS에서 지원)
    :file 모든 파일 엘리먼트를 선택한다.(input[type=file])
    :header 헤더 엘리먼트만 선택한다. 예를 들어<h1>부터 <h6>까지의 엘리먼트를 선택한다.
    :hidden 감춰진 엘리먼트만 선택한다.
    :image 폼 이미지를 선택한다. (input[type=image])
    :input 폼 엘리먼트만 선택한다.(input, select, textarea, button)
    :not(filter) 필터의 값을 반대로 변경한다.
    :parent 빈 엘리먼트를 제외하고, 텍스트도 포함해서 자식 엘리먼트를 가지는 엘리먼트를 선택한다.
    :password 패스워드 엘리먼트만 선택한다.(input[type=password])
    :radio 라디오 버튼 엘리먼트만 선택한다.(input[type=radio])
    :reset 리셋 버튼을 선택한다.(input[type=reset] 이나 button[type=reset])
    :selected 선택된 엘리만트만 선택한다.
    :submit 전송 버튼을 선택한다.(button[type=submit] 이나 input[type=submit])
    :text 텍스트 엘리먼트만 선택한다.(input[type=text])
    :visible 보이는(visible) 엘리먼트만 선택한다.

 

  • not 필터 사용하기

    위 필터를 반대로 적용하고 싶다면 not 필터를 사용하면 된다.

  1. jQuery statement: $("input:not(:checked) ")

checked 되지 않은 모든 input 를 반환한다. 한가지 유의할 것은 :not 필터안에서는 찾기셀렉터는 들어 갈수 없다는 것이다. $(" input:not(#idName:checked) ") 이런식으로 찾기 셀렉터는 들어 갈 수 없다.

 

 

 

jQuery

 

jQuery의 시작

 

  • jQuery 란 무엇인가
  • 2006년 초에 개발된 자바 스크립트 라이브러리로써 기존에 라이브러리는 놀랍고 강력한 고급 기술에 중점을 두는 컨셉으로 등장했지만 jQuery는 웹페이지를 개발하는 개발자의 생각하는 방식을 바꾸는데 그 목적을 두었다고 한다.

 

  • 왜 jQuery 인가
  • 웹페이지를 개발 하다보면 동적으로 화면을 컨트롤 하거나 css로 디자인을 변경하고  또는  애니매이션등의 효과를 줘야 할 경우가 많다.  이러한 효과를 저 수준의 자바스크립트로 작성하게 되면 엄청난 코딩 수의 압박으로 만들기도 전부터 걱정이 앞설 것이다. 이러한 모든 작업을 쉽고 빠르게 작업해 줄수 있수 있도록 해줄놈이 jQuery 이란 놈이다.

 

  • 튀지 않는 자바 스크립트
  • HTML 엘리먼트에 스타일을 적용하고 자바스크립트 호출을 넣는 방법은 지금까지 많이 사용되어왔던 스타일이다.
  1. <button type="button" onclick="document.getElementById("zz").style.color='red';" >클릭 하시오</button>

이 런 형식으로 작업을 해왔다. 전혀 이상할 것 없는 소스 이다. jQuery 는 위와 같은 코딩 스타일을 튀는 자바 스크립트라고 부른다. 하지만 jQuery는 이와는 반대로 튀지 않는 자바 스크립트를 지향한다. 즉 엘리먼트와 css & 자바스크립트를 분리 하여 <body> tag 안에는 자바 스크립트와 CSS가 들어 오지 못하게 하는 것이다.

  1. <button type="button" id="testButton">클릭 하시오</button>

 

  1. <script language="javascript">
  2. window.onload = function(){
  3. document.getElementById('testButton').onclick = makeItRed;
  4. };
  5. functin makeItRed(){
  6. document.getElementById('zz').style.color = 'red';
  7. }
  8. </script>

위와 같은 형식으로 엘리먼트와 자바 스크립트 영역을 구분 지어 코딩하는 이것을 튀지 않는(unobtrusive) 자바 스크립트라고 한다.

이제 부턴 jQuery 와 함께~ 튀지 마세요~~~~^^;

  • jQuery 기초

jQuery에서 엘리먼트의 그룹을 찾기 위해 아래와 같은 방법을 사용한다.

  1.   $(selector)
      또는
      jQuery(selector)
      과 같은 방식으로 한다. 
$( ) 는 jQuery( ) 함수의 별칭으로 셀렉터와 일치하는 DOM 엘리먼트 배열을 가진 '특별한' 자바스크립트 객체를 반환한다. 이 객체는 미리 정의된 메서드를 여러개 보유하고 있는데 이를 이용해 선택된 엘리먼트 그룹에 많은 기능을 적용할 수 있다. 이런 형태의 구성 요소를 래퍼(Wrapper)라 한다. 이렇게 jQuery가 정의한 추가 메서드를 이용할 수 있는 엘리먼트 집합을 확장 집합(Wrapped Set)라고 부른다.

 

  • jQuery 는 위의 그림과 같은 역할을 합니다. 이미 jQuery는 많은 메서드를 보여하고 있습니다. 우리는 단지 $( ) 안에 엘리먼트를 넣어 jQuery의 모든 기능을 사용만 하는 것이다. 그렇게 되면 자바 스크립트의 코딩량이 상당히 줄어 들 것이다.
  • 맛보기 jQuery 예제를 보겠습니다. 아 그리고 $는 jQuery에 별칭 입니다.

url : http://gisung2.cafe24.com/jquery/study/sample1_1.jsp

 

소스를 보자면 아래와 같다! 놀라지 마세용^^;

  1.     <script type="text/javascript">
             $(function(){
                  alert("시작!");
                  $("table").fadeOut(2000).fadeIn(2000);
             });
        </script>

자바 스크립트 소스는 이게 전부이다. 정말 심플하다. 하지만 이건 시작에 불과하다. jQuery의 메소드와 jQuery의 강력한 셀렉터 가 합쳐지면 깜작 놀랄 일이 벌어질 것이다.

PS. 셀렉터 : 웹페이지를 컨트롤 하려면 먼저 어떤 엘리먼트를 컨트롤 할껀지 선택을 해야 한다. 바로 그거다. 엘리먼트를 선택하는 방법, 쉽고 편하게 선택하게 해주는 놈 그놈이 셀렉터다.  jQuery(셀렉터)  

  • $("table")               --페이지내 모든 table을 선택하여 jQuery Wrap로 감싸 반환한다.
  • $("div")                  --페이지내 모든 div를 선택하여 jQuery Wrap로 감싸 반환한다.
  • $("div#idName")     --페이지내 아이디가 idName 이라는 div를 jQuery Wrap로 감싸 반환한다.

셀렉터는 나중에 좀더 알아 보기로 하고 여기서는 맛만 봐주시길 바랍니다.

 

  • myList 란 클래스를 갖는 div를 fadeOut 보자

  1. $("div.myList").fadeOut(); 
  • jQuery 커맨드라고도 불리우는 메서드는 특별한 기능을 갖고 있습니다. 메서드 실행이 끝난 후 다른 동작을 할 수 있도록 동일한 엘리먼트그룹을 반환하는 것이다. 바로 위 코드에 removed라는 클래스를 추가로 적용하고 싶을 경우 아래와 같이 하면 된다.
  1. $("div.myList").fadeOut().addClass("removed");

위와 같은 방식을 jQuery 체인(chain)이라고 하고 체인은 무한대로 연결할 수 있다.  

  • html 코드 넣기
  1. $("<p>하이</p>");
  2. 위처럼 하면 html 안에 "하이"가 추가된다. 
  • 특정 엘리먼트에 html코드 넣기
  1. $("#someElement").html("가나다라마바사");
  2. or
  3. $("#someElement")[0].innerHTML("가나다라마바사");

html() 을 이용하여 엘리먼트에 문장을 삽입할 수 있다. 

  • 함수 확장과 엘리먼트 순회
  1. $.fn.disable = function(){
  2. return this.each(function() {
  3. if(typeof this.disabled != "undefined") this.disabled = true;
  4. });
  5. }

$.fn.disable 은 disable 메서드를 $()에 확장한다는 뜻이다.  .each()확장된 DOM 엘리먼트 집합에 속한 엘리먼트를 순회하는 메서드 이다. each() 메서드에 전달된 반복 함수 안에서 this는 현재 반복 시점의 DOM 엘리먼트를 향한 포인터다. 달랑 한두줄로 쓰여지는 이부분이 나중에 마법을 펼쳐 보일 것이다^^; 부디~

 

 
12

+ Recent posts