jQuery를 배워보자

sanghun Lee·2020년 12월 1일
0

Today I Learned

목록 보기
57/66

회사 레거시 관리를 위해 배워야 하는 친구다.

jQuery?

오래된 친구이나 한 때 시대를 풍미한 친구이다
기존 vanila javascript의 엘리먼트 선택보다 간결한 방식
효과적 제어, 간략한 문법 등이 장점이 될 수 있다.

요즘은 SPA의 등장으로 인해 virtual DOM을 통한 제어가 자동으로 되어 렌더 횟수를 걱정하지 않고 짜게 되는 편리함이 있으나 ..

개발자라면 효율적으로 짜는 방법을 알아야하니 공부하며 로직을 좀 발전시키면 좋을 것 같다.

회사레거시관리가 아니었다면 과연 공부했을까

jQuery vs SPA(React, Vue...)

jQuery를 연결(?)해보자

  • 직접 서비스 하는 경우에는 하단의 링크를 통해 소스코드를 다운로드 한다.

    	http://jquery.org 에서 jquery 소스코드를 다운로드 한다.
    
    	위의 파일을 서버에 업로드 한 후 웹페이지 안에서 자바스크립트를 삽입한다.
  • 구글의 자바스크립트 라이브러리를 사용하는 경우에는 하단 링크를 script태그의 src 속성에 넣어주면 된다

난 ~~귀찮으니 ~~이 방법이 좋다

http://code.google.com/intl/ko-KR/apis/libraries/devguide.html#jquery

jQuery 기본문법

  • 출처: 생활코딩
<body>
    <div class="welcome"></div>
    <div id="welcome2"></div>
    <script
      type="text/javascript"
      src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"
    ></script>
    <script type="text/javascript">
      $(".welcome")
        .html("hello world! ")
        .css("background-color", "yellow")
        .css("color", "red");
      $("#welcome2")
        .html("whatsup")
        .css("color", "blue")
        .css("width", "100vw")
        .css("background-color", "red")
        .css("height", "100vh");

이런식으로 작성해볼 수 있다.

보는 것과 같이 메서드가 return 될때 메서드가 제어했던 대상을 리턴해주는것이 제이쿼리의 특징이다.

그래서 dotchaining이 가능하다

wrapper

$ 엘리먼트는 제이쿼리에서만 사용하는 것이 아니므로 $(엘리먼트)와 jquery(엘리먼트)는 같은의미이나 다른 라이브러리에서 충돌이 될 수 있기 때문에
아래와 같은 두가지 방법을 사용하기도 한다

jQuery()

<script type ="text/javascript">
jQuery('body').html('hello world!');
</script>

function($)

(fucntion($){
	$('body').html('hello world');
})(jQuery)

선택자

  • 엘리먼트 선택자
    $('input'), $('div') 등으로 엘리먼트에 직접 선택을 가하는 방법
  • css 선택자
    $('#jquery), $('.jquery')등으로 아이디나 클래스명을 통해 선택을 하는 방법

  • 다양한 선택자

    • $('#jquery li'):eq(2)
      아이디가 제이쿼리인 엘리먼트의 하위 엘리먼트 li중 2번째 인덱스를 말하게 됨
    • $('#jquery li'):gt(2)
      greaterthan의 약자로 인자보다 인덱스가 큰 엘리먼트를 찾아내는 선택자
    • $('#jquery li'):even
      홀 수 인덱스 값을 가진 엘리먼트 선택자
    • $('#jquery li'):even
      짝수 인덱스를 가진 엘리먼트 선택자
    • $('#jquery li'):first
      첫번째 인덱스 엘리먼트에 대한 선택자
    • $('#jquey li'):last
      마지막 인덱스 엘리멘트에 대한 선택자
      ...
      참고링크: 생활코딩

다양한 선택자가 있으니 공식문서를 통해 활용해보면 좋을 것 같다.
https://api.jquery.com/category/selectors/

  • 간단정리
    • $()를 통해서 엘리먼트,아이디&클래스를 제어할 대상을 가져올 수 있음
    • 메서드의 return은 제어대상이 되므로 체이닝 가능
    • 그래서 제어대상을 주어, 메서드를 서술어라고 함.
    • SPA의 state를 통한 제어(mvc모델 지향) vs DOM에 직접 연결된 제어=> SPA의 state를 통한제어로 데이터흐름 복잡도를 줄일 수 있음 + virtual DOM을 통한 DOM직접 변경을 지양하게 되므로 렌더링횟수를 효과적으로 줄일 수 있음
      => Logic 퀄리티에 대한 이해도나 구성이 약해질 수 있음(SPA)
      => 우회적인 방법을 많이 써야함(ex, ref...)(SPA)

Chain

jQuery 메소드들이 반환값으로 자기 자신(엘리먼트)를 반환해야한다는 규칙이 있는 것을 활용하여 체이닝을 하는 것을 말한다.

  • 코드가 간결해지고 사고과정이 자연스러워진다
  • traversing(탐색)을 통해 chain의 대상을 바꿔 계속 연장시킬 수 있다.
  • 복잡한 Chaning을 사용한다면 가독성이 떨어진다.

Ex) href 속성의 값 변경, target 속성의 값 변경, css를 이용한 글자색상 변경

<body>
  <a id = "tutorial" href ="http://www.naver.com target ="_self">jQuery</a>
</body>
<script type = "text/javascript">
  jQuery('#tutorial').attr('href', 'http://jquery.org').attr('target','_blank').css('color','red');
</script>

ajax

Asynchronous JavaScript and XML 의 약자이다
XML은 ..나는 모든 프로젝트를 Json으로 진행했기에 안면이 없는 친구이다.
비동기란 하나의 코드텍스트가 완료되기 전에 다음 코드텍스트로 넘어가는 것으로 동시적 처리를 한다고 간략하게 생각하자

제이쿼리에서 ajax는 아래의 틀이다.

data : 서버에 전송할 데이터, key/value 형식의 객체 ex) {"jQuery": 'data1'}
dataType : 서버가 리턴하는 데이터 타입 (xml, json, script, html)
type : 서버로 전송하는 데이터의 타입 (POST, GET)
url : 데이터를 전송할 URL
success : ajax통신에 성공했을 때 호출될 이벤트 핸들러

직접 접하게 되는 일이 생기면 조금 더 정리를 해보겠다.

아래와 같은 방식으로 사용된다
-> 클릭이벤트를 통해 POST 메서드로 데이터 넘김

            $('#getResult').click( function() {
                $('#result').html('');
                $.ajax({
                    url:'http://opentutorials.org/example/jquery/example.jquery.ajax.php',
                    dataType:'json',
                    type:'POST',
                    data:{'msg':$('#msg').val()},
                    success:function(result){
                        if(result['result']==true){
                          $('#result').html(result['msg']);
                        }
                    }
                });
            })

재빠른 공부를 위해 간략한 샘플페이지를 만들어 볼 예정이다

간단한 CRUD by jQuery

길게 설명할만큼 대단한 코드가 아니다 :)

jquery에서는 remove()와 같은 재미진 API를 많이 지원해주기 때문에 무엇인가를 직접 선택하기 위해 특정 boolean값을 넣거나 id를 만들어 토글하거나 등의 행위를 최소화 할 수 있는 것 같다.

예전에 vanila Js를 통해 인스타그램을 클론할 때 for 문을 돌며 해당하는 index의 것을 잡아내기 위해 querySelectorAll을 썻던 기억이 새록새록 나는 공부였다.

레거시를 공부하게 된다면 추가적으로 알게된 정보를 기입해 봐야겠다.

profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글

관련 채용 정보