Prototype에서 jQuery로 옮겨타기

Similar documents
제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Prototype 분석 - Element 오브젝트 메서드

SproutCore에 홀딱 반했습니다.

쉽게 풀어쓴 C 프로그래밍

Building Mobile AR Web Applications in HTML5 - Google IO 2012

Microsoft PowerPoint - web-part01-ch10-문서객체모델.pptx

Ext JS À¥¾ÖÇø®ÄÉÀ̼ǰ³¹ß-³¹Àå.PDF

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

Javascript.pages

웹개발을위한 ComponentOne 사용법 (2) 권대건 부산대학교컴퓨터공학과 Abstract 최근웹개발이활성화되면서전문가를위한여러가지 Tool 웹애플리케이션형태로제공하는경우가늘고있다. ComponentOne 은.NET 기반의 UI C

Microsoft PowerPoint - web-part02-ch16-이벤트.pptx

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

Microsoft PowerPoint - web-part02-ch15-문서객체조작.pptx

3장

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

PowerPoint 프레젠테이션

Week8-Extra

PowerPoint Template

AMP는 어떻게 빠른 성능을 내나.key

PowerPoint Presentation

- 이벤트의처리 <input type= button id= button1 value= 확인 /> <input type= button id= button2 value= 확인 /> 자바스크립트인경우 : document.getelementbyid( button1 ).oncl

2파트-07

zbrush 4r7 p3 crack macintoshinstmank

PowerPoint 프레젠테이션

Javascript

Overall Process

섹시한 자바스크립트 코딩 컨벤션

쉽게 풀어쓴 C 프로그래밍

Index

<B3EDB9AEC0DBBCBAB9FD2E687770>

C H A P T E R 2

PowerPoint 프레젠테이션

jQuery.docx

untitled

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx

chap 5: Trees

PowerPoint Presentation

歯세대갈등국민조사97.PDF

Microsoft PowerPoint - aj-lecture1-HTML-CSS-JS.ppt [호환 모드]

ibmdw_rest_v1.0.ppt

¼Òâ¹Ý¹®Áý¿ø°í.hwp

C# Programming Guide - Types

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Syrup Store O2O Marketing Platform/Solution

슬라이드 1

adfasdfasfdasfasfadf

슬라이드 1

PowerPoint Presentation

Node.JS와 Express를 이용한 디렉터리 파싱

PowerPoint 프레젠테이션

Microsoft PowerPoint - web-part02-ch13-기본.pptx

슬라이드 1

Modern Javascript

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

jquery 를이용하여웹위젯 (Web Widget) 을만드는방법 원제 : How to build a web widget (using jquery) Published on 15

XSS Attack - Real-World XSS Attacks, Chaining XSS and Other Attacks, Payloads for XSS Attacks

위클리 초이스

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드]

HTML5가 웹 환경에 미치는 영향 고 있어 웹 플랫폼 환경과는 차이가 있다. HTML5는 기존 HTML 기반 웹 브라우저와의 호환성을 유지하면서도, 구조적인 마크업(mark-up) 및 편리한 웹 폼(web form) 기능을 제공하고, 리치웹 애플리케이 션(RIA)을

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

아이폰/아이팟 터치용 웹 애플리케이션 개발 팁 12개

INDEX 들어가기 고민하기 HTML(TABLE/FORM) CSS JS

JVM 메모리구조

Design Issues

쉽게 풀어쓴 C 프로그래밍

untitled

어댑터뷰

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

MasoJava4_Dongbin.PDF

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Web Scraper in 30 Minutes 강철

untitled

PowerPoint 프레젠테이션

untitled

PowerPoint 프레젠테이션

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

제11장 프로세스와 쓰레드

제8장 자바 GUI 프로그래밍 II

SIGIL 완벽입문

What Is CSS? Stands for Cascading Style Sheets. Is a simple mechanism for adding style (e.g. fonts, colors, spacing) to Web documents. Styles define h

SOFTBASE XFRAME DEVELOPMENT GUIDE SERIES ActiveX 컴포넌트가이드 서울특별시구로구구로 3 동한신 IT 타워 1215 호 Phone Fax

본보고서는 yfiles AJAX에대해소개하고, 구현을위해필요한서버 / 클라이언트의구성을알아보고자한다. 더불어간단한예제를통해어플리케이션이어떻게동작하는지소개한다. 2장은 yfiles AJAX를알기위해필요한개념에대해서술한다. 3장에서는 yfiles AJAX의서버와클라이언트가

Microsoft PowerPoint 세션.ppt

Reflow 원인과 마크업 최적화 Tip

HTML5

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

JQuery최종-부록c( )

Microsoft PowerPoint - web-part01-ch09-브라우저객체모델.pptx

UI TASK & KEY EVENT

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Network Programming

Lab1

WebGL 레슨 3 - 회전 운동

PowerPoint Template

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Jwplayer 요즘 웹에서 동영상 재생을 목적으로 많이 쓰이는 jwplayer의 설치와 사용하기 입니다. jwplayer홈페이지 : 위의 홈페이지에 가시면 JWplayer를 다운 받으실 수 있습니다. 현재 5.1버전

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

HTML5

Domino Designer Portal Development tools Rational Application Developer WebSphere Portlet Factory Workplace Designer Workplace Forms Designer

Transcription:

Created by Firejune at 2008/11/10, Last modified 2016/09/11 Prototype에서 jquery로 옮겨타기 jquery는 겸손한(unobtrusive) 자바스크립트를 위한 자바스크립트 라이브러리다. jquery는 태생적으로 BDD(Behavior driven development) 방법론을 지향하고 CSS 셀렉터를 사용하여 HTML 문서를 훓는 방법(traversing)에 기반한다. 반면에 Prototype은 태생적으로 CDD(Class driven development)를 지향하고 쉽게 자바스크립트 개발할 수 있도록 해준다. Prototype 라이브러리는 Ruby on Rails에서 아주 잘 지원되고 많은 헬퍼 함수들을 가지고 있다. - 내가 Prototype에서 jquery로 옮긴 이유 중에서... jquery.js에서 $()를 호출할때마다 거대한 jquery객체를 만들어내지는 않는다. jquery 객체들은 prototype-based-inheritance를 통해서 jquery를 상속받은 클론들이다. 이런 클론들은 delegation pointer를 가지고 원본(prototype)의 property와 method들을 참조하기 때문에 무겁지 않다. - Prototype vs jquery 중에서... Prototype기반으로 만들어진 프로젝트를 jquery로 옮기고 있습니다. jquery로 만들어진 것을 Prototype용으로 컨버전(conversion) 하는 작업은 간간히 해 왔지만 이런 경우는 처음이네요. 위와 같은 이유들도 있겠지만 조금 더 보태자면 야속하게도 약 9개월 동안 이렇다 할 업데이트가 이루어지지 않는 것과 지금은 jquery가 대세이기 때문이기도 합니다. 요즘 배포되는 자바스크립트 플러그인들을 보면 대부분이 jquery기반이라 것을 눈여겨 보지 않아도 알 수 있을 정도입니다.

Prototype에서 jquery로 컨버전하는 동안 주요한 변경내역을 기록해 보았습니다. 참고로 처음에 위치한 코드가 Prototype이고 아래쪽에 위치한 것이 jquery의 코드입니다. DOM selector $('element'); //=> DOM element object $('#element'); //=> jquery(array-like Object) object $('element'); //=> DOM element object $('#element').get(0); //=> DOM element object $('element1','element2','element3'); //=> Array $('#element1,#element2,#element3'); //=> jquery object element.down('div.item'); //=> DOM element object element.children('div.item'); //=> jquery object element.up('div.contents'); //=> DOM element object element.parent('div.contents'); //=> jquery object element.up('div.container'); //=> DOM element object element.parents('div.container:first'); //=> jquery object element.next('div.item'); //=> DOM element object element.next('div.item'); //=> jquery object element.previous('div.item'); //=> DOM element object element.prev('div.item'); //=> jquery object element.select('div.item'); //=> Array element.find('div.item'); //=> jquery object $('element').select('input[type="button"]'); //=> Array $('#element input[type=button]'); //=> jquery object

$$('#element a[href=#]')[0]; //=> DOM element object $('#element a[href=#]')[0]; //=> DOM element object element.select('input.cancel', 'input.submit', 'a.close'); //=> Array element.find('input.cance,linput.submit,a.close'); //=> jquery object element.nextsiblings('div.item'); //=> Array element.nextall('div.item'); //=> jquery object element.previoussiblings('div.item'); //=> Array element.prevall('div.item'); //=> jquery object 초반에 가장 이해하기 힘든것이 DOM 선택자였는데, '$'가 마치 오퍼레이터(operator) 처럼 사용되는 것은 비슷합니다. Prototype의 '$'는 보통 document.getelementbyid의 대역으로 사용되며, Element.prototype의 메서드들을 상속시키는 역할인 반면 jquery의 '$'는 CSS 선택자와 동일한 룰을 가지고 있으며, Prototype의 select 메서드를 혼용하거나 $$유틸리티를 사용하는 효과가 발생합니다. 단순히 선택 방법만 틀린것이 아니라 처리방법 역시 다릅니다. jquery의 '$'선택자에 의해 선택된 DOM 요소들은 배열화된 객체(Array-like Object)로 관리되는데 이것을 보통 'jquery 객체'라고 부르더군요. jquery에서 제공하는 여러 체인 메서드들은 jquery 객체화한 다음에야 비로소 혼용될 수 있습니다. 만약, Prototype과 마찬가지로 DOM 요소를 반환하게 하려면 'jquery 객체에 get(0)' 또는 '[0]'을 사용해야 합니다. 이 것은 더이상 체인 메서드를 사용할 수 없는 상태가 되기 때문에 '$'를 다시 호출하는 등 사용성 및 가독성을 떨어트릴 수 있으므로 가급적이면 변수에 할당하여 사용하거나 체인 메서드로 모두 처리할 것을 권장하고 있습니다. Prototype의 'down'과 'up'에 해당하는 'children'과 'parent'메서드는

서로 차이를 보입니다. Prototype의 경우 자식/부모 노드들을 순차적으로 검색하여 발견되는 첫번째 노드를 반환하는 반면, jquery는 첫번째 자식/부모 노드중에서 일치하는 것만을 찾아 반환합니다. 때문에 이를 대체하기 위해서는 때때로 'find'와 'parents'메서드를 혼용해야 할 필요가 있습니다. Event var expand = function(event) { event.element(); //=> DOM element object event.target; //=> DOM element object event.pointerx(); //=> absolute horizontal position for a mouse event event.clientx; //=> absolute vertical position for a mouse event event.pointery(); //=> absolute horizontal position for a mouse event event.clienty; //=> absolute vertical position for a mouse event event.stop(); // stop bubbling event.stoppropagation(); // stop bubbling }; element.observe('mouseup', expand); //=> DOM element object element.bind('mouseup', expand); //=> jquery object document.observe('dom:loaded', expand); //=> document object $(document).ready(expand); //=> jquery object element.stopobserving('mouseup', expand); //=> DOM element object element.unbind('mouseup', expand); //=> jquery object element.observe('click', expand); //=> DOM element object element.click(expand); //=> jquery object

Prototype에 익숙한 사용자라면 bind가 눈에 띨 것입니다. jquery에서 bind는 Prototype의 observe와 동일한 메서드로 볼 수 있습니다. 이 밖에도 jquery는 편이성을 위해 jquery 객체에 체인되는 이벤트 메서드들(keypress, mouseover, dblclick 등)을 제공하고 있습니다. Element element.remove(); //=> removed DOM element object element.remove(); //=> removed jquery object var img = new Element('img',{src:'/images/sample.gif',id:'my-img',alt:'img'}); //=> DOM element object var img = $('<img src="/images/sample.gif" id="my-img" alt="img">'); //=> jquery object var el= new Element('a',{href:'http://firejune.com',className:'link'}).update( 'ClickMe!'); //=> DOM element object var el = $('<a href="http://firejune.com" class="link">').html('clickme!'); //=> jquery object element.update('<p>hello!</p>'); //=> DOM element object element.html('<p>hello!</p>'); //=> jquery object element.insert({top:img}); //=> DOM element object element.prepend(img); //=> jquery object element.insert({bottom:'<p>hello!</p>'}); //=> DOM element object element.append('<p>hello!</p>'); //=> jquery object element.insert({before:el}); //=> DOM element object element.before(el); //=> jquery object element.insert({after:'<p>hello!</p>'}); //=> DOM element object element.after('<p>hello!</p>'); //=> jquery object

DOM 요소를 파싱할 때 주로 다루게 되는 메서드들입니다. jquery에서는 DOM 요소의 선택자로 사용되는 '$'를 그대로 재사용하여 엘리먼트를 생성하는 모습은 매우 인상적입니다. Style element.setstyle({width: '100px'}); //=> DOM element object element.css({width: 100}); //=> jquery object element.getstyle('width'); //=> '100px' element.css('width'); //=> '100px' element.getwidth(); //=> 100 element.width(); //=> 100 element.getheight(); //=> 100 element.height(); //=> 100 element.hide(); //=> DOM element object element.hide(); //=> jquery object element.show(); //=> DOM element object element.show(); //=> jquery object element.addclassname('active'); //=> DOM element object element.addclass('active'); //=> jquery object element.removeclassname('active'); //=> DOM element object element.removeclass('active'); //=> jquery object element.hasclassname('active'); //=> DOM element object element.hasclass('active'); //=> jquery object element.toggleclassname('active'); //=> DOM element object element.toggleclass('active'); //=> jquery object

엘리먼트 스타일과 관련해서는 서로 비슷한 양상을 보이지만, jquery의 경우 'css'메서드를 통해서 스타일을 부여하는 것과 값을 읽어내는 것이 동시에 이루어지고 있다는 점에서 차이가 있습니다. Enumerable elements.each((function(element, index) { //=> DOM element object, index }); elements.each(function(index, element) { //=> DOM element object, index }); elements.invoke('remove'); elements.remove(); 배열 객체를 다루는데에는 두말할 나위 없이 jqeury가 10점 만점에 10점입니다. 단, Prototype과 달리 jquery에서 each를 사용할 때 주의할 점은 index와 반환요소의 순서가 뒤바뀐 것 입니다. Ajax var form = $(formelement); new Ajax.Request(form.action, { method: form.method, paramitors: form.serialize(), onsuccess: function(transport) { //=> transport object(text or JSON or XML) }, onfailure: function(transport) {},

oncomplete: function(transport) {} }); $.ajax({ url: form.get(0).action, type: form.get(0).method, data: form.serialize(), success: function(transport) { //=> transport string or json object or xml node }, error: function(transport) {}, complete: function(transport) {} }); 응답해더의 'content-type'에 따라 결과물을 자동으로 분석하여 반환하는 Ajax 로직은 서로 닮았습니다만, jquery의 경우는 응답결과에 따라 자료형이 변경되어 넘어오는 반면, Prototype은 transport객체에 모든 상황이 반영되어 넘어옵니다. Effect element.fade({duration: 0.5}); // => instance of effect element.fadeout(500); //=> jquery object element.appear({duration: 0.5}); // => instance of effect element.fadein(500); //=> jquery object element.slideup({duration: 0.5, afterfinish: callback}); // => instance of effect element.slideup(500, callback); //=> jquery object element.slidedown({duration: 0.5, afterfinish: callback}); // => instance of effect element.slidedown(500, callback); //=> jquery object element.morph({

style: 'width: 100px; height: 100px; opacity: 0.5;', duration: 0.5, transition: Effect.Transitions.linear, afterfinish: callback }); // => instance of effect element.animate( {width: 100, height: 100, opacity: 0.5}, // style properties 500, // duration 'linear', // easing callback ); //=> jquery object jquery는 Scriptaculous의 effect.js를 포함해야 지만 가능한 몇몇 애니메이션 효과를 추가작업 없이 사용할 수 있습니다. 애니메이션 코어를 내장하고 있기 때문입니다. 1차원적인 계산에서 그치는 Scriptaculous의 transition과는 달리 jquery의 easing은 p, n, firstnum, diff 총 4개의 인자로 구성되는 계산식은 매우 독창적인 변화를 만들어 낼 수 있는 구조를 가지고 있습니다. 그리고 jquery에는 Scriptaculous를 대신하는 ui.js가 있습니다. 다수의 UI 컴포넌트와 효과들로 구성되어 있으며, 메서드 단위로 파일이 나뉘어 있습니다. Browser detection Prototype.Browser.IE; //=> true or false $.browser.msie; //=> true or undefined Prototype.Browser.Webkit; //=> true or false $.browser.safari; //=> true or undefined Prototype.Browser.Gecko; //=> true or false $.browser.mozilla; //=> true or undefined

Prototype.Browser.Opera; //=> true or false $.browser.opera; //=> true or undefined jquery쪽이 더욱 간결해 보이네요. jquery를 사용할 때 가장 만족스러운 점은 싱글 혹은 멀티플 노드의 개념을 떨쳐 버림으로서 찾아오는 강력한 체인 메서드의 연결입니다. 익숙해 지기만하면 상당히 빠른 속도로 코딩을 작렬(?)할 수 있을 것으로 기대되지만, 역시 Prototype의 Class와 bind(function.prototype)를 혼용한 OO 클래스 지향 코딩을 구사할 수 없다는 것이 무척이나 아쉬운 점으로 남습니다. 그래서, Prototype의 쓸만한 코드들을 훔쳐 쓰려고 마음먹고 있죠. * 이 문서는 지속적으로 업데이트 될 예정입니다. Powered by TCPDF (www.tcpdf.org)