이벤트
e.preventDefault() - 대상을 클릭했을때 발생하는 이벤트를 방지(링크 이동 등등 막기)
$(this) - 현재 이벤트가 적용된 개체 (DOM)
.ready(fn); - 페이지 로딩시 fn 실행
.click(fn); - 클릭시 fn 실행
.one(fn); - 딱한번만 이벤트가 실행되고 해제됨
.dblclick(fn) - 더블클릭시 fn실행
.blur(fn) - 포커스를 잃었을때 fn실행
.focus(fn) - 포커스를 얻었을때 fn실행
.toggle(fn1,fn2); - 클릭시 fn1 과 fn2을 번갈아 실행
.scroll(fn) - window 창에서 scroll 이벤트가 발생할때마다 콜백함수 fn 을 실행
.change(fn) - 대상이 바뀌는 지 감지하여 fn을 실행
.keyUp(fn) - 키를 땔때 fn 실행
.keydown(fn) - 키를 누를때fn실행
.keypress(fn) - 연속으로 빨리 keydown이 일어날때 fn실행
.bind({click:fn(){}, mouseover:fn(){}, mouseout:fn(){}}); - 대상에 동적으로 이벤트 바인딩, 이벤트 핸들러 다중 바인딩 가능
.unbind("event") - event 해제
.focusin(fn); - 포커스가 들어왓을때 fn 실행
.focusout(fn); - 포커스가 나갓을때 fn 실행
.select(fn) - 텍스트 필드에서 텍스트를 선택했을때 fn실행
.submit(fn) - 폼제출시 fn실행
.mousedown(fn) - 마우스 버튼를 누를때
.mouseup(fn) - 마우는 버튼을 눌렀다가 땔때
.hover(fn1,fn2) - 마우스오버시 fn1,마우스아웃시 fn2 실행
메소드
.show(시간);
.hide(시간);
.slideUp(시간); - 보이기
.slideDown(시간); - 숨기기
.slideToggle(시간) - 보이고 안보이게 하기
.scrollTop(); - 현재 스크롤바의 위치값
.next(); 다음대상
.prev(); 전 대상
.stop(); - 보통 animate정지에 쓰임
.animate(매개변수,진행시간); - ({"속성":"값"} ,1000) 1초동안 매개변수를 실행
매개변수 - width,height,opacity,fontsize
.attr(속성); - 속성의 값 가져오기
.attr({속성:값, 속성:값}); - 대상의 속성을 값으로 설정
.removeAttr(속성) - 대상의 속성 제거하기
.fadeOut(시간);
.fadeIn(시간);
.fadeTo(시간,투명도); - 대상을 시간동안 투명도를 적용 투명도1~100
.appendTo("대상"); - $("<div><p>Hello,World!</p></div>").appendTo("body");
.append(변수); - $("#result").append(내용); - 대상의 안에 내용추가
$('<br/>').insertAfter(".Content") - .Content 뒤에 <br/> 추가
.insertBefore(); - 앞에 추가
//서브 메뉴를 기준으로 보면 아래와 같음
$('#menu').clone().insertBefore('#submenu');
$('#menu').clone().prependTo('#submenu');
//원래 하단 메뉴가 있는 위치
$('#menu').clone().appendTo('#submenu');
$('#menu').clone().insertAfter('#submenu');
.before(내용) - 대상 앞에 내용 추가
$('h3').wrap('<u></u>') - <h3></h3> 태그를 <u></u>태그로 감쌈
.unwrap(); - 대상을 감싸고있는 부모 엘레멘트를 제거
.clone(); - 대상을 복사
.replaceWith() - 검색된 대상을 변경 ex) $(this).replaceWith("<div>" + $(this).text() + "</div>");
.each(fn) - 대상 수 많큼 반복하여 fn 실행
.size(); - 대상의 개수 알아오기
.html("<input ~>"); - 대상에 html추가
.text("아야어여"); - 대상에 text 추가
.end() - 실행취소함수 바로 전단계의 객체로 돌아감.
.data("link", "messages.jsp"); - 사용법 $(".tab").click(function(){
window.parent.frames['content'].location = $(this).data("link");
});
.eq(위치); - 대상의 위치번째 요소 셀렉트
.css("background-color","#000000"); - 대상에 스타일을 줌
.removeAttr(속성) - 대상의 속성을 제거
.delay(시간) - 시간만큼 지연
.has(엘레멘트); - 엘레멘트를 가지고 있는 대상만 반환
.contains(엘레멘트1,엘레멘트2) - 엘레멘트1이 엘레멘트2를 포함하고있는지를 boolean 형식으로 반환
.addClass(); - 스타일을 추가
.remove() - 대상 제거
.removeClass(); - 스타일을 제거
.val() - input 의 value값을 가져온다
.addClass("a") - 대상에 a클래스를 추가한다.
.removeClass("a") - 대상에 a클래스를 제거한다.
.get(0).tagName - 대상의 첫번째 요소의 태그이름을 가져옴
.filter(expr) - 지정된 표현식과 매치되지 않는 모든 요소 제거 즉, 매치되는요소만 가져옴
.filter(fn) - 지정된 함수와 매치되지 않는 요소들을 제거
.is(expr) - 대상이 표현식에 해당하면 true 여러 표현식이 있을 경우 한조건만 맞아도 true
.map(callback) - 개체안에 있는 요소들의 집합을 다른 집합으로 변경하여 옮긴다
.not(expr) - 지정된 표현식과 매치디는 모든 요소들을 제거
.slice(n,index) - 왼쪽에서 n번째 문자열 반환 ex) .slice(1,3).addClass('red'); 1번째 인덱스에서 (3-1)번째 인덱스까지
$.trim(문자열) - 양쪽 공백 제거
JQuery.browser.version - 브라우져의 버전
~~~.msie - ie사용시 true
~~~.mozilla - FireFox
~~~.safari
~~~.opera
imgSrc.substr(imgSrc.lastIndexOf("/") + 1); - 순수한 파일명 얻기
msg += $("#select").val().join("|")+'\n'; - 셀렉트박스의 값구분자로 구분하여 가져오기
.width() - 대상의 가로길이
.height() - 대상의 세로 길이
.outerWidth(true) - true 마진을 포함한 가로길이
.outerHeight(true) - true 마진을 포함한 세로길이 true제거시 마진 미포함
.trigger("event") - 해당 이벤트를 코드로 강제실행
.load('url',params,callback fn) - Ajax의 기능으로 html을 로드하여 DOM에 삽입
.getJSON('url',fn(data)) - entry[name] 형식으로 json을 읽어옴
- fn내에서 $.each(data,fn(index,entry){table += index + '<br/>'; table+= entry["name"];}; 이런식으로 사용
$.getScript('JQuery.script.js') - 동적으로 자바스크립트 로드, 보통 'JQuery.script.js'에 처리될내용기재하여 클릭이벤트시 실행
$.get('~~.xml',fn()) - XML파일 로드
$.get("~~.aspx", { 'Msg':$(this).val() } ,fn(data){ } ); - get방식의 ajax
$.post("~~.aspx", { 'Msg':'post방식으로 전송'},fn(data){ }); - post방식의 ajax
$.ajax
(
{
type:"get,post",
dataType:"json",
url:"js,aspx,asp,jsp",
dataType:"script,post,get",
success:function(data){SuccessFunction(data);},
error:function(data){AlertFunction(data);}
}
);
$.ajaxSetup - 반복 사용되는 속성을 상단에 설정하여 코드를 줄인다
(
{
url:"~~.asp",
dataType:"json"
}
);
기본셀렉터
* : 모든 엘리먼트와 일치
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#I : 아이디가 I인 엘리먼트 E와 일치. E의 생략은 *#I와 동일함
E[A] : 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A=V] : 값이 V인 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A^=V] : 값이 V로 시작하는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A$=V] : 값이 V로 끝나는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A*=V] : 값에 V를 포함하는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
위치기반 셀렉터
: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(event|odd) : 짝수 또는 홀수 자식 엘리먼트. li:nth-child(event)은 각 목록의 짝수 번째 자식 엘리먼트 반환
:nth-child(Xn + Y) : 전달된 공식에 따른 n번째 자식 엘리먼트. Y는 0인경우 생략가능하다. li:nth-child(3n)은 3의 배수번째 아이템을 반환, li:nth-child(5n+1) 은 5의 배수 +1번째 아이템을 반환
:event / :odd : 페이지 전체의 짝수/홀수 번째 엘리먼트. li:even은 모든 짝수번째 아이템을 반환한다.
:eq(n) : n번째로 일치하는 엘리먼트
:gt(n) : n번째 엘리먼트(포함안됨) 이후의 엘리먼트와 일치
:lt(n) : n번째 엘리먼트(포함안됨) 이전의 엘리먼트와 일치
필터 셀렉터
:animated : 현재 애니메이션이 적용되고 있는 엘리먼트를 선택
:button : 모든 버튼을 선택함(input[type=submit], input[type=reset], input[type=button], button)
:checkbox : 체크박스 엘리먼트만 선택(input[type=checkbox])
:checked : 선택된 체크박스나 라디오 버튼만을 선택
:contains(foo) : 텍스트 foo를 포함하고 있는 엘리먼트만 선택
:disabled : 인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택한다.
:enabled : 인터페이스에서 활성화 상태인 모든 폼 엘리먼트를 선택한다.
: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=button])
:text : 텍스트 엘리먼트만 선택(input[type=text])
:visible : 보이는 (visible)엘리먼트만 선택한다.
:empty : 자식 또는 내부 텍스트를 가지지않는 요소들만 선택
:has(selector) : 지정된 셀렉터에 해당하는 요소를 갖는 모든 요소만 선택
1장
1.1 jQuery인가?
1.2 튀지 않는 자바스크립트
쉽게 동작을 분리해 낼 수 있도록 라이브러리를 설계 튀지 않는(unobstrusive) 자바스크립트는 HTML 페이지의 <body>테그에 포함된 자바스크립트 표현식이나 구문을 잘못된 것으로 본다. 이는 명확하게 책임을 분리해주지만 많은 코드를 짜야하는 비용이 따른다. jQuery를 이용하면 튀지 않는 자바스크립트 적용한 페이지를 작성하는 일이 한층 쉽고 즐거운 작업이 될 수 있다. 적은 코드로 코딩이 가능하다.
1.3 jQuery 기초
1.3.1 jQuery() 함수
1.3.2 유틸리티 함수
1.3.3 문서 준비 핸들러
1.3.4 DOM 엘리먼트 생성하기
1.3.5 jQuery 확장하기
retun this.each(function() {
if (typeof this.disabled != "undefined") this.disabled = true; // this는 위와 다른 this
});
}
1.3.6 다른 라이브러리들과 함께 jQuery 사용하기
2장 - 기능이 확장된 엘리먼트 집합 생성하기
2.1 조작하려는 엘리먼트 선택하기
2.1.1 기본 CSS 셀렉터 사용하기
- a - 모든링크(<a>) 엘리먼트와 일치하는 셀렉터
- #specialID - specialID를 아이디로 가지는 엘리면트와 일치 셀렉터
- .specialClass - specialClass를 클래스로 가지는 셀렉터
- a#specialID.specialClass - 아이디가 specialID이고 specialClass를 클래스로 가지는 링크와 일치하는 셀렉터
- p a.specialClass - <p> 에리먼트 내에 선언되고 specialClass를 클래스로 가지는 모든링크와 일치하는 셀렉터
- 몇몇 예외사항을 제외하고 CSS3를 완벽하게 준수한다.
2.1.2 자식셀렉터, 컨테이너 셀렉터, 어트리뷰트 셀렉터
- p > a - 자식셀렉터
- a[href^=http://] - 어트리뷰트 셀렉터 (^)는 값의 시작부분이 일치함을 의미함
- form[method] - 특정 어트리뷰트를 가진 셀렉터 선택
- input[type=text] - 일치하는 어트리뷰트를 가짐
- a[href$=.pdf] - 끝값이 일치하는 어트리뷰트 셀렉터
- a[href*=jquery.com] - 문자열을 포함하는 어트리뷰트 셀렉터
- li:has(a) - <a>엘리먼트를 포함하는 모든 <li>엘리먼트와 일치한다.
2.1.3 위치로 선택하기
- :first - 첫번째 일치 엘리먼트
- :last - 마지막 일치 엘리먼트
- :first-child - 첫번째 자식 엘리먼트
- :last-child - 마지막 자식 엘리먼트
- :only-child - 형제가 없는 엘리먼트
- :nth-child(n) - n번째 자식 엘리먼트
- :nth-child(even|odd) - 짝수 또는 홀수 자식 엘리먼트
- :nth-child(Xn+Y) - 공식에 따른 엘리먼트 ex)li:nth-child(3n)
- :even / :odd - 짝수 홀수 엘리먼트
- :eq(n) - n번째 일치 엘리먼트 (인덱스 0부터 시작)
- :gt(n) - n번째 엘리먼트(포함되지 않음) 이후의 엘리먼트와 일치
- :lt(n) - n번째 엘리먼트(포함되지 않음) 이전의 엘리먼트와 일치
- 자식셀렉터는 1부터 시작
2.1.4 jQuery 정의 셀렉터 사용하기
- :animated - 에니메이션 적용된
- :button - 모든 버튼
- :checkbox - 체크박스엘리먼트
- :checked - 선택된 체크박스
- :contains(foo) - 문자열 foo를 포함하는 엘리먼트
- :disabled - 비활성화 상태인 모든 폼엘리먼트
- :enabled - 활성화 상태인 모든 폼엘리먼트
- :file - 파일엘리먼트
- :header - 헤더 엘리먼트
- :hidden - 감춰진 엘리먼트
- :image - 폼 이미지 선택
- :input - 폼 엘리먼트만 선택(input, select, textarea, button)
- :not(filter) - 필터의 값을 반대로 변경
- :parent - 빈 엘리먼트 제외 텍스트포함 자식엘리먼트를 가지는 엘리먼트
- :password - 패스워드 엘리먼트
- :radio - 라디오 버튼
- :reset - 리셋 버튼
- :selected - 선택된 엘리먼트
- :submit - 전송 버튼
- :text - 텍스트 엘리먼트
- :visible - 보이는 엘리먼트
2.2 새로운 HTML 생성하기
$("<div>안녕</div>") $("<div>") 는 $("<div></div>")와 같다 .appendTo() 메서드도 있다.
2.3 확장된 엘리먼트 집합 관리하기
2.3.1 확장된 집합의 크기 결정하기
2.3.2 확장 집합에서 엘리먼트 획득하기
2.3.3 확장 엘리먼트 집합 재편성하기
2.3.4 관계를 이용해 확장집합 얻기
2.3.5 확장집합을 이용하는 기타 방법들
2.3.6 jQuery 체인 관리하기
andSelf() - 커멘드체인에서 이전 확장집합 두개를 하나로 합친다.
3장 - jQuery로 페이지에 생명 불어넣기
3.1 엘리먼트 프로퍼티와 어트리뷰트 조작하기
3.1.1 엘리먼트 프로퍼티 조작하기
- $('img').each(function(n){ this.alert='아이디가 '+this.id+'인 image['+n+']이다.'; }); - 0 부터 시작하는 index n을 매개변수로 받는다.
- var allAlts = new Array();
$('img').each(function(){ allAlts.push(this.alt); }); - 모든 alt 배열을 얻음
3.1.2 어트리뷰트 값 가져오기
- $("#myImage").attr("custom") - costom 어트리뷰트의 값
- 브라져에 따라 다른 프로퍼티명 때문에 발생하는 귀찮은 문제를 해결해 준다. (ex className 등)
3.1.3 어트리뷰트 값 설정하기
- $('*').attr('title', function(index) {
return '나는 ' + index + '번 엘리먼트이고 내 이름은 ' + (this.id ? this.id : 'unset') + '이다';
});
$('input').attr({ value: '', title: '값을 입력하세요.' }
); - value title등 설정
3.1.4 어트리뷰트 제거하기
removeAttr(name) - 자바스크립트 DOM 엘리먼트에서 대응하는 프로퍼티가 제거되는 것이 아니 값이 변경될 뿐이다.3.1.5 어트리뷰트 가지고 놀기
$("form").submit(function() {$(":submit", this).attr("disabled", "disabled");
}); - form의 submit 버튼을 비 활성화
3.2 엘리먼트 스타일 변경하기
3.2.1 클래스 추가하고 제거하기
addClass removeClass toggleClass $('tr').toggleClass('striped'); - 번갈아 가며 클래스를 적용3.2.2 스타일 얻고 설정하기
$("div.expandable").css("width", function() {return $(this).width() + 20 + "px";
});
$("div.myElements").width(500); - $("div.myElements").css("width", "500px")와 같은 코드 $("div.myElements").height(500); var val = $("div.myElements").width(); - 가져오기3.2.3 스타일과 과련된 유용한 커맨드
$("p:first").hasClass("surpriseMe") - 클래스를 갖는지 true false 반환 $("p:first").is(".surpriseMe") - 위와 같은 코드 $("p:first").attr("class").split(" "); - 앨리먼트에 정의된 클래스 목록을 공백으로 구분된 문자열대신 배열로 얻음(undefined 발생 할 수 있다. 아래로 해결 ) $.fn.getClassNames = function() {if(name == this.attr("className")) {
return name.split(" ");
}
else {
return [];
}
};
3.3 엘리먼트 콘텐츠 설정하기
3.3.1 HTML과 텍스트 콘텐츠 대체하기
html(text) var text = $('#theList').text();3.3.2 엘리먼트 복사하기와 이동하기
$('p').append('<b>테스트<b>'); $("p.appendToMe").append($("a.appendMe")) $('#flower').appendTo('#targets p:first') - 확장집합의 모든 엘리먼트를 target의 끝으로 이동 prepend(), prependTo() - append(), appendTo()와 유사하게 동작하지만 대상 엘리먼트 앞에 삽입 before(), insertBefore() - 엘리먼트를 대상의 첫번째 자식으로 삽입하는 대신 대상의 바로앞 형제로 삽입 after(), insertAfter() - 엘리먼트를 대상의 마지막 자식으로 삽입하는 대신에 대상의 바로뒤 형제로 삽입3.3.3 엘리먼트 감싸기
$("a.surprise").wrap("<div class='hello'></div>") - surprise 클래스가 있는 링크를 hello클래스를 지닌 div로 감싼다. $("a.surprise").wrap($("div:first")[0]); - 첫번째 <div>엘리먼트를 복사하여 감싼다. .wrapAll() - 일치하는 모든 엘리먼트를 감싼다. .wrapInner() - 일치하는 엘리먼트의 텍스트 노드를 포함한 콘텐츠를 감싼다.3.3.4 엘리먼트 제거하기
$("div.elementToReplace").after("<p>div를 대체한다.</p>").remove(); - 뒤에 추가하고(after 원본 반환) 앞을 제거함 (대체되는 것 같음) $.fn.replaceWith = function(html) {return this.after(html).remove();
}; - 이렇게 만들어서 확장 사용 가능
$("div.elementToReplace").replaceWith("<p> div를 대체한다.</p>"); - 위에서 확장해 사용3.3.5 엘리먼트 복사하기
$('img').clone().appendTo('fieldset.photo'); - 모든 이미지 엘리먼트를 복사해서 photo클래스 fieldset에 붙인다. $('ul').clone().insertBefore('#here').end().hide(); - 복사본 삽입후 원본 감추기
3.4 폼 엘리먼트 값 다루기
$('input, select').val(['하나', '둘', '셋']); - input과 select 엘리먼트를 찾아 발견된 체크박스, 라디오버튼, 옵션을 선택 (알아서 선택하니 편리)
4장 - 이벤트 -모든것의 시작
4.1 브라우저 이벤트 모델 이해하기
4.1.1 DOM 레벨 0 이벤트 모델
- 어트리뷰트 방식으로 DOMM 레벨 0 이벤트 헨들러를 선언하는 방법은 1.2 절에서 설명한 튀지않는 자바스크립트 원칙을 위반한다.
- Event 인스턴스의 프로퍼티는 발생한 이벤트에 관한 많은 정보를 제공한다. 엘리먼트 마우스이벤트 좌표, 키보드 이벤트의 키 정보 등
- 이벤트 버블링. 먼저 대상이 되는 엘리먼트에게 이를 전달한 뒤, 조상 엘리먼트에게 순서대로 이벤트를 전달하는 과정. 이걸 멈출 수 있나?
- 표준 호환 브라우져에서는 stopPropagation()메서드, IE에서는 cancleBubble프로퍼티
4.1.2. DOM 레벨 2 이벤트 모델
- 프로퍼티에 저장하는 레벨 0 방식은 두가지 동작 처리 안됨
- 레벨 2에서는 하나이상 할당하도록 설계
- addEventListener(eventType, listener, useCapture) 메서드를 사용
- 이벤트 버블링. 루트에서 대상 엘리먼트로 전파(캡쳐단계), 다시 대상엘리먼트에서 루트로 전파(버블단계)
- useCapture 매개변수를 false로 설정하면 버블 헨들러, true로 하면 캡쳐 헨들러
- ie는 캡쳐단계 지원 안함
4.1.3 인터넷 익스플로러 이벤트 모델
ie 7에서도 DOM 레벨 2를 지원하지 않음 ie는 attachEvent(eventName, handler)라는 비슷한 것을 지원 jQuery를 통해 이런 브라우저간 차이를 해결
4.2 jQuery 이벤트 모델
4.2.1 jQuery를 사용해 이벤트 핸들러 바인딩하기
$('img').bind('click', function(event){alert('안녕!');}); eventTypeName - blur, change, click, dblclick, error, focus, keydown, keypress, keyup, load, mousedown, mousemove, mouseout, mouseover, mouseup, resize, scroll, select, submit, unload .one() - 한번 실행 뒤 자동 삭제되는 핸들러4.2.2 이벤트 핸들러 제거하기
.unbind(eventType, listenner) .unbind(event)4.2.3 Event 인스턴스
4.2.4 이벤트 전파 제어하기
4.2.5 이벤트 핸들러 호출하기
.trigger(eventType) - 일치된 엘리먼트에 대하여 전달된 이벤트 타입에 해당하는 이벤트 핸들러를 모두 실행한다. 단, 이벤트를 발생 시키지 않으며 전파 안됨 .blur(), .click(), .focus(), .select(), .submit() 등을 지원4.2.6 그 외 이벤트 관련 커맨드
리스너 토글하기 - toggle(listenerOdd, listenerEven) 번갈아 가면서 실행될 클릭 이벤트 핸들러 한쌍을 할당 엘리먼트 위에서 맴돌기 - hover(overListener, outListener) 자식 엘리먼트로 이동은 무시됨 $('#outer2').hover(report, report);
4.3 이벤트 사용하기
5장 - 애니메이션과 여러 효과를 이용해 페이지 꾸미기
5.1 엘리먼트를 나타내고 감추기
5.1.1 접을 수 있는 리스트 구현하기
- show(), hide()
5.1.2 엘리먼트의 표시 상태 바꾸기
- toggle()
5.2 엘리먼트 표시상태를 애니메이션으로 표현하기
5.2.1 엘리먼트를 점진적으로 보이고 감추기
hide(speed, callback) - 매개변수 없으면 display 스타일 프로퍼티 값이 즉시 none으로 설정, speed 는 1/1000초 설정, 또는 slow, normal, fast show(speed, callback) - jQuery를 이용해 감췄다면 이전 값으로 설정한다. 그렇지 않으면 block으로 설정 toggle(speed, callback) - 감춰진 경우는 show()를 수행, 드러난 경우는 hide()를 수행5.2.2 엘리먼트 페이드인 / 페이드 아웃/ 페이드 투하기
fadeOut(speed, callback) - 불투명도를 0%로 줄여가면서 화면에서 제거 fadeIn(speed, callback) fadeTo(speed, opacity, callback) - 확장엘리먼트의 불투명도를 현재의 설정 값에서 opacity 매개변수 값으로 설정 한다. (0.0~1.0) 화면에서 제거하지는 않는다.5.2.3 슬라이드 효과를 사용하여 엘리먼트를 나타내고 감추기
slideDown(speed, callback) - 감춰진 모든 일치하는 엘리먼트가 높이 값이 증가하면서 나타난다. (펼쳐지는...) slideUp(speed, callback) - 드러나 있는 모든 일치하는 엘리먼트가 점차적으로 높이 값이 감소하면서 화면에서 제거된다. slideToggle(speed, callback) - 감춰진 확장엘리먼트는 slideDown()을, 드러나 있는 확장 엘리먼트에는 slideUp()을 수행한다.5.2.4 애니메이션 멈추기
stop() - 확장 집합에 있는 엘리먼트에 현재 진행하는 에니메이션을 중지한다.
5.3 사용자 정의 애니메이션 생성하기
5.3.1 사용자 정의 스케일 애니메이션
$('.animateMe').each(function(){$(this).animate(
{
widh: $(this).width() * 2,
height: $(this).height() * 2
},
2000
);
});
5.3.2 사용자 정의 드롭 애니메이션
$('.animateMe').each(function(){$(this)
.css('position', 'relative')
.animate(
{
opacity: 0,
top: $(window).height() - $(this).height() - $(this).position().top
},
'slow',
function(){ $(this).hide(); });
}); - 화면에서 떨어지는 효과
5.3.3 사용자 정의 퍼프 애니메이션
- 담배 연기 같이 공중에 퍼지는 것처럼 보이게 하려고 한다.
- $('.animateMe').each(function(){
var position = $(this).position();
$(this)
.css({position:'absolute', top:position.top, left:position.left})
.animate(
{
opacity: 'hide',
width: $(this).width() * 5,
height: $(this).height() * 5,
top: position.top - ($(this).height() * 5 / 2 ),
left: position.left - ($(this).width() * 5 / 2)
},
'normal');
});
6장 - jQuery 유틸리티 함수
6.1 jQuery 플래그 사용하기
- $.browser, $.boxModel, $.styleFloat
6.1.1 사용자 에이전트 탐지하기
- 브라우저 탐지가 해로운 이유 - 브라우저 탐지는 '증오스럽다'. 브라우저 탐지는 선택할 여지가 없을 때만 사용하는 기술이다. IE, firefox, opera, safari 등등 , 지원하지 않는 브라우저는 에러 발생 ,거대 중첩 조건문에 의해 확장성 떨어짐
- $.browser - 에이전트가 속한 브라우저 종류를 찾으려고 사용하는 플래그 집합을 정의한다. msie, mozilla, safari, opera, version
- $.browser.msie ? 2 : select.option[2] - 브라우저를 탐지하여 처리
6.1.2 박스 모델 확인하기
- W3C 박스 모델은 패딩과 테두리 엘리먼트의 크기를 넓이에서 제외하지만 IE에서는 포함한다.
- $.boxModel - W3C 표준 박스 모델이면 true, IE 박스모델은 false
6.1.3 정확한 float 스타일 탐지하기
- element.style[$.styleFloat] = 'left';
- $.styleFloat 플래그 값은 IE에서 styleFloat이며 다른 브라우저에서는 cssFloat이다.
- 이 플래그를 일반적으로 직접 사용하는 일이 없다.
6.2 다른 라이브러리와 jQuery 함께 사용하기
$.noConflict() - 다른 라이브러리가 $를 사용하면 그 라이브러리에서 이변수를 사용할 수 있도록 만들어 주는 유틸리티 함수6.3 자바스크립트 객체와 컬랙션 조작하기
6.3.1 문자열 다듬기
- $.trim(value) - 앞뒤 공백 제거(폼피드, 개행, 리턴, 탭, 수직문자 등 포함)
6.3.2 프로퍼티와 컬렉션 순회하기
- for-in루프 는 문법이 불필요하게 장황하고 복잡해짐
- $.each(container, callback) - container는 순회할 아이템을 가진 배열 혹은 프로퍼티를 가진 객체, callback함수의 첫번째 매개변수는 배열의 인덱스 이거나 객체 프로퍼티의 이름이다.
- var anArray = ['하나','둘','셋'];
$.each(anArray, function(n, value){
// 여기서 작업한다.
});
$var anArray = {하나:1, 둘:2, 셋:3};$.each(anObject, function(name, value){
// 여기서 작업한다.
});
6.3.3 배열 필터링하기
많은 양의 데이터를 다루는 애플리케이션에서 특정조건에 일치하는 엘리먼트를 찾으려면 빈번하게 배열을 순회하여야한다. 특정경계에 속하거나 속하지 않는 아이템 혹은 특정 패턴에 일치하는 아이템을 찾기위해 필터링 작업을 한다. $.grep(array, callback, invert) - 전달된 배열의 엘리먼트마다 콜백함수를 호출하면서 순회한다. invert 매개변수를 생략하거나 false이면 콜백의 값이 true일 경우 값이 수집된다. invert가 true라면 콜백의 값이 false일 때 값이 수집된다. 원본 배열은 변경되지 않는다. var bigNumbers = $.grep(originalArray, function(value){return value > 100;
}); - 배열중 100보다 큰 값으로 필터링
6.3.4 배열 변환하기
데이터가 항상 필요한 형태로만 존재하지는 않는다. 데이터 중심 웨에플리케이션에서 자주 사용하는 주요 동작으로 값의 집합을 다른 집합으로 변환하는 연산이 있다. $.map(array, callback) - 전달된 배열의 아이템마다 콜백함수를 호출하면서 순회하며 함수호출로 반환된 값은 새로운 배열로 수집된다. var oneBased = $.map([0,1,2,3,4], function(value){return value+1;}); - 0 기반 인덱스에서 1기반 인덱스로 변경한다. var oneBased = $.map([0,1,2,3,4], 'a+1'); - 위와 같은식, 간단하게 만드는 표현식 형태의 문자열을 전달 할 수 있다. a라는 매개변수를 값으로 전달 받았다. var strings = ['1', '2', '3', '4', 'S', '6']; // 5가 아니라 Svar values = $.map(strings, function(value){
var result = new Number(value);
return isNaN(result) ? null : result; // 숫자로 성곡적으로 변환했는지 점검 (자바스크립트 isNaN() 메서드), 실패시 null 반환
});
var characters = $.map(['this', 'that', 'other thing'],function(value) { return value.split(''); }
);
==> ['t','h','i','s','t','h','a','t','o','t','h','e','r ',' ','t','h','i','n','g'] 합쳐서 분해 됨
6.3.5 자바스크립트 배열 재미있게 사용하기
$.inArray(value, array) - 전달된 값이 처음 나타나는 위치 인덱스 반환, value 배열에서 찾으려는 값, 찾을 대상 배열 , 찾지 못하면 -1 반환 var index = $.inArray(2,[1,2,3,4,5]); $.makeArray(object) - 유사배열 객체를 자바스크립트 배열로 변환 $.unique(array) - DOM 엘리먼트의 배열이 주어지면, 원본 배열에서 고유한 엘리먼트로만 구성된 배열 반환.6.3.6 객체 확장하기
$.extend(target, source1, source2, ...sourceN) - target에 전달될 객체를 함께 전달된 나머지 객체의 프로퍼티를 사용하여 확장한다. 같은 객체가 있을 때 뒤에 나오는 객체가 앞보다 우선함.6.4 동적으로 스크립트 로드하기
$.getScript(url, callback) - url매개변수가 명시한 서버에 GET 요청을 사용해 스크립트를 가져옴7장 - 사용자 정의 플러그인으로 jQuery 확장하기
7.1 확장을 사용하는 이유
사이트 전체에 일관된 코드 스타일을 유지하는 데 도움을 줌 jQuery의 강력한 기능을 상속받아 사용 가능7.2 jQuery 플러그인 제작 지침
7.2.1 필드와 함수 이름 짓기
플러그인 개발시에 파일이름이 다른 파일과 충돌하지 않도록 만드는 방법
접두어로 jquery.를 사용한다. 이어서 플러그인 이름을 적는다. .js로 파일 이름을 끝맺는다. jquery.fred.js http://docs.jquery.com/Plugins 페이지의 플러그인 목록을 살펴보는 것도 좋다.7.2.2 $를 경계하라
별칭 jQuery를 사용하는 방법도 있으나 $쪽이 훨신 편리하다.7.2.3 복잡한 매개변수 목록을 단순하게 만들기
function complex(p1, p2, p3, p4, p5, p6, p7) { - 매개변수가 많음 complex(valueA, null,null,null,null,null, valueB); - null 입력이 많음 complex(valueA, {p7:valueB}); - options hash를 이용하는 방법 complex(valueA, {p3:vlaueC, p4:valueD})); - 이런 방법도7.3 사용자 정의 유틸리티 함수 작성하기
$.say = function(what) { alert('I say ' + what); }7.3.1 데이터를 조작하는 유틸리티 함수 만들기
$.toFixedWidth(value, length, fill) - 전달된 값을 고정폭 필드로 채우는 함수를 만들어 보자 (function($){$.toFixedWidth = function(value, length, fill) {
var result = value.toString();
if(!fill) fill = '0;;
var padding = length - result.length;
if(padding < 0) {
result = result.substr(-padding);
}
else {
for(var n = 0; n < padding; n++)
result = fill + result;
}
return result;
};
})(jQuery); - 이렇게 구현한다.
7.3.2 날짜 형식기 만들기
7.4 새로운 확장 메서드 추가하기
확장 메서드를 추가하여 강력함을 필요한 만큼 확장할 수 있다.7.4.1 확장메서드에 여러동작 적용하기
두가지 이상 되는 기능을 수행하는 새로운 플러그인 메서드 개발7.4.2. 확장메서드에서 상태 유지하기
8장 - Ajax를 이용하여 서버와 대화하기
8.1 Ajax 간략히 살펴보기
8.1.1 XHR 인스턴스 생성하기
8.1.2 요청 보내기
8.1.3 진행 상황 추적하기
8.1.4 응답 얻기
- Ajax를 사용하는 개발자가 다뤄야할 고통
- XHR 객체를 인스턴스화 하는데 브라우저에 종속적 코드 필요
- 준비 핸들러는 필요없는 상태 변화를 걸러내야 한다.
- 준비 핸들러는 XHR인스턴스를 호출하는 참조를 자동으로 얻지 못한다.
- 응답결과는 형태에 따라 다양한 방법으로 다뤄야 한다.
8.2 엘리먼트에 콘텐츠 로드하기
Ajax를 사용하는 가장 빈번한 상황은 서버에서 콘텐츠를 가져와서 원하는 DOM 위치에 삽입하는 것이다. 콘텐츠는 대상 컨테이너의 자식이 되는 HTML코드이거나 대상엘리먼트의 콘텐츠가 되는 보통 텍스트다. $('#someContainer).load('/serverResource'); - 간단하다.8.2.1 jQuery로 콘텐츠 로드하기
- load(url, parameters, callback) - parameters 매개변수가 요청 매개변수로 제공되면 POST HTTP 메서드를 사용하여 요청을 만들고, 그렇지 않으면 GET 메서드로 요청을 만든다. (GET URL에 URI인코딩 형태의 쿼리문자열 추가)
- $('.injectMe').load('/someResource #div'); - 응답 엘리먼트에서 오직 <div>엘리먼트만 삽입한다.
- serialize() - 폼 컨트롤에서 요청 매개변수를 가져와 쿼리 문자열을 만들어줌(선택안된 체크박스 라디오버튼 드롭다운, 비활성화된 컨트롤과 같은 엘리먼트는 제외)
- serializeArray() - 자바스크립트 배열형태로 폼데이터를 반환. 폼 컨트롤 이름과 값을 name 프로퍼티와 value 프로퍼티로 가짐
8.2.2 목록 데이터 동적으로 로드하기
$(function(){$('#styleDropdown')
.change(function(){ // 스타일 드롭다운을 감싸고 변경 핸들러를 바인딩한다.
var styleValue = $(this).val();
$('#detailsDisplay').load(
'getDetails.jsp', // 선택된 스타일 데이터를 로드한다.
{ style : styleValue } // GET 패러메터
);
})
.change(); // 변경 핸들러를 실행한다.
});
8.3 GET과 POST 요청 만들기
GET은 멱등 요청이며 캐시에 적합하다. POST는 데이터 전송에 주로 쓴다.8.3.1 jQuery를 사용하여 데이터 얻기
$.get(url, parameters, callback) - 명시된 URL을 사용하여 GET요청을 전송 $.get( 'reflectData.jsp', {a:1, b:2, c:3}, function(data) {alert(data);} );8.3.2 JSON 데이터 얻기
XML이 데이터 전송기법으로 적당하지 않을때 사용 $.getJSON(url, parameters, callback)8.3.3 POST 요청 만들기
$.post(url, parameters, callback)8.4 Ajax 요청 직접 제어하기
8.4.1 Ajax 요청 직접 설정하고 생성하기
8.4.2 요청에 기본값 설정하기
8.4.3 전역함수