Jquery 란?
-자바스크립트 라이브러리?
-이점 및 종류
왜 Jquery 가 나왔는지?
Jquery 이점
Jquery 특징(기능)
--------------------------------------------------------------------------------------------------------
@ 자바 스크립트 라이브러리란?
-까다로운 크로스 브라우저 문제를 단번에 해결하고, 웹 개발에 향상된 새로운 패러다임을 제시하는데 필요한 모든 기능을 제공하는 자바스크립트가 등장!!
사용방법과 용도에 따라 정의가 달라지지만 큰 문맥상의 정의는 하나이상의 서브루틴이나 자주 재사용 가능한 함수들이 모여 있는 파일(들)을 뜻한다.
자바스크립트 라이브러리는 한 가지 특정 기능에 특화되어 구현된 것이 아닌, 통합 개발환경을 마련하는 것에 가깝다고 할 수 있으며 이것을 ‘자바스크립트 프레임워크 라이브러리’로 통칭하도록 한다.
프 레임워크 라이브러리의 성향은 크게 세 가지로 나뉠 수 있다.첫 번째는 자바스크립트 자체의 사용성을 높이는 ‘코어 라이브러리’이며, 두 번째는 특정 기능만을 강화시키거나 UI(유저-인터페이스)의 성능향상을 위한 ‘특화 라이브러리’이다. 세 번째는 앞의 두 가지 성향을 모두 가진 ‘통합 라이브러리’가 있다. 두 번째 성향을 띠는 라이브러리는 특정한 코어 라이브러리만을 위한 확장 형태로 배포되는 경향이 있다.
@ 자바 스크립트 라이브러리의 필요성
전체 페이지의 새로 고침 없이 브라우저와 서버 간에 통신하는 문제를 해결해 준 Ajax는 하루가 다르게 성장하고 있다. 성장의 증거 가운데 하나는 현재 벌어지고 있는 상황을 언급할 수 있는데, 늘 화두가 되곤 하는 구글의 여러 서비스들인 그룹스, 맵스, 노트, 지메일, 캘린더와 통합 웹 오피스 서비스인 그리고 국내 서비스로는 다음의 한메일, 오픈마루의 스프링노트, 레몬펜, 라이프팟 등이 Ajax를 사용하여 구축된 사례이다
즉,
Ajax관련 작업을 용이하게 하며, DOM(Document Object Model)을 효과적으로 다루기 위한 셀렉터와 이벤트 핸들러 등 반복적으로 사용되는 유용한 함수 또는 메소드를 대다수 제공함으로써 복잡한 구조를 가진 UI를 손쉽게 구현할 수 있게 하는 것은 물론, UI구현에 필요한 대부분의 컴포넌트를 API화하여 제공하므로 변수를 지정해 주는 것만으로 파일 탐색기와 흡사한 UI를 단지 수 분 만에 만들어 낼 수 있기 때문이다.
@ 자바 스크립트 라이브러리 선택시 고려해야 할 사항
자바스크립트 라이브러리를 선택하는 데에 있어서 Ajax는 첫 번째로 고려대상이 되기도 한다. Ajax는 자바스크립트의 도움을 받아 구현되는 측면에서 중요하기도 하지만, 전체 코드분량을 놓고 볼 때 사실상 소모되는 분량은 극히 일부분에 지나지 않는다. 그렇다면 나머지는 어디에 사용되는 것일까? 그렇다. 바로 사용 편의성을 위한 효율적인 UI구현에 적잖은 비중을 두게 되며, 시스템 성능이 좋아진 현재는 직관성에 도움을 주는 비주얼라이제이션에도 수많은 코드를 소비하기도 한다. 그래서 컴포넌트의 지원여부나 생산의 용이성, 애니메이션 지원 여부 또한 중요한 고려대상이다.
라이브러리 자체 기능이 첫 번째로 중요하지만, 선택에 앞서 간과하지 말아야 할 고려해야 할 것들이 더 있다. 요즘에는 하나의 자바스크립트 라이브러리를 대상으로 한 서적으로까지 출간되고 있다. Prototype, Script.aculo.us, jQuery 자바스크립트 라이브러리에 대한 개발서적이 이미 시중에서 판매되고 있는 상태이다. 자신이 선택하고자 하는 라이브러리에 대한 지원 여부를 꼭 확인하자. 그리고 무엇보다도 중요한 고려항목은 바로 “어떠한 웹 애플리케이션을 개발할 것인가?”이다. 다음에 소개되는 라이브러리들의 특징을 조목조목 따져보고 만들고자 하는 웹 애플리케이션에 적합한 자바스크립트 라이브러리는 무엇인지 살펴보자.
@ 자바스크립트 라이브러리의 장점과 단점
자바스크립트는 범용적인 프로그래밍 언어이다. 대부분의 자바스크립트 프레임워크 라이브러리들은 언어 자체를 강화하도록 디자인되었다. 웹 애플리케이션 개발에 자바스크립트 프레임워크 라이브러리의 도움을 받았을 때의 장점은 사람이 이해하기 쉽고 간결한 코드를 구사하여 만들어 내고자 하는 것을 보다 빨리 생산고, 지겨운 중복작업을 상당부분 생략할 수 있다. 반면, 별도로 라이브러리 사용법을 익혀야 하고 비교적 덩치가 큰 파일들을 추가로 로드해야 하는 부담이 있다.
@ 자바스크립트 라이브러리의 종류와 특징
1. Prototype : 자바스크립트 자체 기능을 확장하고 편리하게 사용할 수 있도록 한다. (가장많이사용)
2. Script.aculo.us : Prototype과 맞물려 돌아가는 특화 라이브러리이다.(강력한 애니메이션 효과)
3. jQuer : 가볍고 빠른 자바스크립트 프레임워크 라이브러리이다.(생산의 편의성 제공)
(jQuery의 코드는 단순하고 간결하다.DOM과 관련한 지겨운 루프문과 Ajax의 복잡성을 기발하게 처리할 수 있게 한다. 코어 외의 부가적인 기능(특화 라이브러리)들은 플러그인의 형태로 제공하고 있으며, 수많은 웹 개발자들에 의해 다양한 플러그인들이 준비되어 있다. 최근 들어 Prototype또한 jQuery의 편리한 코딩 룰을 여러 부분에 도입하고 있는 실정이다. jQuery의 철학은 “이 모든 것은 즐거운 마음으로 프로그래밍하기 위함”이라고 한다.)
4. YU(Yahoo! UI) : 유저-인터페이스에 중심을 둔 자바스크립트 라이브러리이다
(안정적이며, 완성도 놓은 다양한 컴포넌트들이 개발되어 있다)
5. Dojo Toolkit :특화 라이브러리와 코어 라이브러리를 모두 갖춘 통합 라이브러리이다(GUI 충실)
(거의 모든 컨트롤러와 컴포넌트를 갖추고 있어 대규모 사이트 제작에 적합) / 무겁다
6. Ext JS : 통합형 라이브러리이다. (Dojo Toolkit 과 마찬가지로 GUI API에 가깝다)
7. GWT(Google Web Toolkit): 자바 기반 자바스크립트 툴킷이다
(자바를 통해 자바스크립트를 개발했을 때의 장점을 부각하여 자바스크립트의 디버깅과 테스팅의 어려움을 극복할 수 있다고 한다. 작은 기능을 구현하기 위해서도 많은 양의 자바 코드를 작성해야 한다)
8. MooTools : Prototype 기반의 Script. aculo.us를 개선한 형태였으나 지금은 독립 라이브러리의 형태로 거듭났다 .실제로 Prototype의 코어의 일부분을 그대로 사용하고 있으며,DOM선택자의 사용 방법이 Prototype과 매우 흡사하다.
9. Qooxdoo : Dojo Toolkit과 마찬가지로 GUI에 중심을 둔 통합형 라이브러리이다.
10. Mochikit :로깅모듈과 디버깅 콘솔을 제공하여 자체적인 디버깅이 가능하다
11. RICO : Prototype 프레임워크 라이브러리가 필요하며, 다양한 화면효과에만 집중한 라이브러리이다.
12. SPRY : 어도비에서 내놓은 Ajax 프레임워크이다. 다른 Ajax 지원 라이브러리 들은 JSON 통신 규격을 선호하는 데에 반해 SPRY는 XML로 주고받는 것에 특화되었다.
13. Xajax : PHP에서 Ajax를 수월하게 구현하기 위한 라이브러리이다.
@ 자바스크립트 라이브러리 활용 측정표
스크립트 라이브러리를 왜 써야 하는가?
물론, 안 써도 됩니다. 매번 스크립트 기능이 필요할 때마다 손수 다 작성해도 뭐라 그럴 사람은 없으니까요. 하지만, 팀 개발을 하는 경우나 유사한 프로젝트를 반복해서 하는 경우에는 여러분 스스로가 가벼운 수준일지라도 자신만의 라이브러리(일반적으로 유틸리티 function들을 모아놓은 js 파일들) 만들어 놓고 있을 것입니다. 그러면서, 뭔가 풍족하고도 믿고 사용할만한 라이브러리는 없을까 둘러보곤 하죠.
일반적으로 우리가 웹 프로젝트에서 공개된 혹은 상용의 스크립트 라이브러리를 사용하려는 데에는 다음과 같은 이유가 있기 때문입니다.
- 모든 브라우저에서 올바로 동작하는 자바스크립트를 작성하기는 힘들다.
- 유사한 기능을 위해서 반복적으로 스크립트 코드를 작성하곤 한다.
- 수 많은 자바스크립트로 인해 사이트의 유지보수가 힘들다.
더 많은 이유가 있겠지만, 결론적으로 말하자면 스크립트 라이브러리를 사용할 경우, 공수(비용과 시간)를 줄일 수 있고, 개발 및 관리하기가 편해지며, 균일한 코드 퀄리티를 유지할 수 있고, 그에 따라 스트레스도 줄어들기 때문이라고 할 수 있을 것입니다. 사실 이것이 서버 측이던 클라이언트 측이던 프레임워크를 도입하는 대표적인 이유이기도 하죠.
--------------------------------------------------------------------------------------------------------
JQuery란 무엇인가?
가볍고 빠른 자바스크립트 프레임워크 라이브러리이다.(생산의 편의성 제공)
(jQuery의 코드는 단순하고 간결하다.DOM과 관련한 지겨운 루프문과 Ajax의 복잡성을 기발하게 처리할 수 있게 한다. 코어 외의 부가적인 기능(특화 라이브러리)들은 플러그인의 형태로 제공하고 있으며, 수많은 웹 개발자들에 의해 다양한 플러그인들이 준비되어 있다. 최근 들어 Prototype또한 jQuery의 편리한 코딩 룰을 여러 부분에 도입하고 있는 실정이다. jQuery의 철학은 “이 모든 것은 즐거운 마음으로 프로그래밍하기 위함”이라고 한다.)
--------------------------------------------------------------------------------------------------------
- 기존의 다른 툴킷이 자바스크립트의 놀랍고 강력한 고급 기술에 중점을 두는 반면, jQuery는 페이지를 개발할 때 웹 개발자들이 생각하는 방식을 바꾸는데 목적을 둔다.
- HTML 문서에서 스타일 정보를 분리하는 것과 마찬가지로 문서에서 동작을 분리하는 작업은 커다란 이점을 제공한다. 이러 사용 방식을 튀지 않는 자바스크립트라고 한다. jQuery의 창시자는 개발자들이 쉽게 동작을 분리해낼 수 있도록 라이브러리를 설계 했다.
왜 JQuery인가.? 가볍다, CSS3 준수 , 크로스 브라우저 해결
1. BDD(Behavior driven development)
jQuery를 사용하면 CSS로 HTML 엘리먼트의 스타일을 정의하는 것 처럼 HTML 엘리먼트의 행동들을 분리하여 정의할 수 있다.
2. MVC + J
MVC 프레임웍은 웹 개발 환경을 Model-View-Controller로 나누었다. MVC 프레임워크에서 뷰는 HTML, CSS, Javascript의 부분으로 나누어지고 GUI 개발은 이 세부분이 하나로 결합하여 완성된다. 게다가 Ruby on Rails에서의 Prototype 라이브러리는 HTML과 JavaScript도 함께 합쳐버린다(meshup). 뷰를 개발하면서 JavaScript를 분리하는 BDD 방법론을 따르려 한다면 jQuery가 매우 적절하다. 나는 Ajax에서 MVC + J가 매우 강력하다는 것을 깨닭았다.
3. 액션 체인(Chaining of actions)
액션 체인은 DRY 원칙을 따를 뿐만 아니라 JavaScript 코드의 가독성을 증가시킨다.
4. CSS 셀렉터 문제(CSS Selector rocks)
CSS 셀럭터 HTML DOM을 사용하기에 매우 강력한 도구이다. jQuery는 HTML 문서의 엘리먼트를 식별하기 위해 CSS 셀러터를 이용하고 이를 위해 HTML 태그의 id 속성을 관리해야 하는 지루한 작업을 회피하게 해준다. 대부분의 id 속성은 CSS 셀렉터를 올바르게 사용하여 회피할 수 있다. Prototype의 $$ 함수는 CSS 셀렉터를 지원하지만 CSS 셀렉터의 능력을 모두 이끌어내지 못한다.
jQuery를 사용하면 HTML 코드가 간결해지고 거의 건드릴 필요가 없다. 나의 웹 디자이너는 쉽게 html과 stylesheet를 수정할 수 있다.
jQuery와 Prototype 비교-
Example1: Tab 예제는 tabs 클래스에 속하는 3 개의 tab이 있고 id는 각각 tabs1, tabs2, tabs3이다(ids=>["tabs1","tabs2","tabs3"]). 사용자가 "show first tab" 링크를 클릭했을 때 #tab1만 보여진다.
jQuery
Prototype
Example2:
엘리먼트의 CSS를 수정하는 예제
jQuery
Prototype
Prototype이 좋은 이유
1. Ajax 요청에서 div의 내용이 부분적으로 변경돼야 할때 JavaScript 행위는 activated/reactivated돼야 한다. jQuery에서는 이를 위한 많은 코드를 만들지 않아도 된다. 하지만 나는 Ajax로 로드된 이 부분을 항상 마음속으로만 새겨야 한다. Prototype에서는 로드된 HTML 엘리먼트들에 관련된 JavaScript 코드가 포함된다.
2. Ruby on Rails의 Prototype 헬퍼들은 정말 대단하고 JavaScript와 Ajax를 만들때 많은 부분에서 매우 편리하다.
3. Prototype은 자바스크립에서도 Ruby같은 문법을 사용할 수 있게 해준다. 개발을 쉽고 빠르게 할 수 있도록 배열, 객체 등의 기능을 변경해준다.
4. jQuery에서는 JavaScrpt 파일이 모두 다운로드되고 DOM 생성된 후에만 엘리먼트의 행위를 사용할 수 있다. 연결이 느릴 때는 기다려야만 하기 때문에 매우 고통스럽다.
--------------------------------------------------------------------------------------------------------
jQuery란?
jQuery는 가볍고 빠르며, 간결한 오픈소스 스크립트 라이브러리입니다. 이를 이용하면 Rich 웹 UI를 개발하는 데 도움이 되는 다양한 기능들 즉, HTML 문서 트래버스, 이벤트 처리, 애니메이션, Ajax 상호 작용 등을 지원하여 빠르고 견고하게 리치 웹 애플리케이션 개발을 할 수 있도록 지원합니다.
이러한 jQuery의 기능적인 특징을 핵심 키워드만 뽑아서 정리하자면,
- 막강한 CSS 셀렉터
- 크로스 브라우저 지원
- 메서드 체인
- Ajax 지원
- 풍부한 플러그 인 지원
jQuery 사용--------------------------------------------------------------------------------------------
스크립트 태그에서 jquery.js를 참조시켜면 jQuery 라이브러리를 사용할수 있다!.
$() 표현이 jQuery()라는 구문의 단축표현이자, 셀렉터를 수행하기 위한 구문이다.
1. 인자로 셀렉터를 지정한 경우에는 일치되는 모든 요소를 찾는다.
2. 인자로 html 태그를 지정한 경우에는 동적으로 그 요소를 생성한다.
3. 인자로 특정 DOM 요소를 지정하면, 그 요소의 jQuery 래퍼를 생성한다.
4. 인자로 function을 지정하면, 그는 $(document).ready() 메서드와 동일하다.
$(document).ready();
jQuery가 제공하는 이벤트 메서드 중 하나인데요. 문서의 DOM 요소들을 조작 가능한 시점이 되 상면 자동으로 호출이 되는 이벤트 메서드라고 보시면 됩니다. 굳이 비교하자면, window.onload 이벤트와 유사한 것이라고 보면 되겠네요.
1. jQuery 셀렉터
jQuery의 가장 강력한 부분은 HTML DOM을 마음대로 트래버스 즉, 순회 탐색할 수 있다는 것으로 CSS 셀렉터를 사용하여 원하는 개체를 탐색할 수 있습니다
div p라는 셀렉터는 현재 문서 상에서 div 요소의 자식으로 존재하는 모든 p 요소들에 적용되며, #loginID는 loginID라는 id 값을 가진 요소에, .Columns는 class 어트리뷰트 값으로 Columns를 갖는 모든 요소에 적용되는 것이죠.
이러한 셀렉터를 그대로 jQuery에서 사용할 수 있다는 것은 놀랍습니다. jQuery에서는 원하는 DOM 요소의 그룹을 찾기 위해서 $(selector) 혹은 jQuery(selector)과 같은 표현식을 사용하기에, 위의 3가지 셀렉터를 다음과 같이 사용할 수 있습니다.
$("div p") 혹은 jQuery("div p")
$("#loginID") 혹은 jQuery("#loginID")
$(".Columns") 혹은 jQuery(".Columns")
그리고, 각각의 표현식은 각 DOM 요소의 확장 개체인 jQuery 개체 집합을 반환한다. DOM 요소를 직접 반환해주는 것이 아니라 그의 래퍼(Wrapper)인 jQuery 개체로 반환해 주기 때문에 직접 DOM 요소를 제어할 때보다 훨씬 편하고 쉽게 개체를 제어할 수 있다는 장점이 있습니다.
jQuery는 이러한 기본적인 CSS 셀렉터 외에 고급 CSS 셀렉터도 지원합니다
$("p a")와 $("p > a")의 차이점은 전자가 p요소 하위에 존재하는 모든 a 요소를 선택한다면, 후자는 p 요소 바로 아래의 자식으로 놓여있는 a 요소만을 선택한다는 것이 차이입니다.
$("p a")는 1.aspx 링크와 2.aspx 링크 모두를 선택하지만, $("p > a")는 2.aspx 링크만을 선택한다는 것이죠.
jQuery가 지원하는 CSS셀렉터 들
2. jQuery 셀렉터 : 기본 필터
기본적인 셀렉터에 더하여, 다양한 셀렉터 필터들도 제공한다.
필터는 말 그대로 걸러내는 역할을 합니다. jQuery는 위치를 기반으로 필터링 하거나, 하위 자식들을 필터링할 수 있게 한다거나, 컨텐트를 기반으로 필터링하는 등 다양한 방식으로 원하는 요소들을 필터링하여 선택할 수 있게 합니다. 그리고, 대부분의 필터는 : 을 시작문자로 사용하는 단어들입니다. 이러한 필터는 일반적으로 기본 셀렉터에 덧붙여 사용하곤 하지만, 단독으로 사용할 수도 있다.
각각의 필터는 셀렉터로서 독립적으로 사용될 수도 있고, 다른 셀렉터와 함께 사용할 수도 있습니다. 더불어, 여러 필터를 이어서 사용할 수도 있다.
ex)
$(":header:eq(0)").css("font-weight", "bold").css("color", "blue");
셀렉터 대상에 대해서 css()라는 메서드를 연달아 사용하는 것을 볼 수 있죠? 이를 메서드 체인이라고 하는데요. jQuery가 제공하는 모든 메서드는 그 반환값(return value)이 효과가 반영된 jQuery 개체이기 때문에 이런 식으로 메서드를 이어서 사용할 수가 있습니다
var jQ = $(":header:eq(0)")
jQ = jQ.css("font-weight", "bold");
jQ = jQ.css("color", "blue");
와 동일하다 할 수 있다는 것이죠. 하지만, 이러한 방식은 직관적이기는 하지만 소스가 길어지는 단점이 있기에, 일반적으로는 메서드 체인으로 작성하곤 합니다
3. jQuery 셀렉터 : 컨텐트 필터와 자식 필터
b:contains('j')
div:has('ul')
table.nameTable td:empty
.nameTable td:contains('F')
table.nameTable tr:eq(0)
첫 번째 셀렉터는 "j"라는 단어를 포함하는 모든 b 요소들을 선택합니다.
두 번째 셀렉터는 모든 div 요소들 중에 ul 요소를 가지고 있는 div 만을 선택합니다.
세 번째 셀렉터는 nameTable이라는 css 클래스가 지정된 table들 중에서 자식 요소인 td 내부에 텍스트 값이 없는(또는 자식요소가 없는) 모든 td를 선택합니다.
네 번째 셀렉터는 nameTable이라는 css 클래스가 지정된 요소들 중에서 그 내부의 td가 텍스트로 "F"란 단어를 포함하고 있는 모든 td를 선택합니다.
마지막 셀렉터는 이미 이전에 다루었던 것이라 굳이 설명할 필요가 없어보이긴 하지만 복습의 차원에서 설명하자면, nameTable이라는 css 클래스가 지정된 table 내의 tr 중에서 첫번째 tr을 선택합니다
만일, 문서 내에 table 요소가 한 개만 존재하고, 그 table에 nameTable 이라는 css 클래스가 적용이 되었다면, 다음의 셀렉터는 모두 같은 것을 선택한다는 것!
$("table.nameTable tr")
$(".nameTable tr")
$("table tr")
$("tr")
처음 이 필터를 접할 경우에는 이전에 다루었던 기본 필터 중 :first, :last와 유사한 필터가 아닐까 하고 생각할 수 있는데요. 사실 이들은 기존의 필터와 상당한 차이가 있습니다.
:first, :last 필터가 단일 요소를 선택하는 반면, 자식 필터들은 단일 요소가 아닌 해당 요소들의 집합을 선택한다는 것이 차이입니다. 예를 들어, 다음 두 셀렉터의 차이를 한번 생각해 볼까요?
td:first
td:first-child
얼핏 보기에는 같은 요소를 선택할 것처럼 보이는 이 둘은 확실한 차이를 보입니다. 즉,
td:first는 현재 테이블 안에서 첫 번째로 나오는 td 하나 만을 선택하는 반면, td:first-child는 현재 테이블 안에서 나오는 첫 번째 수준의 td들을 모두 선택한다는 것이죠.
4. jQuery : 폼 필터 및 조작 메서드(each등)
모든 입력 컨트롤을 선택하고 싶다면 $(":input") 라고 작성하면 되고, 체크박스만 선택하고 싶다면 $(":checkbox")라고 jQuery를 작성하면 됩니다. 히든 필드는 $(":hidden") 이라고 작성해서 선택할 수 있다!
일반적으로 $("input#UserID")이나 $("input.required") 와 같이 특정 목적을 위한 입력 컨트롤러로 사용되기도 한다.
jQuery 필터중에는 체크박스 중 체크된 것들을 모두 알아온다던가, 셀렉트 컨트롤들 중에서 선택된 것들을 알아낸다던가 하는 작업을 보다 쉽게 해주는 필터 들이 있다!
전과 비교했을 때, if (sports[i].checked == true){ .. } 와 같은 코드를 사용할 필요가 없게 된 것이죠. 이미 필터를 통해서 체크된 요소들만 가져와진 상태니까요 ^^.
each()메서드
jQuery 개체가 제공하는 메서드로서, 모든 일치된 개체들에 대해서 순차적으로 특정 함수를 수행할 수 있게 해주는 메서드입니다. 문법은 다음과 같다.
jQuery(
selector).each(
function );
each() 메서드 안에 인자로 사용하는 것은 역시나 또 함수입니다(jQuery는 거의 인자로 함수를 사용합니다). 그리고, 역시나 주로 익명 함수를 사용하게 되죠. 해서, 일반적으로 다음과 같은 구문을 가지게 됩니다.
jQuery(selector).each( function(i) {
//.. 루프 안에서 할 일을 작성
});
5. jQuery : 조작 메서드
요소에 값을 지정한다거나, 특정 요소의 값을 읽어온다거나 하는 작업을 포함해서, 동적으로 요소 자체를 생성, 삭제, 복사, 제거하는 기능들을 의미한다.
jQuery의 조작 메서드 중 하나의 카테고리인 요소의 내용을 다루는 메소드로는 다음과 같은 것들이 있다.
'text() 메서드는 해당 개체가 가지고 있는 컨텐트를 텍스트로 반환하는 메서드입니다. 이와 유사한 메서드로는 html()이 있는데요. 이는 개체가 포함하고 있는 html 컨텐트를 반환하는 메서드입니다. 이 메서드들은 인자를 사용하지 않으면 값을 가져오는 역할을 하지만, 인자로 값을 지정하면 그 값으로 원래의 값을 바꾸는 역할을 합니다.
text() 메서드의 재미있는 점은 개체의 컨텐트가 html 요소들을 포함하고 있다고 해도, 다 무시하고 텍스트만을 반환한다는 점입니다. 즉, <span><b>taeyo</b></span> 와 같은 span 개체가 있을 때, 이 span 개체에 대해서 text()를 수행하면, 반환값은 내부 html을 제외한 "taeyo"가 되고요. html() 메서드를 사용하면 <b>taeyo</b>를 반환한다는 것이죠.'
이어지는 메서드들은 특정 요소나 개체 집합을 다른 요소의 "내부"에다가 앞, 뒤로 덧붙이는 기능을 제공하는 메서드들입니다.
append(content) 메서드는 이름이 의미하는 바가 명확하기에, 쉽게 이해할 수 있을 것입니다. 인자로 지정된 content를 jQuery 개체 내부에 덧붙이는 것이니까요. 예를 들어, 다음과 같은 표현이 있다고 가정해 봐요.
$("b.link").append("(클릭)");
이는 link라는 css 클래스를 갖는 B 태그 내부에 "(클릭)" 이라는 문자열을 추가하는 예입니다. B 태그 내부 뒤쪽에 덧붙이는 것이기에 "(클릭)"이라는 단어도 당연히 굵게 표현될 것입니다. 즉, 다음과 같은 최종 html이 형성된다는 것이죠.
<b class="link">굵은 글자임 (클릭)</b>
appendTo(selector) 메서드는 append와는 덧붙이기의 대상이 반대이며, 더불어, 셀렉터에 의해 일치된 대상 모두에게 덧붙여진다.
$("#linkText").appendTo("a.link");
이는 #linkText 라는 아이디를 갖는 요소를 얻어서, 그를 link라는 css 클래스를 갖는 "모든" 하이퍼링크 뒤에 덧붙이게 됩니다. 그러면서, 원래의 #linkText 요소는 사라집니다. 원본 개체는 복사되면서 제거되는 것이죠. 더불어, 다음과 같은 구문도 가능합니다.
$("<font>(클릭)</font>").appendTo("b");
이는 <font>(클릭)</font>라는 태그 문자열을 동적으로 생성한 뒤, 그를 모든 B 태그의 뒤에 덧붙이는 역할을 합니다
after 메서드는 앞서 설명한 append 메서드와 눈에 보이는 결과는 유사합니다. 다만, 태그 내부에 덧붙이는 것이 아니라, 태그 바깥쪽에 덧붙인다는 차이가 있지요. 예를 들어, 다음 구문을 보도록 해요.
$("a").after("<font>(클릭)</font>");
이는 모든 하이퍼링크 바로 뒤에 "<font>(클릭)</font>" 이라는 태그 문자열을 덧붙이는 구문입니다. 해서, 결과로 다음과 같은 태그가 구성되는 것이죠.
<a href="http://taeyo.net">태오 사이트</a><font>(클릭)</font>
만일, after 메서드 대신 append 구문을 다음과 같이 사용했다면,
$("a").append("<font>(클릭)</font>");
이는 다음과 같은 결과 태그를 구성했을 것입니다.
<a href="http://taeyo.net">태오 사이트<font>(클릭)</font></a>
복사 관련 메서드(clone)는 약간의 부연 설명을 드릴 필요가 있는데요. 인자로서 true를 지정하게 되면, 단순히 요소만을 복사하는 것이 아니라, 그 요소에 달려있는 이벤트 처리기(예, click, mouseover)등도 복사가 된다는 것입니다. 인자가 없는 기본 clone() 메서드로 복사하게 되면, 요소 자체만 복사될 뿐, 해당 요소에 달려있는 이벤트 처리기들은 복사가 되지 않습니다. 해서, 이벤트 처리기까지 복사하고 싶다면 반드시 clone(true) 메서드를 사용해서 대상을 복사해야 한다는 점에 주의하세요.
6. jQuery : 탐색 메서드
개체들의 집합에서 다시금 특정 개체를 찾거나, 필터하거나, 추가하는 등의 작업을 위해 지원되는 API 메서드들의 그룹
셀렉터를 통해서 1차적으로 일치되는 집합을 얻어낸 후, 그 집합에 대해서 사용할 수 있는 메서드
eq(index)라는 메서드는 사실 :eq(index) 라는 셀렉터 필터와 거의 동일합니다. 하나는 메서드이고 하나는 셀렉터 구문이라는 차이만 있는 것이죠. 다음 예제 코드를 한번 보세요.
$("div:eq(1)").addClass("blue");
$("div").eq(1).addClass("blue");
첫 번째 구문은 이미 익숙한 셀렉터이죠? 다들 아시겠지만, 현재 문서에 있는 div 중 2번째로 등장하는 div를 얻어내는 셀렉터입니다. 그리고, 그 요소에 대해 blue 라는 css 클래스를 적용하고 있습니다.
이는 eq() 메서드를 사용하는 두 번째 구문처럼 작성할 수도 있습니다.일단 모든 div들을 셀렉트한 다음, 그 중 2번째 개체를 얻어내기 위해서 eq(1)이라는 메서드를 사용하는 것이죠. 사실, 이 둘은 결과적으로 동일합니다. 그렇다면, 어떤 방법을 쓰던지는 우리의 맘일까요? 그럼요~ 여러분의 마음입니다. 다만!!!
eq() 메서드를 사용한 경우에는 end()라는 엄청난 초능력자 메서드의 도움을 받아 이전 상태로 돌아갈 수 있다는 장점이 있습니다.
end() 메서드 :
현재 일치된 개체 집합을 변경하여, 방금 일어난 "파괴적인 작업" 직전의 상태로 되돌린다.
"모든 짝수 번째 div를 구한 다음, 그 중 첫 번째 div는 orange라는 배경색을 적용하고, 두 번째 div는 blue 배경색을 적용하라"
end() 메서드를 모르는 상황이었다면 여러분은 이를 다음과 같이 작성할 듯 합니다.
$("div:odd").eq(0).css("background", "orange");
$("div:odd").eq(1).css("background", "blue");
우선, $("div:odd")를 통해서 짝수번째 div들을 구한 다음, eq() 메서드를 사용해서 그 중 첫 번째와 두 번째 요소에 각각 접근하는 것이죠. 코드가 두 줄이라는 것은 그렇다치더라도, 각각에 대해서 동일한 검색을 두번이나 반복하는 부분은 썩 마음에 들지 않습니다.
$("div:odd")
.eq(0).css("background", "orange")
.end() // $("div:odd")와 동일
.eq(1).css("background", "blue");
여기서 end()는 eq(0)을 하기 직전의 상태로 되돌리는 역할을 합니다. 고로, end()를 사용하면 단 한줄의 메서드 체인으로 원하는 작업을 마무리 할 수 있게 되는 것입니다.
filter(expr)은 결과적으로는 일반 셀렉터를 통한 검색하는 것과 동일하다고 보시면 됩니다. 다만, 셀렉터는 문서상에 존재하는 개체들을 대상으로 검색한다면, 이는 메모리상에 존재하는 개체 집합을 대상으로 필터링을 한다는 부분에서 차이가 있습니다. 즉, 셀렉터에 의한 1차적 검색 집합에 대해서 다시 추가적으로 필터링(걸러냄)을 하고 싶은 경우에 사용하는 API 메서드라는 것이죠. 인자로는 필터링을 위한 표현식을 제공할 수 있고요. 그 표현식과 매치되지 않는 모든 요소들을 개체 집합(메모리)에서 제거하여 필터링된 결과를 얻습니다.
반면, 유사한 API로 Filter(func)도 있는데요. 이는 인자로 표현식이 아닌 함수를 사용하지요. 즉, 필터링(걸러냄)을 함수를 통해서 보다 세밀하게 제어하고 싶은 경우에 사용합니다. 필터링 조건이 일반적인 표현식으로 설명하기 어려운 경우에 별도의 함수로 작성을 해서 그 안에서 어떻게 필터를 수행할 것인지를 지정하는 것이죠.
가장 간단하게 예를 들면, 다음 2개의 표현은 결과적으로는 동일하다고 볼 수 있습니다.
$("div:odd")
$("div").filter(":odd")
다만, 앞의 예제와 마찬가지로 filter 메서드를 사용한 경우는 end() 메서드의 도움을 얻어 이전 상태로 되돌릴 수가 있다는 장점이 있죠.
7. CSS 와 attr 메서드
여러 CSS 속성을 한번에 설정할 수 있는 css(properties) 라는 오버로드 메서드가 존재한다는 것하고요. CSS Class를 편하게 추가했다 제거했다 할 수 있게 하는 toggleClass()라는 메서드가 제공된다!!
$("img").attr("title", function(i) {
return (i + 1) + "번째 이미지입니다";
});
코드는 모든 <img> 들을 가져와서 그들의 title 어트리뷰트의 값을 동적인 문자열로 설정하는 예입니다. 두 번째 인자로 function이 사용되고 있는 부분이 재미있는 부분입니다. 즉, 그 함수의 반환 값이 결과적으로 img의 title 어트리뷰트 값이 되는 것입니다. function(i)의 인자인 i는 0부터 시작하는 요소의 인덱스 값이기에, 상기 결과에 의해서 각각의 이미지들은 “1번째 이미지입니다”, “2번째 이미지입니다”와 같은 title을 갖게 됩니다.
7. jQuery : Event
프로그래밍에서의 이벤트란 사용자의 어떤 액션(개체를 클릭하거나, 마우스를 움직이는 행동)에 의해서 야기되는 사건을 의미하며, 그러한 이벤트에는 클릭, 마우스 오버, 키 입력 등이 있습니다. 그리고, 일반적으로 그러한 이E벤트가 발생하는 경우 특정 로직을 수행하기 위해서 해당 이벤트와 특정 메서드를 연결해 놓곤 하는데요. 이러한 연결을 이벤트 처리기 매핑(event hanlder mapping)이라고 이야기하며, 매핑에 의해서 연결된 메서드들을 이벤트 처리기라고 합니다. Click, MouseOver, KeyPress 등등을 알고 계시죠? 그렇습니다. 이들이 이벤트 처리기들입니다
MyBtn 이라는 아이디를 갖는 버튼에게 클릭 이벤트 처리기를 매핑 예)
$("#MyBtn").bind("click", function() {
alert("누가 내 버튼을 클릭한 것이냐?");
});
첫 번째 인자로 사용하는 이벤트 명
이미 특정 이벤트에 매핑되어 있는 처리기를 제거하기 위해서는 unbind 메서드를 사용합니다.
사용 예는 다음과 같습니다.
$(
"#MyBtn").unbind("click");
일회성 이벤트 처리를 지원하기 위한 one 이라는 메서드
$(
"#MyBtn").one("click", function() {
alert("누가 내 버튼을 클릭한 것이냐?");");
});
trigger() : 특정 이벤트를 코드를 사용해서 일으키기 위한 메서드입니다. 즉, 실제로 사용자가 클릭 액션을 하지 않았음에도, 클릭을 한 것처럼 이벤트를 일으키는 코드라는 것입니다.
$(
"#MyBtn").trigger("click");
--------------------------------------------------------------------------------------------------------
자주 사용하는 이벤트들에 대해 각각 특별한 이벤트 도우미를 제공하고 있습니다
$("#MtSnow").click(function() {
alert("...");
});
--------------------------------------------------------------------------------------------------------