Javascript VS jQuery

Javscript API에 비해 jQuery는 선택자를 사용하여 DOM(Document Object Model) 요소에 쉽고 편리하게 접근할 수 있다.

// Javascript
document.getElementById('container');
document.querySelector('#container');

// jQuery
$('#container')

 

아래는 기초적인 선택자만 작성하였으므로 모든 선택자를 확인하려면 jQuery 사이트 참조

 

 

직접 선택자

아이디 (#) 

id는 페이지내에서 유일해야한다.

// Html
<div id="container">
    <div class="nav"></div>
</div>
 
// jQuery
$('#container')

 

클래스 (.)

동일한 클래스를 가진 복수의 요소가 될 수 있다.

// Html
<div class="box">
    <div class="items">
    <div class="items">
</div>
 
// jQuery
$('.box')
$('.items') // 복수의 요소가 됨

 

태그

동일한 태그를 가진 복수의 요소가 될 수 있다.

// Html
<div id="container"></div>
<div class="footer">
    <a href=".."></a>
</div>
 
// jQuery
$('div') // 복수의 요소가 됨
$('a')

 

속성 ([])

동일한 태그의 속성에 접근 할 경우 복수의 요소가 될 수 있다.

// Html
<div data-type="number">
    <a href="./main/index.html"></a>
</div>
 
// jQuery
$('a[href]')
$('div[data-type]')

 

속성 일치 (=)

// Html
<form>
    <input type="tel" name="phoneNumber">
    <input type="text" data-type="desc">
</form>
 
// jQuery
$('input[name="phoneNumber"]')
$('input[data-type"desc"]')

 

속성 불일치 (!)

// Html
<form>
    <input type="tel" name="phoneNumber">
</form>
 
// jQuery
$('input[name!="phoneNumber"]')

 

속성 선택 값으로 시작 (^)

// Html
<form>
    <input type="tel" name="phoneNumber">
</form>
 
// jQuery
$('input[name^="phone"]')

 

속성 선택 값으로 종료 ($)

// Html 
<form> 
    <input type="tel" name="phoneNumber"> 
    <input type="tel" name="userNumber"> 
</form> 
  
// jQuery 
$('input[name$="Number"]')

 

속성 선택 값과 일치하거나 선택 값 뒤에 '-'를 붙여 시작하는 값 (|)

// Html
<form>
    <input type="tel" name="phone-number">
    <input type="tel" name="phone-type">
</form>
 
// jQuery
$('input[name|="phone"]') // 복수의 요소가 됨

 

속성 선택 값을 포함하고 있음 (*)

// Html
<img src="./assets/image/@sample.png">
<img src="../@today.png">
 
// jQuery
$('img[src*="@"]') // 복수의 요소가 됨

 

속성 선택 값 중에 일치하는 단어가 있음 (~)

// Html
<div class="header nav"></div>
<div class="footer nav last_container"></div>
 
// jQuery
$('div[class~="nav"]') // 복수의 요소가 됨

 

복수 속성

// Html
<input type="text" data-value="C0808" name="userID">
<input type="text" data-value="C0824" name="userID">
 
// jQuery
$('input[data-value][name="userID"]') // 복수의 요소가 됨

 

 

인접관계 

선택자자식 선택자 (>)

// Html
<div id="header">
    <div>
        <ul>
            <li></li>
            <li></li>
        </ul>
    </div>
</div>
 
// jQuery
$('#header > div')
$('ul > li') // 복수의 요소가 됨

 

자식, 후손 선택자

해당하는 태그 아래 일치하는 모든 태그

// Html
<div id="header">
    <div>
        <div>
            <div></div>
        </div>
    </div>
</div>
 
// jQuery
$('#header div') // 복수의 요소가 됨

 

형제자매 선택자 (+, ~)

선택자 + 선택자 : 다음에 오는 하나의 태그

선택자 ~ 선택자 : 형제 자매 중 일치하는 모든 것

// Html
<div>
    <div class="box"></div>
    <div></div>
    <div></div>
</div>
 
// jQuery
$('.box + div')
$('.box ~ div') // 복수의 요소가 됨

 

가상선택자(pseudo selector) (:)

input type

// Html
<input type="input">
<input type="button">
<input type="image">
<input type="radio">
<input type="checkbox">
 
// jQuery
$(':input')
$(':button')
$(':image')
$(':radio')
$(':checkbox')

 

순서(형제, 자매, 부모)

구문

$(':odd') // 홀수 (index의 시작 = 0)
$('.box > :even') // 짝수 (index의 시작 = 0)
$(':gt(인덱스)') // 해당하는 인덱스 초과 (index의 시작 = 0)
$(':lt(인덱스)') // 해당하는 인덱스 미만 (index의 시작 = 0)
$(':eq(인덱스)') // 해당 인덱스에 맞는 번째 (index의 시작 = 0)
$(':first') // 선택자를 기준으로 첫번째
$(':last') // 선택자를 기준으로 마지막
$(':first-child') // 첫번째*
$(':last-child') // 마지막*
$(':nth-child(인덱스)') // 해당 인덱스에 맞는 번째* (index의 시작 = 1)
$(':nth-of-type(인덱스)') // 해당 인덱스에 맞는 번째 (index의 시작 = 1)

*표시는 형제, 자매 태그들이 순서 기준에 영향을 줌을 뜻하므로 예제 참고

 

예제

// Html
<div class="box">
    <div>
        1번
        <div>1-1번</div>
        <div>1-2번</div>
    </div>   
    <p>p다</p>
    <div>2번</div>
    <div>
        3번
        <div>3-1번</div>
        <div>3-2번</div>
    </div>
</div>
 
// jQuery
$('.box > div:odd') // 2번
$('.box > div:even') // 1번, 3번
$('.box > div:gt(1)') // 3번
$('.box > div:lt(1)') // 1번
$('.box div:eq(1)') // 1-1번
$('.box > div:eq(1)') // 2번
 
$('.box div:first') // 1번
$('.box div:last') // 3-2번
 
$('.box > div:first-child') // 1번
$('.box div:first-child') // 1번, 1-1번, 3-1번
 
$('.box > div:last-child') // 3번
$('.box div:last-child') // 1-2번, 3번, 3-2번
 
$('.box div:nth-child(1)') // 1번, 1-1번, 3-1번
$('.box div:nth-child(2)') // 1-2번, 3-2번
$('.box div:nth-child(3)') // 2번
 
$('.box div:nth-of-type(1)') // 1번, 1-1번, 3-1번
$('.box div:nth-of-type(2)') // 1-2번, 2번, 3-2번
$('.box div:nth-of-type(3)') // 3번

 

그외

// jQuery
$(':selected') // select박스 선택
$(':checked') // check박스 선택
 
$(':has(선택자)')
$(':contains(텍스트)')
 
$(':focus') // 포커스
$(':visible') // 투명상태가 아닌
$(':enabled') $(':disabled') // 활성화, 비활성화
$(':hidden') // 감춰진 상태

 

조합 예시

$('#header ul[class~="nav"] li')
$('.box .items > button:focus')
$('.box + .box')
$('section#container > .slide:nth-of-type(3)')

 

Load 이벤트

  • DOM(Document Object Model)의 Standard 이벤트

  • 화면에 필요한 모든 요소화면에 필요한 모든 요소(*Html, Css, Js, Image, Iframe등)가 브라우저 메모리에 올라간 경우 실행된다. 

  • 요소에 문제가 생길 경우 딜레이가 발생할 수 있다.

  • 중복 선언 시 하나만 실행되므로 주의해야한다.

$(window).load(function(){
	// 코드 작성
});

 

 

Ready 이벤트

  • 리소스 상관없이 브라우저가 DOM Tree를 생성한 직후에 실행된다.

  • load 이벤트보다 빨리 실행되며 중복 선언이 가능하며 선언 순서에 따라 실행된다.

$(document).ready(function(){
	// 코드 작성
});

 

 

Load VS Ready

두 이벤트의 차이를 이해하기 위해서 브라우저의 흐름을 알아보자

 

전체 흐름

 

 

[사용자 페이지 접속]

→ HTML 파일 서버로부터 전달 받음 


→ HTML 파싱 후 DOM(Document Object Model) Tree 생성

 

DOM Tree

 

 

→ CSS 파싱 후 Style Rules 생성

Style Rules

 

 

→  DOM Tree, Style Rules 결합 Render Tree 생성

DOM Tree + Style Rules = Render Tree

 

 

→ [사용자 페이지 확인]

 

 

간단하게 흐름 확인

사용자 방문

브라우저 시작

문서 파싱

DOM 생성(Ready 실행)

리소스 로드

페이지 로딩 완료(Load 실행)

 

load 이벤트,  ready 이벤트 차이는 '호출시점'의 차이 (ready → load 순)

 

*window > document

document 객체는 window 객체의 자식객체이며 html의 요소들이나 속성에 접근할 때 사용한다.

 

Shorhand(줄여쓰기)

$(function(){
	// 코드 작성
});

 

참조링크

릴리즈 정보

업그레이드 가이드

 

호환성

Browser jQuery
IE 6~8 jQuery 1.x
IE 9+ jQuery 2.x
Android 4.x jQuery 3.x
Android 4.5+
Safari on IOS 7+
jQuery 3.x

 

 

구버전과 최신버전 혼용

jQuery Migrate Plugin

jQuery 하위 버전 호환성을 위해 제공하는 플러그인

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="https://code.jquery.com/jquery-migrate-3.3.0.min.js"></script>

v1.4.1 : jQuery 1.9 이하의 버전을 3.0 버전까지 지원

v3.3.0 : jQuery 1.x버전, 1.9 이상의 버전을 3.0 버전까지 지원

 

정의

HTML의 클라이언트 사이드 조작을 단순화 하도록 설계된 크로스 플랫폼의 자바스크립트 라이브러리로

MIT 라이선스로 배포되는 무료 오픈소스 소프트웨어이다.

 

역사

Ajax 기술이 주목받기 시작하면서 자바스크립트의 중요성이 높아졌고 자바스크립트 라이브러리들이 생기기 시작했다.

jQuery도 그 중 하나였으며 단순하고 간결한 코드를 통해 DOM(Document Object Model)을 추상화해서 관리할 수 있기 때문에 선풍적인 인기를 끌었다.

 

사용법

파일 설명

  • uncompressed : 원본 파일 (확장자 : .js)

  • minified : 원본을 압축한 파일 (확장자 : .min.js)

  • slim : 해당 버전에서 필요없다고 생각하는 라이브러리를 제거한 파일 (.slim.js)

  • slim minified : slim 파일을 압축한 파일(.slim.min.js)

 

CDN

사이트에서 원하는 버전을 클릭하여 url 주소 입력하는 방식이다.

<script src="https://code.jquery.com/jquery-3.x-git.min.js"></script>

ㄴ CDN이란?

  • 콘텐츠 전송 네트워크(Content delivery network / content distribution network)로 지리적으로 분산되어 있는 서버 네트워크이다.
  • 가까운 서버를 찾아 서비스를 제공해주며 jQuery에서 제공하는 CDN 서버를 이용하게된다.

ㄴ CDN 사용을 지양하는 이유?

  • 서버 장애나 문제가 발생할 경우 멀리 있는 서버를 이용하게될 수도 있으며 이 경우는 속도 저하등의 원인으로 사용자경험이 저하될 수 있다.

  • 서버 문제로 서비스를 이용하지 못할수도 있다.

 

다운로드

사이트에서 다운로드한 파일을 원하는 경로에 두고 경로를 입력하는 방식이다.

<script src="../js/jquery.min.js"></script>

 

 

+ Recent posts