※ 표 컬러 코드 = #b3f2df
span 회색배경 = <span style="background-color: #eee; border-radius: 3px; padding: 0 3px;">
li 흰색스타일 = <li style="list-style-type: circle; text-indent: 10px;">
코드 배경 = https://colorscripter.com/
인용구 = <blockquote>
jQuery 초기화
<!DOCTYPE html> <html lang="ko"> <head> ... meta태그 설정 및 CSS 처리 ... </head> <body> ... HTML 태그 ... <!-- jQuery 참조 --> <!-- 실행시간의 이점 때문에 script 코드는 <body>태그 종료 직전 명시 --> <!-- 웹 브라우저의 캐시 기능을 활용하기 위해서 CDN방식으로 라이브러리 참조 --> <script src="http://code.jquery.com/jquery-3.2.1.min.js"></script> <!-- 개발자 작성 영역 --> <script type="text"/javascript"> /** 모든 곳에서 인식할 변수 및 함수 정의 영역 */ // HTML파일에서 직접 크립트 구현 // 외부 일로 작성 --> src 속성으로 참조 /** jQuery 구현 부분 */ $(function() { // 이 영역이 페이지 로딩이 완료된 후 실행된다. // body의 onload 이벤트 --> 프로그래밍 언어에서의 main() 의 역할. }); </script> </body> </html> |
HTML 요소 접근
HTML 요소를 jQuery 객체로 생성
var obj = $("CSS셀렉터"); |
- 대상 요소를 지정할 수 있는 CSS셀렉터를 사용한다.
- jQuery에서 사용한 CSS셀렉터가 반드시 <style> 태그에 정의되어 있어야 하는 것은 아니다.
- 혼란을 피하기 위해 CSS에서는 class형식으로만 셀렉터를 구성하고,
- jQuery에서는 가급적 id속성만으로 대상을 지정한다.
- CSS : TAG나 ID속성을 사용한 셀렉터 지양. 자손, 자식 셀렉터의 구성도 가급적 class속성만으로 구성.
- jQuery : 대부분의 경우 ID속성을 사용하지만 동시에 여러 개의 객체리르 제어해야 할 경우는 class속성도 사용.
HTML 요소 내의 내용 제어
html() 함수는 파라미터가 있을 경우 설정(setter), 파라미터가 없을 경우 리턴(getter)의 기능을 한다.
요소 안에 내용을 설정하기
$("#foo").html(설정할 내용); |
요소 안의 내용을 가져오기
var content = $("#foo").html(); |
JSON 표기법
Javascript에서 사용되는 자료의 나열 방법으로 이름(key)와 값(value)의 쌍으로 구성된다.
이름(key)에는 따옴표 사용이 자유롭다.
기본 정의 방법
var my_height = 176; var json = { name : 'JS학생', // 문자열은 따옴표 사용 age : 20, // 숫자형이나 boolean은 따옴표 사용 안함 height : my_height // 다른 변수를 값으로 사용도 가능함 }; // 값에 접근하기 console.log(json.name); console.log(json.age); console.log(json.height); |
배열데이터를 포함하는 경우
var lecture = { start : '2018-11-19', end : '2019-05-16', subject : ['html', 'css', 'javascript', 'android'] }; // 값에 접근하기 console.log(lecture.subject[0]); // html // 반복문으로 값에 접근하기 for (var i=0; i<lecture.subject.length; i++) { console.log(lecture.subject[i]); } |
JSON 끼리의 중첩
다른 JSON을 포함할 수 있다.
var address = { postcode : '12345', header : '서울시 강남구 역삼동', footer : '123-45' }; var member = { user_id : 'student', user_name : '학생', addr : address } // 값의 접근 console.log(member.addr.postcode); |
축약해서 표현한 경우
var member = { user_id : 'student', user_name : '학생', addr : { postcode : '12345', header : '서울시 강남구 역삼동', footer : '123-45' } } |
JSON이 배열에 들어가는 경우
var book1 = { subject : 'html입문', price : 32000 }; var book2 = { subject : 'CSS활용', price : 28000}; var book3 = { subject : 'jQuery실무', price : 47000}; var books = [ book1, book2, book3 ]; |
축약표현
var books = [ { subject : 'html입문', price : 32000 }, { subject : 'CSS활용', price : 28000 }, { subject : 'jQuery실무', price : 47000 } ]; |
JSON을 포함하는 배열이 다른 JSON에 들어가는 경우
var library = { name : '강남도서관', address : '서울시 강남구 ...', open : '오전 09시 00분', close : '오후 06시 00분', book_list : [ { subject : 'html입문', price : 32000 }, { subject : 'CSS활용', price : 28000 }, { subject : 'jQuery실무', price : 47000 }, ] }; |
JSON에 포함된 함수
Javascript에서는 변수에 함수를 참조시킬 수 있다.
var hello = function() { ... }; |
JSON은 key와 value의 쌍으로 이루어진 데이터 집함.(value=변수, 값)
var data = { foo : 123, bar : 456 }; |
즉, value에 function이 참조될 수 있다.
var data = { foo : 123, bar : function() { ... // 같은 json에 포함된 다른 변수나 함수에 // 접근할 경우에는 this를 사용해야 console.log(this.foo); } }; |
jQuery 이벤트 처리
- 웹 브라우저가 HTML요소를 인식한 후에 처리되어야 하므로 jQuery의 load 처리 안에서 정의한다.
- 이벤트는 함수 형태로 정의되어 있고, 해당 이벤트가 발생한 경우 호출될 함수를 콜백 파라미터로 전달한다.
- 콜백함수에는 이벤트의 정보를 갖는 e 객체가 전달된다.
- 필요한 경우 이 객체를 선언하고 활용할 수 있다.
- e.preventDefault()는 링크의 href 속성이나 폼의 submit 등에 대해서 HTML 요소가 수행해야 하는 기본 동작을 차단하는 역할을 한다.
// jQuery의 load처리 안에서 정의 $(function() { $('#foo').이벤트이름(function( [e] ) { [e.preventDefault();] }); }); |
마우스 관련
이벤트 |
기능 |
click |
요소를 클릭시에 동작한다. |
mouseenter |
어떤 요소의 영역 안에 마우스 커서가 들어간 경우 호출된다. |
mouseleave |
어떤 요소의 영역 안에 마우스 커서가 빠져나온 경우 호출된다. |
dblclick |
더블클릭 |
hover |
mouseenter + mouseleave |
키보드 관련
이벤트 |
기능 |
keydown |
버튼을 누르고 있는 동안 지속적으로 발생한다. |
keyup |
버튼을 눌렀다가 땐 순간 발생한다. 한글을 지원하므로 대부분의 키 처리시 사용 권장 |
keypress |
키보드를 눌렀다가 때는 동작을 1회로 처리한다. 한글인 경우 발생되지 않기 때문에 사용을 권장하지 않는다. |
keyCode
- 키보드에 부여된 일련번호
- 키 이벤트 발생 시, 이벤트 객체를 통해 전달된다.
- 이 값을 사용하여 특정 버튼이 눌러진 경우를 판별할 수 있다.
$(function() { $('#foo').keyup(function(e) { if(e.keyCode == 13) { ... 엔터키가 눌러진 경우의 처리 ... } }); }); |
요소의 크기 조회
width(), height() 함수의 사용
특정 요소의 크기
var w = $('#foo').width(); var h = $('#foo').height(); |
웹 페이지 전체의 크기
var w = $(document).width(); var h = $(document).height(); |
브라우저의 크기
var w = $(window).width(); var h = $(window).height(); |
스크롤바의 위치
var top = $(window).scrollTop(); |
반응형 기능
브라우저 크기에 반응하여 동작하는 함수를 정의하고 브라우저가 열린 직후와 창 크기가 변경될 때 동작하도록 호출한다.
function responsive() { // 현재 창의 넓이 var w = $(window).width(); if ( w >= ? ) { ... 반응형 기능 구현 ... } } $(function() { // 브라우저가 열린 직후 responsive(); $(window).resize(function() { // 창 크기가 변경될 경우 responsive(); }); }); |
인피니티 스크롤
// jQuery의 load처리 안에서 의 $(function() { $(window).scroll(function() { // iPhone $(window).scrollTop() + $(window).height() >= $(document).height() // $(window).scrollTop() + $(window).height() == $(document).height() -15 // -15는 브라우저 하단 공간차지하는 부분 까지 계산한 것임 if ( $(window).scrollTop() + $(window).height() == $(document).height() ) { ... 스크롤이 맨 밑에 도착한 경우의 처리 ... } }); }); |
요소의 판별
index() 함수
특정 요소가 부모 태그 안에서 갖는 인덱스번호를 리턴하는 함수 (0부터 시작함)
<div> <a href="#">...</a> <div id="hello"></div> <p class="memo"></p> </div> <script> // 부모 <div>를 기준으로 2번째 요소이므로 인덱스 1이 리턴된다. var idx = $('#hello').index(); </script> |
$(this)
복수 요소에 대한 이벤트에 전달된 콜백함수 안에서 이벤트가 발생한 주체를 의미하는 객체
<button class='btn'>button1</button> <button class='btn'>button2</button> <button class='btn'>button3</button> <script> // `btn`이라는 클래스를 갖는 모든 요소에 대해서 일괄적으로 적용되는 이벤트 $('.btn').click(function() { // 버튼은 한번에 하나씩만 누를 수 있다. // 이 안에서 $(this)는 클릭된 주체를 의미한다. }); </script> |
HTML 요소의 속성 제어
특정 요소에 적용되어 있는 속성값 조회하기
var foo = $('#bar').attr('속성이름'); |
특정 요소의 적용하기
개별적용
$('#bar').attr('속성이름', '값'); |
일괄적용 (json형태 사용)
$('#bar').attr({ '속성이름' : '값', '속성이름' : '값', '속성이름' : '값', ... }); |
속성이름에 공백이나 - 기호가 포함된 경우는 반드시 따옴표 적용.
그 외에는 따옴표 처리가 필수는 아님
data-* 속성
data-000 형태로 개발자가 필요에 따라 직접 정의하는 속성.
JAVASCRIPT에서 사용할 변수값을 숨겨놓기 위한 목적으로 사용한다.
<div id="foo" data-hello="안녕하세요" data-world="jQuery"> ... </div> |
data 속성값 조회하기
var foo = $('#bar').data('hello'); |
data 속성값 적용 / 변경하기
$('#bar').data('hello', '반갑습니다'); |
HTML 요소의 CSS 속성 제어
특정 요소에 적용되어 있는 속성값 조회하기
var foo = $('#bar').css('속성이름'); |
특정 요소의 적용하기
개별적용
$('#bar').css('속성이름', '값'); |
일괄적용 (json 형태 사용)
$('#bar').css({ 속성이름 : '값', 속성이름 : '값', 속성이름 : '값' ... }); |
만약 css 속성이름에 "-"가 있을 경우 속성이름을 반드시 따옴표 처리해야 함.
HTML 요소의 CSS 클래스 제어
CSS 클래스 적용여부 검사
var foo = $('#bar').hasClass('클래스이름'); // true, false |
CSS 클래스 적용
$('#bar').addClass('클래스이름 클래스이름 ...'); |
CSS 클래스 삭제
$('#bar').removeClass('클래스이름 클래스이름 ...'); |
두 개 이상의 클래스를 삭제하고자 하는 경우 공백으로 구분.
CSS 클래스 적용/삭제 자동 반복
$('#bar').toggleClass('클래스이름 클래스이름 ...'); |
두 개 이상의 클래스를 처리하고자 하는 경우 공백으로 구분.
not()
- 복수 요소를 지정하고 있는 jQuery 객체 중에서 특정 요소를 제외한 항목들을 지정하는 기능.
this와 함께 하용하는 경우
$('.btn').click(function() { // '.btn'중에서 클릭된 요소 $(this) // '.btn'중에서 클릭되지 않은 나머지 요소()들 $('.btn').not(this) }); |
jQuery 객체를 사용하여 not() 함수 사용
'.btn' 중에서 id값이 '#hello'인 요소 제외
$('.btn').not($('#hello')) |
'.btn' 중에서 3번째 요소만 제외
$('.btn').not($('.btn:nth-child(3)')) // 1부터 카운트 $('.btn').not($('.btn:eq(2)')) // 0부터 카운트 |
css 셀렉터를 사용하여 not() 함수 사용
'.btn' 중에서 id값이 '#hello'인 요소 제외
$('.btn').not('#hello') |
'.btn' 중에서 3번째 요소만 제외
$('.btn').not('.btn:nth-child(3)') // 1부터 카운트 $('.btn').not('.btn:eq(2)') // 0부터 카운트 |
요소의 탐색
메서드 체인
하나의 jQuery 요소에 대하여 메서드를 연속적으로 호출하는 기법.
특별한 경우가 아닌 이상 jQuery()의 함수들은 객체 자신을 리턴한다.
$('#foo').attr(key, value) .css(key, value) .addClass(cls) .click(function() {}); |
주변 요소 탐색하기
함수 |
설명 |
prev() |
이전 요소를 리턴한다. |
next() |
다음 요소를 리턴한다. |
parent() |
상위 요소를 리턴한다. |
children(0) |
하위 요소를 리턴한다. |
eq(n) |
n번째 요소를 리턴한다. |
부모 요소 얻기
주어진 셀렉터를 갖는 가장 인접한 부모 요소를 리턴한다.
$('#foo').parents('셀렉터'); |
자식 요소 얻기
주어진 셀렉터를 갖는 가장 인접한 자식 요소를 리턴한다.
$('#foo').find('셀렉터'); |
요소의 동적 생성
<body> 태그 안에 명시된 태그 요소를 객체화 하는 경우
태그 이름을 $() 함수에 전달한다.
var obj = $('div'); |
<body> 태그 안에 명시되지 않은 태그 요소를 객체화 하는 경우
태그 이름을 <>로 감싸서 $() 함수에 전달한다.
var obj = $('<div>'); |
이렇게 생성된 요소들은 jQuery의 기능들을 적용할 수 있다.
var obj = $('<div>'); obj.attr('id', 'hello').css(...).addClass('item'); |
기존에 존재하는 요소를 복사하는 경우
var obj = $('#foo').clone(); obj.attr('id', 'hello'); |
모든 속성을 동일하게 복사하므로 id속성값 같은 경우(중복되면 안되니까)는
다른 값으로 변경해 줘야 한다.
동적으로 생성된 요소를 HTML 문서에 삽입하기
함수 |
설명 |
A.html(B) |
A의 시작태그와 끝태그 사이의 내용을 B로 대체한다. |
A.append(B) |
A에 B를 추가한다. 기존의 내용을 유지하면서 맨 뒤에 추가한다. |
B.appendTo(A) |
B를 A에 추가한다. 기존의 내용을 유지하면서 맨 뒤에 추가한다. |
A.prepend(B) |
A에 B를 추가한다. 기존의 내용을 유지하면서 맨 앞에 추가한다. |
B.prependTo(A) |
B를 A에 추가한다. 기존의 내용을 유지하면서 맨 앞에 추가한다. |
A.insertBefore(B) |
A를 B의 직전에 삽입한다. |
A.insertAfter(B) |
A를 B의 직후에 삽입한다. |
A.empty() |
A의 모든 내용을 비운다. |
요소의 숨김, 표시 처리
함수 |
설명 |
show([time, [function]]) |
요소를 표시한다. |
hide([time, [function]]) |
요소를 숨긴다. |
toggle([time, [function]]) |
요소의 숨김과 표시를 자동 반복한다. |
fadeIn([time, [function]]) |
페이드 효과를 적용하여 요소를 표시한다. |
fadeOut([time, [function]]) |
페이드 효과를 적용하여 요소를 숨긴다. |
fadeToggle([time, [function]]) |
페이드 효과를 적용하여 요소의 숨김과 표시를 자동 반복한다. |
slideDown([time, [function]]) |
요소를 아래로 펼쳐서 표시한다. |
slideUp([time, [function]]) |
요소를 위로 접어서 요소를 숨긴다. |
slideToggle([time, [function]]) |
요소를 위, 아래로 접고 펼치는 효과를 사용하여 숨김과 표시를 자동 반복 한다. |
- 시간값은 1/1000초 단위로 지정한다.
- 두 번째 파라미터인 콜백함수는 처리가 완료된 후 호출된다.
동적으로 생성된 요소에 대한 이벤트 적용
기존의 이벤트 처리는 생성한 객체에 적용한다는 개념이지만,
동적 요소에 대한 이벤트 처리는 앞으로 생성될 객체에 적용할 이벤트를
미리 준비해 둔다는 개념이다.
$(document).on("click", "#hello", function(e) { e.preventDefault(); ... }); |
주의 : 동적 생성 요소가 <form>인 경우에은 e 객체를 사용해서는 안된다.
HTML 요소의 위치 변경
append(), prepend(), insertBefore(), insertAfter() 함수 등을 동적 요소가 아닌
기존에 존재하는 HTML 요소끼리 사용하면 서로 위치를 바꿀 수 있다.
<div id="foo"></div> <div id="bar"></div> <script> // #foo의 위치가 #bar 다음으로 이동하게 된다. $("#foo").insertAfter("#bar"); </script> |
입력 요소 값 가져오기
값 설정하기
$("셀렉터").val("내용"); |
값 읽어오기
text, select(드롭다운)
var input = $("셀렉터").val(); |
드롭다운요소의 경우 사용하지 않는 <option> 태그라 하더라도 value 속성값을 부여해야 한다.
<select name="foo"> <option value="">--- 선택하세요 ---</option> <option value="bar">item 1</option> </select> |
라디오 버튼의 경우
- 셀렉터가 여러개를 의미하는 경우이므로 그 중에서 선택된 항목만 지정하는 셀렉터를 사용해야 한다.
- 라디오는 하나만 선택 가능하므로 가져온 결과 자체는 단일 값이다.
var input = $("셀렉터:checked").val(); |
체크박스의 경우
- checked 가상클래스를 통해 가져온 대상이 배열 상태가 되므로 이를 반복문으로 처리해야 한다.
- 배열의 요소는 선택된 체크박스들에 대한 HTMl 태그가 된다.
- 그러므로 각 HTMl 태그를 다시 jQuery 객체로 변환하여 사용해야 한다.
var input = $("셀렉터:checked"); for (var i=0; i<input.length; i++) { // 배열에 포함된 원소(HTML태그)를 jQuery 객체로 변환 var tmp = $(input[i]); ... } |
포커스 강제 지정
$("셀렉터").focus(); |
입력 요소 제어
$.each() 함수
- 배열을 탐색하는 jQuery 기능.
var data = ["hello", "world"]; // 배열을 탐색하면서 원소의 수 만큼 콜백함수가 호출된다. $.each(data, function(index, item) { // index는 순차적으로 0, 1 // item은 순차적으로 "hello", "world" }); |
- 배열의 원소가 HTML 객체인 경우 jQuery 객체로 변환하여 사용해야 한다. ex) 체크박스
var data = ["<input type='checkbox'/>", "<input type='checkbox'/>"]; // 배열을 탐색하면서 원소의 수 만큼 콜백함수가 호출된다. $.each(data, function(index, item) { // $(item) 형태로 객체를 생성하여 처리 가능. }); |
- 원래의 목적은 객체를 탐색하는 기능.
var data = {name: "hello", userid: "world", age: 20}; $.each(data, function(index, item) { console.log(index + " >> " + item); }); |
입력요소 관련 submit 이외의 이벤트
포커스가 들어온 경우
$("셀렉터").focus(function( [e] ) { ... }); |
포커스가 빠져나간 경우
$("셀렉터").blur(function( [e] ) { ... }); |
상태가 변경된 경우
change 이벤트는 주로 라디오, 체크박스, 드롭다운에 대하여 활용도가 높다.
$("셀렉터").change(function( [e] ) { ... }); |
텍스트를 입력하는 요소일 경우
- 내용이 변경되고 포커스가 빠져 나올 때 이벤트가 발생한다.
체크박스나 라디오 버튼의 경우
- 선택 상태가 변경된 즉시 발생한다.
드롭다운의 경우
- 선택 상태가 변경된 즉시 발생한다.
프로퍼티 설정
- HTML 태그에서 값을 갖지 않는 속성 : property
- 값을 갖는 속성 : attribute
프로퍼티의 적용 여부 조회
특정 프로퍼티의 적용 여부를 boolean 값으로 조회한다.
(checked, disabled, selected 등)
var is = $("셀렉터").prop("프로퍼티 이름"); |
ex) 체크박스의 checked 속성이 적용되어 있는지 여부 확인
<input type="checkbox" class="foo" disabled /> |
// 속성이 적용되어 있으므로 true var ok = $(".foo").prop("disabled"); |
프로퍼티의 설정 / 해제
prop 함수에 두 번째 파라미터로 boolean 값을 전달하면 프로퍼티를 강제로 설정하거나 해제할 수 있다.
$(".foo").prop("disabled", true|false); |
정규표현식
- 문자열의 형식을 검사하기 위한 정형화된 식.
- 모든 프로그래밍 언어에서 공통적으로 사용한다.
Javascript에서 정규표현식 사용
var regex = /정규표현식/; if (!regex.test("검사할 문자열")) { // ... 정규표현석에 부합하지 않을 우의 처리 ... } |
주요 정규표현식
숫자 모양에 대한 형식 검사
/^[0-9]*$/ |
영문으로만 구성되었는지에 대한 형식 검사
/^[a-zA-Z]*$/ |
한글로만 구성되었는지에 대한 형식 검사
/^[ㄱ-ㅎ가-힣]*$/ |
영문과 숫자로만 구성되었는지에 대한 형식 검사
/^[a-zA-Z0-9]*$/ |
한글과 숫자로만 구성되었는지에 대한 형식 검사
/^[ㄱ-ㅎ가-힣0-9]*$/ |
이메일 형식인지에 대한 검사. 아이디@도메인의 형식을 충족해야 한다.
/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i |
'-'없이 핸드폰번호인지에 대한 형식검사.
/^01(?:0|1|[6-9])(?:\d{3}|\d{4})\d{4}$/ |
'-'없이 전화번호인지에 대한 형식검사. 각 부분에 대한 자리수도 충족시켜야 한다.
/^\d{2,3}\d{3,4}\d{4}$/ |
'-'없이 주민번호에 대한 글자수 및 뒷자리 첫글자가 1~4의 범위에 있는지에 대한 검사
/^\d{6}[1-4]\d{6} |
'Frontend > jQuery' 카테고리의 다른 글
input 실시간 감지 (0) | 2019.06.23 |
---|---|
CKEDITOR 포커스, 내용길이, 내용초기화, 사이즈조절 (0) | 2019.03.06 |
하루 전 날짜 계산 (0) | 2019.02.20 |
클립보드에 복사하기 (0) | 2019.02.20 |
html & remove 차이점 (0) | 2019.02.11 |