Meadows of wild horses

Blog...

Catalyst

| Comments

기본 화면 출력후 무엇을 하지?

list.tt 페이지를 만들어 기본 게시판 화면을 꾸민다

root/templates/bootstrap/src/list/index.tt

아래와 같이 기본 .tt를 생성한다. 아직까지는 list명단에 자료가 없기 때문에 아무것도 보이지 않는다.

index.tt

DonDB.sql을 만들어 준다.

INT == int(11), signed는 디폴트로 정의 되어 있다.

DEFAULT값은 절대 NULL이 되게 하여서는 안된다.

timestamp로 잡을시 문제가 될수 있다.

DATETIME는 만든날짜와 수정된 날짜가 있어야 문제를 줄일수 있다.

CREATE TABLE charge (
id         INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
applicant  VARCHAR(32) NOT NULL DEFAULT '',
title      VARCHAR(128) NOT NULL DEFAULT '',
content    TEXT NOT NULL DEFAULT '',
created_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
updated_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DB 적용

$ mysql -u ID -p Don_db < DonDB.sql

DB 구성(Model)은 어떻게 할까?

$ ./script/silex_web_donnenwa_create.pl model DonDB DBIC::Schema \ 
Silex::Schema create=static dbi:mysql:DonDB_db:localhost ID PASSWORD

lib/Silex/Web/Donnenwa/Model/DonDB.pm 생성됨

DB 구성 하면 늘어나는 모듈이 잇다.

Makefile.PL 추가

require Catalyst::Model::DBIC::Schema
require DBD::mysql

인스톨

$ carton install

DB 구성을 하면 어떻게 가져오게 될까?

lib/Silex/Web/Donnenwa/Controller/List.pm

sub index :Path :Args(0) {
my ( $self, $c ) = @_;

my $rs = $c->model('DonDB')->resultset('List');
$c->stash->{lists} = [ $rs->all ];
}

마지막 화면 구성

root/templates/bootstrap/src/list/index.tt index.tt 안에 템플릿 툴킷 집어넣는데라고 표시 된곳에 집어 넣는다

[% FOREACH list IN lists %]
  <!-- 행 시작 -->
  <tr>
<!-- 번호 -->
<td height=20 bgcolor=white align=center>
  <p>[% list.id %]</p>
</td>
<!-- 번호 끝 -->

<!-- 제목 -->
<td height=20 bgcolor=white>&nbsp;
  <p>[% list.title %]</p>
</td>
<!-- 제목 끝 -->
<!-- 이름 -->
<td align=center height=20 bgcolor=white>
  <font color=black>
    <p>[% list.name %]</p>
  </font>
</td>
<!-- 이름 끝 -->
<!-- 날짜 -->
<td align=center height=20 bgcolor=white>
  <p>날짜 다음</p>
</td>
<!-- 날짜 끝 -->
<!-- 조회 수 -->
<td align=center height=20 bgcolor=white>
  <p>조회수 나중에 구현</p>
</td>
<!-- 조회 수 끝 -->
  </tr>
<!-- 행 끝 -->
[% END %]

가져 왔다 근데 한글이 깨진다 (DB 데이터 집어 넣을때도 utf8적용이 되야 한다.)

lib/Silex/Web/Donnenwa/Model/DonDB.pm

connect_info => {
    dsn => 'dbi:mysql:auth_db:localhost',
    user => 'don',
    password => 'gksdud09',
}

추가
    mysql_enable_utf8 => 1,

connect_info => {
    dsn => 'dbi:mysql:auth_db:localhost',
    user => 'don',
    password => 'gksdud09',
    mysql_enable_utf8 => 1,
}

추가사항

현재 상태는 DB에 등록된 내용이 들어가 있는지 확인과 출력이 되는지 확인을 위해 만들어 졌다.

sql및 write버튼 미동작등 수행 할것이 많으 므로 기본 와꾸만 잡혀서 정보가 제대로 넘어 오는지 확인만 하자.

[참고]

Catalyst::Model::DBIC

Catalyst::Model::DBIC::Schema

Catalyst

| Comments

init catalyst project in silex

카탈리스트 시작을 위해 Helper를 준비합니다.

$ git clone git://github.com/aanoaa/Catalyst-Helper-View-TTSilex.git
...
$ git clone git://github.com/aanoaa/Catalyst-Helper-Carton.git
...
$ cd Catalyst-Helper-View-TTSilex/
$ git checkout develop
$ dzil build
...
$ cd Catalyst-Helper-View-TTSilex-v0.0.1/
$ perl Makefile.PL
...
$ make && make install
...
$ cd ../../Catalyst-Helper-Carton/
$ dzil build
$ cd Catalyst-Helper-Carton-v0.0.1/
$ perl Makefile.PL
...
$ make && make install

catalyst.pl을 사용 하여 Foo::Web을 생성합니다.

$ cd ~/yourworkspace/
$ catalyst.pl Foo::Web
...

파일명을 수정하여 줍니다.

$ cd Foo-Web/
$ mv foo_web.psgi app.psgi

스크립트를 사용하게 되면 .conf.new 파일이 생성이 되며 .conf파일에 붙여줍니다.

$ script/foo_web_create.pl view Bootstrap TTSilex
...
$ vi foo_web.conf <<--- foo_web.conf.new

카툰을 설치 하고 Make 파일에 추가 하라는 메세지가 나옵니다.

$ script/foo_web_create.pl Carton
...
$ vim Makefile.PL    # add dependencies

위의 단계에서 명시된 모듈 및 추가 필요 모듈

//명시
requires "Starman";
requires "Devel::Cover";
requires "Perl::Metrics::Lite";
requires "TAP::Formatter::JUnit";

//추가
requires 'Catalyst::Plugin::Unicode::Encoding';
requires "Catalyst::View::TT";

한글 인코딩 문제

$ lib/Foo/Web.pm

use utf8;
use Catalyst qw/
-Debug
ConfigLoader
Static::Simple
#추가
Unicode::Encoding
/;

인스톨

$ carton install
...

부분 인스톨

$ carton install <모듈네임> 합니다.

Controller 생성

$ script/foo_web_create.pl controller List

$ cd lib/Foo/Web/Controller
$ vi List.pm
// 주석처리
# $c->response->body('Matched Foo::Web::Controller::List in List.');

View 생성

$ mkdir root/templates/bootstap/src/list
$ cd root/templates/bootstrap/src/list
$ vi index.tt
  <p>나는 지금 한글을 테스트 중입니다.</p> 작성

실행

$ ./run

.gitignore

# inspire by github/gitignore
blib/
.build/
_build/
cover_db/
inc/
Build
Build.bat
.last_cover_stats
Makefile
Makefile.old
MANIFEST.bak
META.yml
MYMETA.yml
nytprof.out
pm_to_blib
# custom
local/
.sass-cache/
tt_cache/
.carton/
*.log
session
MYMETA.json
carton.lock

script/bootstrap.pl

이건 헬퍼 없습니다. 프로젝트마다 손으로 복사합니다.

https://gist.github.com/2761721

Learn jQuery 5장

| Comments

Source

예제.html

예제 css

예제 js

본문

속성 추가하기

id속성값을 개별적으로 attr()으로 적용 해주기 위해 each()를 사용하여 적용하여 주고 있다. index는 0부터 시작하여 증가한다.

$(document).ready(function() {
  $('div.chapter a[href*=wikipedia]').each(function(index) {
var $thisLink = $(this);
$(this).attr({
  'rel': 'external',
  'id': 'wikilink-' + index,
  'title': $thisLink.text() + '에 대한 자세한 정보는 위키 피디아에 있습니다.'
});
  });
});

앵커 삽입

앵커 위치를 정하기 위해 body에 prependTo()로 삽입한다. 앵커 버튼이 굳이 다 있을 필요는 없고 화면 밖에 존재 부터 하기 위해 p:gt(4) 5번째(0부터 시작) 문단 부터 적용 시킨다

$('<a href="#top">맨 앞으로 돌아가기</a>').insertAfter('div.chapter p:gt(4)');
$('<a id="top" name="top"></a>').prependTo('body');

주석 표시, 숫자 부여, 컨텍스트 연결

챕터가 끝난지점 후에 리스트 목록인 >ol<만들어준다. 클래스가 footnote

$('<ol id="notes"></ol>').insertAfter('div.chapter');
$('span.footnote').each(function(index) {
  $(this).before('<a href="#foot-note-' + (index+1) +
'" id="context-' + (index+1) + '" class="context"><sup>'
+ (index+1) + '</sup></a>')
  .appendTo('#notes')
  .append( '&nbsp;(<a href="#context-' + (index+1) + '">context </a>)' )
  .wrap('<li id="foot-note-' + (index+1) + '"></li>');
});

Command Action

Learn jQuery 4장

| Comments

Source

예제.html

예제 css

예제 js

본문

인라인 CSS 변경

폰트 크기 구하기

$('div.speech').css('fontSize')

반환된 값이 숫자와 단위 문자열이 합쳐져 있으므로 각각 나누기 위해 변수를 따로 저장 변수 이름에 $는 변수명에 쓰이며 jQuery객체를 저장하고 있다는 의미로 사용된다.

var $speech     = $('div.speech');
var currentSize = $speech.css('fontSize');

문자열에서 숫자까지만 변환하여 추출(10진수 옵션 설정) 숫자가 아니면 NaN(Not a Number)반환

var num         = parseFloat(currentSize, 10);

fontSize의 유닛을 구함(px, em)

var unit        = currentSize.slice(-2);

현재 클릭된 버튼의 아이디를 확인하여 숫자연산 후 css에 fontSize 적용

if (this.id == 'switcher-large') {
  num *= 1.4;
} else if (this.id == 'switcher-small') {
  num /= 1.4;
}
$speech.css('fontSize', num + unit);
css-part
1
2
3
4
5
6
7
8
9
10
11
12
13
$('div.button').click(function() {
  var $speech     = $('div.speech');
  var currentSize = $speech.css('fontSize');
  var num         = parseFloat(currentSize, 10);
  var unit        = currentSize.slice(-2);

  if (this.id == 'switcher-large') {
    num *= 1.4;
  } else if (this.id == 'switcher-small') {
    num /= 1.4;
  }
  $speech.css('fontSize', num + unit);
});

hide와 show

jQuery 효과에 속도를 지정할때는 ‘slow’, ‘normal’, ‘fast’(각각 0.6, 0.4 0.2초)를 지정할수 있으며 밀리초 단위의 시간을 조정할수 있다(근데 난 차이를 모르겠다..)

$('document).ready(function() {
  $('div.speech p:eq(1)').hide();
  $('span.more').click(function() {
$('div.sppech p:eq(1)').show();
$(this).hide();
  });
});

show는 .animate()메서드의 약식 메서드이다.

$(document).ready(function() {
  $('p:eq(1)').hide();
  $('span.more').click(function() {
$('p:eq(1)').animate({height: 'show', width: 'show', opactity: 'show'}, 'slow');
$(this).hide();
  });
});

사용자형 애니메이션 생성하기

버튼의 높이를 키우면서 이동, 이동이 멈추면 크기 고정

$(document).ready(function() {
  $('div.label').click(function() {
$('div.butoon').animate({left: 650, height: 38}, 'slow');
  });
});

숫자 이해하기

height의 38값인 이유는 우리가 버튼을 50으로 만들기 위해서 이다. css에 padding은 5px, border는 1px 로 정의 하였으므로 top + bottom값을 더한후(12) 50 - 12 = 38값이 나오게 되었다.

CSS로 위치 변경

.animate()를 사용하여 작업할때 CSS속성이 relative 또는 absolute로 설정 되어있어야 한다 모든 블록 요소가 가지는 CSS position 속성은 static이다.

버튼의 너비 계산

버튼의 넓이와 패딩 보더 넓이를 모두 구하여 더해준후 div.speech p의 넓이에 맞추어서 값을 구하였다. 그렇게 함으로써 글자 오른쪽 모서리에 맞춤이 이루어 진다.

$(document).ready(function() {
  $('div.label').click(function() {
  var paraWidth        = $('div.speech p').width();
  var $button          = $('div.button');
  var buttonWidth      = $button.width();
  var paddingRight     = $button.css('paddingRight');
  var paddingLeft      = $button.css('paddingLeft');
  var borderRightWidth = $button.css('borderRightWidth');
  var borderLeftWidth  = $button.css('borderLeftWidth');

  //총너비 연산
  var totalButtonWidth =
  parseInt(buttonWidth, 10) +
  parseInt(paddingRight, 10) +
  parseInt(paddingLeft, 10) +
  parseInt(borderRightWidth, 10) +
  parseInt(borderLeftWidth, 10);
  var rightSide = paraWidth - totalButtonWiidth;
  $button.animate({left: rightSide, height: 38}, 'slow');
  });
});

동시효과

불투명해짐과 배경색이 동시에 변경되며 이동을 한후 불투명도가 들어오고 사라지게 된다

$('div.label').click(function() {
  $('div.button')
  .fadeTo('slow', 0.5)
  .animate({left: 650}, 'slow')
  .fadeTo('slow', 1.0)
  .css('backgroundColor', '#f00')
  .slideUP('slow');
});

연속효과

버튼을 클릭 하게 되면 투명해지고 이동한다. 그리고 투명도를 다시 돌리고나서 배경색을 변경한다. 그리고 사라진다 이게 연속적으로 이루어 지게 되어있다. 콜백을 이용하여 효과들이 모두 진행된 후에 그 다음 순서로 배경색을 바꾸는 비효과 메서드를 적용 하였다.

$('div.label').click(function() {
  $('div.button')
  .fadeTo('slow', 0.5)
  .animate({left: 650}, 'slow')
  .fadeTo('slow', 1.0, function() {
$(this).css('backgroundColor', '#f00')
  }).slideUP('slow');
});

다중 효과

$('div.speech p:eq(3)').css('backgroundColor', '#fcf').hide();
$('div.speech p:eq(2)').css('backgroundColor', '#cff').click(function() {
  var $thisPar = $(this)
  $(this).next().slideDown('slow', function() {
$thisPar.slideUp('slow');
  });
});

Command action

  • fadeIn()과 fadeOut(): 불투명도(opacity)

    fadeOut(speed, callback)

    일치하는 엘리먼트 중 드러난 엘리먼트의 불투명도 0%로 줄여가면서 화면에서 제거한다. 불투명 도가 변경되는 지속시간은 speed 매개변수에 따라 변한다. 이미 감춰진 엘리먼트는 영향을 받지 않 는다.

    매개변수

    speed

    (Numbe|String)효과의 지속 시간을 1/1000초 단위의 숫자 또는 미리 정의된 문자열 slow, normal, fast

    가운데 하나로 명시한다. 생략되면 기본값인 normal을 이용한다.

    callback

    (Function) 선택사항으로 애니메이션이 완료된 뒤 호출되는 함수다. 이 함수는 어떤 매개변수도 받지 않는다. 하지만 애니메이션이 수행되는 엘리먼트가 함수 콘텍스트인 this로 설정된다.

    반환값

    확장집합

  • fadeTo: 불투명도(opacity)

    fadeOut(speed, opacity, callback)

    확장 엘리먼트의 불투명도를 현재의 러정 값에서 opacity 매개변수 값으로 설정한다.

    매개변수

    speed

    (Numbe|String)효과의 지속 시간을 1/1000초 단위의 숫자 또는 미리 정의된 문자열 slow, normal, fast

    가운데 하나로 명시한다. 생략되면 기본값인 normal을 이용한다.

    opacity (Number)

    (Number) 0.0에서 1.0 사이의 값으로 엘리먼트에 적용될 불투명도 값

    callback

    (Function) 선택사항으로 애니메이션이 완료된 뒤 호출되는 함수다. 이 함수는 어떤 매개변수도 받지 않는다. 하지만 애니메이션이 수행되는 엘리먼트가 함수 콘텍스트인 this로 설정된다.

    반환값

    확장집합

  • slideDown()과 slideUp(): 높이(height)

    slideDown(speed, callback)

    감춰진 모든 일치하는 엘리먼트가 높이 값이 증가하면서 나타난다. 드러나 잇는 엘리먼트는 영향을 받지 않는다

    매개변수

    speed

    (Numbe|String)효과의 지속 시간을 1/1000초 단위의 숫자 또는 미리 정의된 문자열 slow, normal, fast

    가운데 하나로 명시한다. 생략되면 기본값인 normal을 이용한다.

    callback

    (Function) 선택사항으로 애니메이션이 완료된 뒤 호출되는 함수다. 이 함수는 어떤 매개변수도 받지 않는다. 하지만 애니메이션이 수행되는 엘리먼트가 함수 콘텍스트인 this로 설정된다.

    반환값

    확장집합

    slideDown(speed, callback)

    감춰진 모든 일치하는 엘리먼트가 점차적으로 높이 값이 감소하면서 화면에서 제거된다.

    매개변수

    speed

    (Numbe|String)효과의 지속 시간을 1/1000초 단위의 숫자 또는 미리 정의된 문자열 slow, normal, fast

    가운데 하나로 명시한다. 생략되면 기본값인 normal을 이용한다.

    callback

    (Function) 선택사항으로 애니메이션이 완료된 뒤 호출되는 함수다. 이 함수는 어떤 매개변수도 받지 않는다. 하지만 애니메이션이 수행되는 엘리먼트가 함수 콘텍스트인 this로 설정된다.

    반환값

    확장집합

Learn jQuery 3장

| Comments

Source

예제.html

예제 css

예제 js

본문 - 이벤트 트리거 사용하는 방법

button click event

페이지 시작시 노말페이지로 보이도록 모든 클래스를 해제한다. removeClass()는 다른 파악되지 않은 Class까지 해제 하지만 현재 예제 코드 에서는 생각치 않도록 쓴다.

$('body').removeClass();

현재 버튼이 클릭된 id값을 확인하여 일치 하였을경우 클래스를 추가 하도록 한다.

if (this.id == 'switcher-narrow') {
  $('body').addClass('narrow');
}
else if (this.id == 'switcher-large') {
  $('body').addClass('large');
}

강조되는 글씨를 표현하기 위해 우선 클래스를 해제하고 현재 버튼에 클래스를 추가 해준다.

$('#switcher .button').removeClass('selected');
$(this).addClass('selected');

이벤트 객체 사용시 버블링을 중단 하기 위해 다음과 같이 추가해 준다. (버블링을 추가안해줄시 노말 버튼 클릭시에도 버튼칸이 사라지게 된다.)

event.stopPropagation();

부분 코드

부분코드 - 01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$('#switcher .button').click(function(event) {
  $('body').removeClass();

  if (this.id == 'switcher-narrow') {
    $('body').addClass('narrow');
  }
  else if (this.id == 'switcher-large') {
    $('body').addClass('large');
  }

  $('#switcher .button').removeClass('selected');
  $(this).addClass('selected');

  event.stopPropagation();
});

버튼 강조하기

버튼에 hover(마우스 가져다 대면) 띠면(체인으로) hover삭제

부분 코드

부분코드
1
2
3
4
5
$('#switcher .button').hover(function() {
    $(this).addClass('hover');
    }, function() {
      $(this).removeClass('hover');
  });

이벤트 핸들러

핸들러를 나중에 다시 사용할 수 있도록 핸들러 함수에 이름을 부여

var toggleStyleSwitcher = function() {
  $('switcher .button').toggleClass('hidden');
};

핸들러를 활성화 시켜준다.

$('#switcher').click(toggleStyleSwitcher);

노말 상태에서만 토글 기능 활성화

$('switcher-normal').click(function() {
  $('#switcher').click(toggleStyleSwitcher);
});

$('#switcher-narrow, #switcher-large').click(function() {
  $('#switcher').unbind('click', toggleStyleSwitcher);
});

시작시 접힘 기능(인자를 지정하지 않는경우 히벤트에 해당하는 행위를 발생시킴)

$('#switcher').click();

Command action

unbind(event Type, listener)

unbind(event)

확장 집합의 모든 엘리먼트에서 전달된 매개변수에 따라 핸들러를 선택적으로 제거한다.

매개변수를 제공하지 않으면 엘리먼트의 모든 리스터를 제거한다.

매개변수

eventType

   (String)매개변수를 제공하면 지정된 이벤트 타입에 할당된 리스너만 제거한다.

listener

  (Function)매개변수를 제공하면 지정된 리스너와 동일한 것만 제거한다.

eventType

  (Event) Event 인스턴스의 정보로 알 수 있는 이벤트가 발생했을 대 호출될 리스너를
  제거한다

반환값

확장 집합

Lear jQuery 2장-02

| Comments

Source

예제.html

예제 css

예제 js

본문 - 테이블행에 징검다리 색깔 입히기

사용자 정의 선택자

class명 horizontal를 가진 div 집합의 두번째 항목 선택 $(‘div.horizontal:eq(1)’) 두번째 항목이 1인 이유는 자바스크립트 배열에서 인덱스는 0에서 부터 시작 하며 jQuery또한 마찬가지이다. 단, css는 1을 기반으로 한다.

헤더 행 스타일 입히기

$('th').addClass('table-heading');
//<th class=table-heading'>

odd,even 색 입히기

$('tr:not(:has(th)):even').addClass('even');
$('tr:not(:has(th)):odd').addClass('odd');
//odd와 even의 색 정의는 css에 정의 되어있다.

테이블에서 특정단어 포함 셀만 강조

$('td:contains("Henry")').addClass('highlight');
//td에 Henry 단어가 포함 된열 강조
// highlight의 색 정의는 .css에 정의 되어있다.

Henry를 포함한 셀을 찾아낸후 모든 하위레벨에 클래스 추가

$('td:contains("Henry")').siblings().addClass('highlight');

Henry를 포함한 부모를 찾아 인덱스가 0보다 큰셀들을(0은 최상 부모) 순회하면 클래스추가

$('td:contains("Henry")').parent().find('td:gt(0)').addClass('highlight');

Henry를 포함한 셀을 찾아 부모를 찾고 그 안의 모든 셀을 찾은후 Henry를 포함한 셀을 필터링한후 클래스추가(Henry만 적용을 하지 않음)

$('td:contains("Henry")').parent().find('td').not(':contains('Henry")')).addClass('highlight');

Henry를 포함하고 있는 셀을 찾아낸 후에 그것의 부모를 얻어와서 자식들 중에 두번째 셀을 찾아서 클래스를 추가하고 가장 최근의 .find()를 취소한 후에 다시 자식들 중에서 세 번째 셀을 찾아서 클래스를 추가한다.

$('td:contains("Henry")') //Henry셀을 찾고
.parent()  //부모를 찾아서
.find('td:eq(1)') //부모의 두번째 셀을 찾아
.addClass('highlight') //강조 하고(클래스 추가)
.end() // 다시 부모로 돌아와
.find('td:eq(2)') // 세번째를 찾아서
.addClass('highlight'); //강조 한다(클래스 추가)

Command Action

addClass(names)

매개변수로 전달된 하나 이상되는 클래스명을 확장 집합의 모든 엘리먼트에 추가한다.

매개변수

names (String)클래스명을 포함 하는 문자열, 여러 클래스명을 추가할 때는 공백으로 구분

반환값 - 확장집합


removeClass(names)

매개변수로 전달된 하나 이상되는 클래스명을 확장 집합의 모든 엘리먼트에서 삭제한다.

매개변수

names (String)클래스명을 포함 하는 문자열, 여러 클래스명을 추가할 때는 공백으로 구분

반환값

확장집합


siblings()

확장 엘리먼트의 모든 형제를포함 하는 확장 집합을 반환


find(selector)

원본의 모든 엘리먼트 중 전달된 셀렉터 표현식과 일치하는 엘리먼트로 구성된 새로운 확장 집합 을 반환한다. 확장 집합에 포함된 엘리먼트의 자손 엘리먼트도 전달된 표현식과 일치하는지 평가

매개변수

selector (String) 반환될 집합의 일부가 될 엘리먼트가 일치하는 셀렉터

반환값

새로 생성된 확장 집합

변수 wrappedSet에 할당된 확장 집합에서 p문단 인용문(>cite< 엘리먼트)로 구성된 확장 집합은 두가지로 표현 된다

wrappedSet.find('p cite')
$('p cite', wrappedSet)

parent()

확장 집합 내에 있는 모든 확장 엘리먼트의 바로 위 부모로 구성된 확장 집합을 반환한다.

parents()

모든 확장 엘리먼트의 조상으로 구성된 확장 집합을 반환한다. 바로 위 부모와 상위의 모든 소상이 포함 되지만 문서 루트(document root)는 포함 되지 않는다(?)


end()

jQuery 커맨드 체인에서 사용하며 이전 확장 집합으로 돌아간다.

매개변수

없음

반환값

이전 확장 집합

jQuery-01

| Comments

DOM 조작 메서드 핵심정리(Le-05)

DOM을 조작할 수 있도록 jQuery가 제공하는 메서드들은 광범위하기 때문에 어떤 작업을 처리할 때 어떤 메서드들이 어느 경우에 도움을 줄 수 있는지를 한눈에 보여줄 수 있도록 관련된 메서드들을 기능별 범주로 나누어 보았다.

  1. 새로운 요소를 검색된 요소 안에 삽입하기 위한 메서드

    • .append()
    • .appendTo()
    • .prepend()
    • .prependTo()
  2. 새로운 요소를 검색된 요소 전/후에 삽입하기 위한 메서드

    • .after()
    • .insertAfter()
    • .before()
    • .insertBefore()
  3. 새로운 요소로 검색된 요소를 감싸면서 삽입하기 위한 메서드

    • .wrap()
  4. 검색된 요소를 새로운 요소 또는 텍스트로 대치하기 위한 메서드

    • .html()
    • .text()
  5. 실제 삭제 하지 않고 도큐먼트에서 검색된 요소와 자식들을 제거하기 위한 메서드

    • .remove()

요약

DOM과 관련된 jQuery 메서드를 사용하여 콘텐츠를 생성해보거나 복사하는 데 사용하기도 하고 조립하거나 장식하는 데에도 사용하였다. 그리고 웹 페이지상의 문장을 주석으로 변경해 보거나 인용표시나 링크로 또는 스타일이 적용된 인용 문구로 변경해 볼 때에도 jQuery 메서드들을 사용해 보았다

jQuery

| Comments

핵심정리(Le-04)

변화를 주기 위해서 여러 효과들을 적용하다 보면, 이 효과들이 한 번에 동작하는지 또는 순서 대로 동작하는지를 기억하기가 쉽지 않을 수 있다. 도움을 주기 위해 간단히 몇 가지 요점을 정리해 보았다.

  1. 요소들의 단일 집합에서 효과들은

    • 하나의 .animate() 메서드를 사용하여 여러 프로퍼티를 적용하게 되면, 그 효과는 동시에 일어난다.
    • 효과 메서드들을 연쇄적으로 나열하는 방법으로 연결고리에 넣으면 큐에 쌓여서 효과가 순서대로 일어난다.
  2. 요소들의 다중 집합에서 효과들은,

    • 기본적으로 동시에 일어난다
    • 이벤트 핸들러의 콜백 안에서 구현되는 효과는 큐에 쌓인다.

요약

효과 메서드를 이용하면, .css()메서드를 사용해서 텍스트의 크기를 키우거나 줄일수 있다. 또한 점진적으로 숨기거나 보여주기 위한 여러 가지 효과들을 다양한 방법들로 적용할 수 있으며, 한 번에 또는 순차적으로 여러 가지 방법을 사용해서 요소들에 애니메이션을 부여할수 있다

Perl

| Comments

목록으로 부터 중복된 값 제거

해결 방안

hash를 이용하여 목록에 존재하는 각 값을 한번만 저장하고, keys 함수를 이용하여 이를 활용하면 된다. 이때, 프로그래머는 코드를 보다 짧고 빠르게 해주는 펄의 다양한 아이디어를 적용할 수 있다.

일반적인 방법

해쉬값을 체크하고 값이 존재 하지 않는다면 배열을 생성한다.

uniq값 구하기
1
2
3
4
5
6
7
8
9
my %seen = ();
my @uniq = ();
foreach my $item (@list) {
    unless ($seen{$item}) {
        # 한번도 나타 나지 않은 값에 대해서만 처리
  $seen{$item} = 1;
  push(@uniq, $item);
    }
}

좀더 빠른 처리 방법 - 01

이전에 나타내는 값이 없는 값을 처리할 경우 이를 해쉬에 저장 하게 된다 (++연산자는 카운팅 기능)

uniq값 구하기
1
2
3
4
5
my %seen = ();
my @uniq = ();
foreach my $item (@list) {
    push @uniq, $item unless $seen{$item}++;
}

좀더 빠른 처리 방법 - 02

해쉬에 저장 하고 그 키값 만은 추출 한다. (순서가 뒤죽박죽이다)

uniq값 구하기
1
2
3
4
5
my %seen = ();
foreach my $item (@list) {
    $seen{$item}++;
}
my @uniq = keys %seen;

좀더 빠른 처리 방법 - 03

uniq값 구하기
1
2
my %seen = ();
my @uniq = grep { ! $seen{$_}++ } @list;

exam-code

https://gist.github.com/2786790

Learn jQuery

| Comments

3장 요약

  • .bind()나 .click()를 사용하여 사용자의 클릭을 반응하는 코드로 페이지 스타일 변경 가능
  • 클릭되는 요소가 무엇이냐에 따라서 서로다른 동작들을 수행하기 위한 이벤트 컨텍스트 를 사용함. 거기에다 하나의 핸들러가 여러 요소에 연결되는 경우도 알아봄
  • .toggle()를 사용하여 페이지의 요소를 펼치거나 접을 수 있음
  • .hover()를 사용하여 마우스 커서 위치에 있는 요소를 강조
  • .stopPropagation(), preventDefault()를 이용하여 이벤트에 응답해야 하는 요소를 선별
  • 이벤트 핸들러를 제거하기 위해 .unbind()를 호출
  • .trigger()를 사용하여 실행하고 싶은 이벤트 핸들러와 연결