히야.. 전부터 계속 계획해 왔던 포스트, 1달여가 지나서야 이제야 씁니다 =ㅅ=;. 자바스크립트 관련 글 쓰는것도 거의 2달 가까이 됬네요.


그리고 몰랐는데, 도서관에서 우연히 프로토타입 관련 서적을 읽게 되었습니다. 찾아보니까 상당히 많더라고요... 이번 삽질의 결과물도, 요것의 도움을 크게 받았답니다 (!)

먼저 달러 메서드부터 시작합니다. 물론, 이 자바스크립트들을 사용하기 전에 프로토타입을 꼭 넣어 주셔야 한다는 것 잊지 마세요!

$(달러) 명령어


달러 메서드는 보통 요런 식으로 이용합니다
var obj = $('divLoading');

var(선언한다) obj(를) = $('test');[test라는 객체로]

이해 되셨나요? 간단하게 예제를 하나 만들어서 이해해 보면 좋겠네요.

대충 HTML 파일 하나 만들고, 다음과 같이 입력합니다.

<html>
<head>
<script type="text/javascript">
function showLayer()
{
$('test').style.display="";
}
function hideLayer()
{
$('test').style.display="none";
}
</script>
</head>
<body>
<div id="test">테스트입니다</div>
<a href="#" onclick="showLayer()">보여주기</a>
<a href="#" onclick="hideLayer()">숨기기</a>
</body>
</html>


샘플 보기


보시면 아시겠지만, 단지 달러 명령어 하나만으로 손쉽게 Element를 구하고, 수정할 수가 있습니다. 만약 달러 명령어가 없었더라면,
$('test').style.display="none";
부분을
document.getElementById('test').style.display="none";
라고 입력해야 할 것입니다. 코딩량이 2배로 늘어나는 셈이죠!
그리고 이런 식으로 객체에 접근할 시 프로토타입객체에서 지원하는 Previous(), Next(), Up(), Down()과 같은 DOM 트리 명령어를 사용할 수 있습니다. 이것 또한 프로토타입만의 상당한 강점이죠.
여기까지만 해도 상당히 괜찮은 명령어지만, 프로토타입 달러 명령어의 진수는 $$명령어에서 드러납니다.



$$(더블달러) 명령어


더블달러도 사용 그 자체에는 특별한 것은 없습니다.
var obj = $$('태그이름');
var obj = $$('태그이름.클래스이름');
하지만, 더블달러 명령어의 '태그이름' 속성은 CSS3를 지원합니다. 이것은 $$('태그이름.클래스이름');과 같은 명령어를 지원하도록 하게 합니다. 이것을 프로토타입 자바스크립트 프레임워크 없이 다시 코딩하면,
var obj = document.getElementByTagName("태그이름");
var res_obj:Array = new Array();
for (i=0; i<obj.length; i++)
{
if (obj.className.indexOf("클래스이름") != -1)
{
res_obj.push(obj);
}
}
이렇게 입력해야만 합니다. 코딩량이 졸지에 몇배가 늘어나 버렸군요 -_-;

$$ 메서드는 이렇게도 이용할 수가 있습니다.
$$('#container span[title]')
// ID가 container인 엘리먼트 안에, title이라는 속성을 가진 SPAN태그를 모두 가지고 온다

$$('#a[href="#"]')
// href 속성값이 #인 모든 링크

$$('li', 'span')
// li 태그와 span 태그를 모두 구한다

$$('div:[className~=clear]')
// 클래스명에 clear을 포함하는 div를 모두 가져온다

$$('div:not([className~=clear]')
// 클래스명에 clear을 포함하지 않는 div를 모두 가져온다

$$('div:empty')
// 내용이 없는 div를 가져온다
(이 내용의 일부는 위쪽 사진의 책에서 참조했음을 미리 알려드립니다 ^^;)

그리고 이 메서드가 each 명령어랑 합해질 경우, 위력은 더욱 강력해 집니다.
샘플로 위와 같은 소스를 여러분의 블로그에서 실행해 보세요.
$$('div.imageblock').each(
function (e) {
e.innerHTML = "<span style='background:#000000; color:#ffffff;'>여기에는 원래 사진이 들어가야 되는데 내가 접수하도록 하겠다!! 우하하!</span>";
} );

클릭하신 후에, 원래 사진이 있던 곳을 한번 눈여겨 봐 주세요!

이미 눈치 채신 분들도 있겠지만, 이것은 imageblock 클래스를 가진 레이어에 문자열을 집어넣는 명령어입니다. 원래 한 줄로 쓸수도 있지만 편의를 위해서 여러 줄로 갈라서 넣었답니다.

하지만 프로토타입 프레임워크 없이 이 소스코드를 쓴다면 몇줄이 될까요? 상상만 해도 끔찍합니다 -_-;
이처럼 프로토타입은, 자바스크립트를 가볍게 해줄 뿐만 아니라 W3C 기준의 통일, 또한 코드를 명료하게 하여 디버깅에도 큰 도움을 줍니다. 자바스크립트의 큰 혁명을 불러가지고 온 프레임워크라고 해도 과언이 아니죠 ^^.

부족한 글 이해하신 분이 몇이나 되실지 모르겠습니다(;;). 내부적인 중요한 문법을 알아봤으니, 다음에는 이쁘장한 효과로 무장한 Effect 클래스에 대해서 적어볼게요. 읽어주신 분들 감사합니다 ^^

댓글을 달아 주세요

  1. BlogIcon 影猫 2009/05/17 18:49
     addr - mod/del - rep

    우오~~!!
    뭔지는 모르겠습니다만, 뭔가 대단하군요... <- 어이

  2. BlogIcon Mitenisaki 2009/05/17 19:08
     addr - mod/del - rep

    어렵네... 내분야가 아니라서 그런지 =_=ㅋ

  3. BlogIcon 아카사 2009/05/17 19:32
     addr - mod/del - rep

    이 포스트를 읽으며 느낀건데,
    자바를 알아야 할것 같습니다.
    그런데, 난 자바를 할 줄 모릅니다.
    전 안되겠죠?ㅋㅋ

  4. BlogIcon 녹색이슬 2009/05/17 20:19
     addr - mod/del - rep

    음. 자바스크립트였군요. 하지만 전 자바를 싫어한다는(야)

    자바랑 C 비베 같이하니까 지난번의 대참사같이 C++에
    비베코드를 -_-;;;

    • BlogIcon 쿠나 2009/05/18 07:15
       addr - mod/del - rep

      ... 아... 그 현상.. (..)

      덕택에 이제 VB 할때 자꾸 끝에 문장마침(;)을 찍는 [털썩]

  5. BlogIcon 띠용 2009/05/17 20:27
     addr - mod/del - rep

    ㄷㄷㄷㄷㄷㄷ

  6. BlogIcon Bardisch 2009/05/17 20:36
     addr - mod/del - rep

    프로토타입 좋죠 ㅋㅋ
    요즘 Ajax 독학하면서 프로토타입의 진가를 맛보고있는 Bardisch군

    • BlogIcon 쿠나 2009/05/18 07:16
       addr - mod/del - rep

      오호오호 드디어 프로토타입 배우시는 분이 생기는구나 ㅋㅋ

  7. BlogIcon 초보 2009/05/17 20:59
     addr - mod/del - rep

    저 역시 뭐지는 모르겟지만 대단하네요 ㅇㅂㅇ

    • BlogIcon 쿠나 2009/05/18 07:16
       addr - mod/del - rep

      냄. 뭔지 모르는 아주 심오한 거죠 데헷.
      ㅠ_ㅠ 역시 이런쪽 글은 안되는건가 [털썩]

  8. BlogIcon 불법미인 2009/05/17 21:33
     addr - mod/del - rep

    진리는 자바임..;

    C? C++?

    자바쓰니 자바가 짱임..

    자바가 진리, 자바 만세..

    C++도 쓸만한데

    C는 근데 답이 없던..;

    • BlogIcon 쿠나 2009/05/18 07:17
       addr - mod/del - rep

      C나 C++이나 거기서 거기죠 뭐 ㅋㅋㅋ
      자바는 진짜 웹프로그래밍 언어중에선 최고인듯. 프로토타입은 그걸 또 패키지와 시켜주니까 대단한 것 같고 =ㅅ=;

    • BlogIcon 불법미인 2009/05/18 20:20
       addr - mod/del - rep

      저기..

      자바랑 자바 스크립트는 엄연히 다른데..

    • BlogIcon 쿠나 2009/05/18 21:17
       addr - mod/del - rep

      나님은 이런데 태클 걸면 마음아파하는데 흑흑 ㅠㅠ.
      뭐 틀린 말은 아니니까 수정하도록 할게요 ㅋㅋ

  9. BlogIcon Ari.es 2009/05/17 22:37
     addr - mod/del - rep

    자바라니 아니 자바라니

    이젠 완전히 모르겠음 ㄳㄳ

  10. BlogIcon uchiteyangsang 2009/05/17 22:37
     addr - mod/del - rep

    간지나는 자바군요..ㅇㅅㅇ

  11. BlogIcon lain 2009/05/18 00:54
     addr - mod/del - rep

    공부해볼 필요가 있는 스크립트로 보입니다. ㅎㅎ
    하지만 프로토타입이 간단하긴 해도 2중으로 함수(본인함수, Prototype 내장함수)를 돌리기 때문에 컴퓨터에 부담이 좀 갈 거 같네요;;

    • BlogIcon 쿠나 2009/05/18 07:18
       addr - mod/del - rep

      본인함수라기 보다는 함수를 씀으로서 프로토타입에서 호출을 하는 거죠 ^^;... 굳이 프로토타입이 아니더라도 요즘에는 jQuery등 수많은 자바스크립트 프레임워크가 나오고 있으니 사용자 입맛에 맞게 쓰면 된다고 생각합니다 :p

    • BlogIcon lain 2009/05/18 08:43
       addr - mod/del - rep

      그러니까 프로토타입 같은 범용함수는 비효율적일 수 있다는 말을 하려고 했어요.

      프로토타입은 사용자를 편하게 만들기 위한 스크립트지만 컴퓨터를 배려하진 않는다고 봅니다 :)

    • BlogIcon 쿠나 2009/05/18 20:45
       addr - mod/del - rep

      ㅎㅎ.. 맞는 소리죠.
      그런데 제가 한가지 빼먹은게 있네요;.. 프로토타입 책에서 나온 거지만 인용 좀 하자면 Prototype 메서드는 객체를 노드화시킬때 브라우저 렌더링 엔진이 Gecko엔진(ex:사파리, 크롬, 파이어폭스, etc)일때는 DOM3엔진을 이용하여 최적화한다고 들었습니다. [뭐 그래봐야 결국은 거기서 거기려나요]

  12. BlogIcon 청명 2009/05/18 07:48
     addr - mod/del - rep

    저는 자바는 뭔가 빠진듯한 느낌때문에 별로더군요. 뭔가 10%이상 부족한 느낌 -_-
    C++가 역시 진리......

    웹 프로그래밍에서는 뭐가 객첸지 도무지 모르겠음..... OTL

    • BlogIcon 쿠나 2009/05/18 20:46
       addr - mod/del - rep

      뭐가 객첸지 햇갈리는 이유가 그놈의 IE 때문입니다. 메서드를 요상하게 만들어놔서 W3C 기준안을 무력하게 만들어놨어요 -_-.. 그래서 prototype을 쓰면 훨씬 깔끔하게 이용할수가 있다는 겁니다 [저도 그래서 자바스크립트 입문한지 얼마 되지도 않았는데 요정도까지 구현이 되더라고요.. 신기신기 =_=a]

  13. 이버리 2009/05/18 16:36
     addr - mod/del - rep

    좋은 팁감사합니다 퍼가요~^^
    워우 옆에.. 페이트? 맞나..ㅎㅎ

    • BlogIcon 쿠나 2009/05/18 20:47
       addr - mod/del - rep

      부족한 정보 도움되셨다면 저야 감사할 따름이죠 ^^;
      / 댓글창에 페이트 맞아요.. 만은, 아무것도 없이 비우기에는 그냥 왠지 허전해서 넣긴 한건데 (...)

  14. BlogIcon 함트 2009/06/23 10:04
     addr - mod/del - rep

    var objs = document.getElementsByTagName('div');
    for(var i = 0 ; i < objs.length ; i++)
    {
    if(objs[i].className=='imageblock')
    objs[i].innerHTML = '내가 접수한다';
    }

    이것도 몇줄 안되는데... ㅎㅎ

< 1 ... 377 378 379 380 381 382 383 384 385 ... 832 > Top