jquery text() 메소드

jQuery/jQuery메소드 2010.02.20 14:39

jquery text() 메소드

.text() 메소드는 주요기능으로 텍스트값을 반환하는역할을 한다.

alert( $('p').text() );

html은

나를 출력하시오

기본적으로 엘레먼트의 텍스트를 반환하여 출력하게 되어있다.

  1. $('p') : p라는 엘리먼트에 접근한다
  2. .text() : 그엘리번트의 텍스트 값을 찾느다.
  3. alert : 경고창으로 뜨도록

위와 같이 하면은 경고창에'나를 출력하시오' 라고 나올 것이다.이번에는 괄호안에 값을 넣었을 경우를 보자

$('p').text('나를 출력');

html은

나 말고...

값이 대체 되기도 한다. 화면에는 원래나와야되는 '나말고...' 대신 '나를 출력'이 나타날것이다.정확히 말하면 대체 되는 것이 아니라 덮어지는 것이다.

저작자 표시
신고

설정

트랙백

댓글

jquery filter() 메소드

jQuery/jQuery메소드 2010.02.19 10:30

jquery filter() 메소드

filter()
filter()메소드는 영어 해석그대로 필터역할을 한다.선택한것에 접근 할때 그 입력값에 일치하는 엘리먼트를 가르킨다

나 말고

나를 집어주시요~

이 때 다음과 같이 사용하면

$('p').filter('#test').text();

나를집어주시오를 선택하게 된다. 순서는 다음과 같다.

  1. $('p') : p라는 엘리먼트에 접근
  2. .filter('#test') : 그중 test라는 아이디를 가진것을 선택
  3. .text() : 그리고 텍스트를 반환
저작자 표시
신고

설정

트랙백

댓글

jquery end() 메소드

jQuery/jQuery메소드 2010.02.18 20:55

jquery end() 메소드

원문은 여기에서 볼 수있다http://api.jquery.com/end/

.end()
end() 메소드는 현재의 엘리먼트 바로 앞의 엘리먼트를 지칭한다. 다음예제를보자

Hm..

this is the test

$(document).ready(function() {
			alert($('p').filter('#test').end().text());
		});

스크립트 소스에서 접근순서를보자

  1. $('p') : p엘리먼트에 접근
  2. .filter('#test') : #test라는 아이디에 접근
  3. .end() : 한차례앞의 것에 접근한다 따라서 p에 접근하게 된다
  4. alert($('p').filter('#test').end().text()); 소스는 p에리먼트안의 텍스트 Hm..this is the test를 출력시킨다.

체이닝(chaining)

end 함수가 유용한 것은 여러번사용하여 어떤 엘리먼트를 재지정 할 필요없다는 점이다. 다음예제를보자

  
$('form ')
    .filter('.required').text( )
     .end().end()
    .filter('.conditional').text();

$('form ')에 대해서 end 함수를 사용하여 접근 하는 방법을 짜는 소스를 줄여주고있다. 위의 것이 의미하는 바는 다음과 같다.

  
$('form ')
    .filter('.required').text( );
$('form ')    
    .filter('.conditional').text();

아래 소스를 보면은 접근하기 위해 $('form ')를 두번이나 사용했다.end를 사용하면 이럴 필요없다. 또 여러번 사용가능하기에 바로 앞의것만 아닌 맨 앞의것도 선택할 수 있는것이다. 따라서 .end().end()$('form ') 를 지칭한다.

이런 end함수의 기능을 체이닝(chaining)이라하며 jQuery의 장점중 하나이다

저작자 표시
신고

설정

트랙백

댓글

jQuery 기능적 폼(form) 만들기

jQuery/DOM&jQuery 2010.02.18 19:59

jQuery 기능적 폼(form) 만들기

jQuery 이용하여 좀더 기능적으로 form을 만들어보자.기본적인 폼의코드는 다음과 같다

더보기

이름을입력할 input엘리먼트는 클래스명을required 그리고 나머지들은 클래스명을 conditional로 주었다.이코드를 다음과 같이 수정할것이다.

  • legend엘리먼트를 다른 엘리먼트로 대체하여 좀더 편리하게 css로 꾸미게 한다
  • 반드시 입력할 이름란에 '*'를 또 다른 입력란에는 '**'를 필수, 선택 대신으로 대체시킨다
  • 필요한 선택입력 항목 박스를 클릭시 텍스트 입력 박스가 보이도록 또 감추도록한다.

엘리먼트 수정

legend엘리먼트는 css로 꾸미기 까다로운 것중하나다. 표준을 지키기위해선 써야하고 꾸미기위해서 바꾸자니 까다롭다. 따라서 스크립트를 이용해서 대체시켜보자

 $('legend').each(function(index) {
 //문서전체에서 legend에 접근하여
  $(this).replaceWith('

' + $(this).text() + '

'); //찾아낸것을 h3엘리먼트로 바꾸어준다. });

위의 소스는 legend엘리먼트를 h3에리먼트로 대체시켜주고 있다. 함수는.replaceWith()를 사용하고있다.each를 사용한것은 여기서는 하나의 폼만 사용해서보여주고있지만 여러개를사용할때 공통으로 검사하고 적용해 주기 때문이다. css로 바탕색은 분홍 글자색은 흰색으로 해보자

h3{ background:#fcc; color:#FFF;}

아스테리크로 대체

.replaceWith()함수로 대체시킬수도있지만 차후의 기능적 사용여부와 또 위에 별도표시를위해 변수로 지정하고 바꾸어줄것이다.

  var requiredFlag = ' * ';
  var conditionalFlag = ' ** ';
  $('form :input')
   .filter('.required')
   .next('span').text(requiredFlag)
   .end().end()
   .filter('.conditional')
   .next('span').text(conditionalFlag);

위의 소스는 먼저 아스테리크를 변수로지정해주고 그 다음바꾸어줄 텍스트를 찾아가고있다.주요시 볼점은 .end()함수이다.end함수는 다시 이전요소에 접근하는 함수이다.따라서 첫번째 end는 .filter('.required')에 접근 두번째end는$('form :input')접근하고있다. 따라서 '**'를 사용할 .conditional란 클래스를가진것에 접근시 처음부터 소스를 $('form :input').filter('.conditional')이런식으로 짜줄필요없이 단축시킬수있다.

이번에는 (필수), (선택)이란 텍스트에서 괄호를 때어주고 변수로 지정하고 아스테리크와 같이이어주도록 지정해준다.바라는 결과는 다음과 같다

필수*

선택**

이를위해 소스를보자

  var requiredKey = $('input.required:first')
                        .next('span').text();
  var conditionalKey = $('input.conditional:first')
                        .next('span').text();
    requiredKey = requiredFlag + 
             requiredKey.replace(/^\((.+)\)$/,'$1');
  conditionalKey = conditionalFlag + 
            conditionalKey.replace(/\((.+)\)/,'$1');

.replace()의 역할은 괄호를 떼어주는역할을 했다.마지막으로 이것을 맨위에 붙여주자

	$('

') .addClass('field-keys') .append(requiredKey + '
') .append(conditionalKey) .insertBefore('#contact');

이제까지 이블로그의 포스팅을 봐왔다면 쉽게 이해가능할것이다. 클래스를 지정한것은 단순히 좀더 꾸며주기위했을 뿐이다.

체크박스 클릭에 따라 보여주기 감추기

마지막으로 체크박스에 따라보여주거나 감추는 기능을 만들어보자.먼저 conditional명의 클래스의 텍스트박스를 모두감추어준다.

$('input.conditional').next('span').andSelf().hide()

다음은 페이지내에서 체크박스를 찾아가도록되어있다

$('input.conditional').next('span').andSelf().hide()
  .end().end()
  .each(function() {
    var $thisInput = $(this);
    var $thisFlag = $thisInput.next('span');
    $thisInput.prev('label').find(':checkbox')
    .attr('checked', false)
    //함수가 체크안된었다는초기값을 설정한것이다.
    .click(function() ;
    //이뒤에 실행되는 함수를 달아주면된다

마지막으로 박스가 체크된에 따라 바뀌는 소스를 만들어주자

  .click(function() {
      if (this.checked) {
      //만약 박스가 체크된다면
        $thisInput.show().addClass('required');
        $thisFlag.show();
        $(this).parent('label').addClass('req-label');
      } else {
      //반대라면
        $thisInput.hide().removeClass('required').blur();
        $thisFlag.hide();
        $(this).parent('label').removeClass('req-label');

아래는 최종 완성된 소스

더보기

완성된 예제를 보려면 여기로http://sianasiatiger.cafe24.com/study/F_moreedite.html

저작자 표시
신고

설정

트랙백

댓글

HttpRequest 객체

Ajax 2009.12.10 21:39

자바스크립트객체 HttpRequest

브라우저의 다른 작업을 방해하지않으면서 서버에 데이터를 요청할수 있게하는 HttpRequest..이번엔 그 객체를 직접 만들어보자

인스턴스 만들기

대부분의 브라우저에서는 다음과 같이 간단히 시작할 수 있다

xhr = new XMLHttpRequest();

여전히 걸림돌은 IE이다.익스플로어의 경우는 액티브X인스턴스를 만들어야된다.

 xhr = new ActiveXObject("Microsoft.XMLHTTP");

자 그럼 일반적으로 내장객체지원하는 브라우저 그리고 그렇지않은 익스플로어를 구분하고 그에따라 위에서 생성한 적절한것을 사용하도록 해야할 것이다. 그럼 이때 필요한것은? 당연히 조건문..

//XMLHttpRequest를 지원할 경우
if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } 
//아니면 액티브X  
else if (window.ActiveXObject) {
   try {
   xhr = new ActiveXObject("Msxml2.XMLHTTP");  
 } 

마지막으로 볼것은 이제까지 설명한것에 대해 브라우저가 액티브X를 지원한다고 해서 ajax를 위한 특정한 액티브X 객체가 있다는 보장은 없다, 따라서 검색해보고 그에따른 적절한 액티브X를 사용할 수 있도록 하는것이다.이때 try..catch를 사용한다.

try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }

최종 완성된 인스턴스를 점검해보자

function getHTTPObject() {
  var xhr = false;
  //코드를 작석항때마다 반복코드작업을 피하기위해
  //변수로 선언하고 판별가능하도록 했다.
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
    //내장객체 인스턴스
  } else if (window.ActiveXObject) {
    //아니면 액티브X 객체의 인스턴스
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }
  return xhr;
}

서버와 통신

요청

XMLHttpRequest 인스턴스를 만든후 서버와 통신하기해 먼저 요청해보자

function grabFile(file) {
  var request = getHTTPObject();
  if (request) {
    request.onreadystatechange = function() {
    //onreadystatechange 새로고쳐 요청
      displayResponse(request);
    };
    //비동기요청 open메소드 
    request.open("GET", file, true);
    //보내기
    request.send(null);
  }
}
  • ajax에거 헤더 정보를 보내는 기능onreadystatechange
  • open메소드 : 단순한 파일을 받을때는 GET, 데이터를 받을때는 POST,두번째인자 는 url,마지막은 비동기로할것인지 결정
  • 데이타가 아닌 GET으로 파일요청시 아무것보내지않는다.

응답 readyState

readyState는 ajax에 요청 상태를 나타낸다.0~4 다음과 같은갑을 가진다.
0:초기화되지않음
1:open메소드 호출
2:open메소드 호출, send메소드호출, 송신완료 요청시작
3:수신중
4:수신완료

실제 사용하기위해서 위의 상태에서 우리는 값4 즉 수신완료가정하에 작업되어야 한다.다음예제를 보자

function displayResponse(request) {
if (request.readyState == 4) {
//수신완료 될경우
if (request.status == 200 || request.status == 304) {
 어쩌고 저쩌고 수행할 작업
}}}

위에서 request.status는 무엇인가?이것은 서버상태코드를 말한다.흔히 우리가 사이접속에러시 404에러 Not Found를 한번쯤은 보았을꺼다, 또403 forbidden등 이런 상태를 보았을것이다.이번호가 지정해놓은 상태를 말해주는 코드이다.위에서 200,304의 의미는 성공적응답을 말하는 것이다.

마지막으로 수행할작업을 넣어주면된다

function displayResponse(request) {
if (request.readyState == 4) {
//수신완료 될경우
if (request.status == 200 || request.status == 304) {
//성공적 응답
 alert(request.responseText);//작업
}}}

예제보기

앞에서 사용한것을 적용해보자 송수신할 것은 텍스트 문서 이고 예제를보자


여기를 클릭

결과는 여기서확인 http://sianasiatiger.cafe24.com/study/A_ajaxbasic.html

저작자 표시
신고

설정

트랙백

댓글

Ajax와 HttpRequest

Ajax 2009.12.09 21:52

Ajax와 HttpReqyest, 자바스크립트객체

먼저 저번에 둘러봤던 ajax에 대해 다시한번 돌아보자

일반적인 웹어플리케이션 동작
  1. 페이지에서 이벤트발생
  2. 서버에 요청
  3. 일반적으로 HTML로 결과를 응답받는다
  4. 페이전체가 리로드(바뀐다)된다
Ajax 웹어플리케이션 동작
  1. 페이지에서 이벤트발생
  2. 서버에 요청
  3. XML,텍스트 등으로 결과를 응답받는다
  4. 필요한 페이지 일부가 리로드(바뀐다)된다

단 다음을 반드시 명시하자

  • 기본적으로 html+css가 페이지를 구성한다
  • 브라우저가 요청과 응답하는것이다.
  • 자바스크립트 객체의 역할은 요청과 응답이 아니라 요청을 동기화시키고 들어온 응답을 처리한다.

XMLHttpRequest

앞에서 본 자바스크립트 개체의 역할은 클라이언트와 서버사이통신을 담당한다고 할수 있겠다.이런 객체가 처음 만들어진것은 XMLHttp였고 우리가 흔히 알고 있는 액티브X(activeX)형태로만 사용할 수 있었다.하지만 잘 알다 시피 액티브X는 많은 문제를 야기시켰고 특히국내는 빨리 만들어야 하는시점에서 남용되었다.

한편 다른 브라우저들은 XMLHttprequyest 객체를 모질라측에서 개발하게되고 내장하는방법으로 사용하게되었고 이후 대부부의 내장객체로 사용되게된다.(IE6를 제외하고 최근 브라우저 대부분은 내장객체로 지원한다.파록,사파리,오페라...등)

병맛 IE6

문제는 css가 익스플로어6에서 적용되지않거나 버그등이있듯것처럼, 아직까지 사용되는IE6 는 액티브X를 사용한다.물론 앞으로 설명할 ajax에 간단한 예제 대해서는 방법이있다. 하지만 이것때문에 아직도 많은 전문 개발자들이 쓸데없는 문제를겪고 있다.

두번째 ajax포스팅을 마치면서 하루빨리 IE6가 사라지길 바란다.......

저작자 표시
신고

설정

트랙백

댓글

Ajax란 무엇인가? Ajax의 정의

Ajax 2009.12.08 16:12

Ajax란 무엇인가?

jQuery를 한창 포스팅하다가 dom가지 설명을 끝내고 이제 Ajax로 넘어갈떄이다. 이쯤에서 Ajax를 둘러볼 필요가있다. 간단한 정의부터 사용예시까지 짤막하게 살펴보자.

Ajax 의 정의

초창기에 비동기적인 자바스크립트와 XML 이라는 말의 줄임으로 접근되었다.

  • 비동기(Asynchronous)
  • 자바스크립트(javascript)
  • 그리고 and
  • XML

이로서 ajax 란 약자가 나왔다고 하는데....마지막에 xml은 필수요소가 아니다. 이후에 어떤 약어라기보다는 방법론으로 축약되어 사용되고있다.

위에서 그래도 중요시 할점은 비동기(asynchronous) 란 점이다. 페이지의 전통적인경우 브라우저는 서버에 전재페이지를 요청하고 그리고 사용자가 링크크릭또는 폼전송시 브라우저는 새로운요청을 보내고 서버는 다른페이지를보내게된다. 하지만 ajax의 경우는 전체 페이지를 반환하는대신 현재 로딩되어있는 페이지의 일부분만 반환한다. 쉽게 말하자면 일반사이트의 클릭 새로고침으로 페이지가 완성된다면 한페이지내에서 간단하게 빨리 정보가 제공되는 셈이다.

간단히 둘러보는 몰라왔던 ajax

넓은 의미에서 ajax는 비동기란점에서 우리가 아는 다음과 같은 것들도 포함될수있다.

플래시
플래시 무비는 웹서버와 비동기적으로 통신할 수 있다.플래시로 구성된 사이트를 가보면 새로고침,앞으로 가기,뒤로가기와 달리 클릭으로 새내용을 볼수있는것을 볼수 있다. 새로고침을 플래시로 된 페이지에서 클릭한다면 맨처음페이지로 갈것이다.
프레임
요즘 홈페이지 구축에서 거의 사용하지않지만 기억을떠올려보자 클릭시 페이지의 모든 것이업데이트되지않고 한프레임만 업데이트되는것을 볼수 있다. 이것역시 비동기관점에서 본것이다.
그외..
아이프레임. XMLHttpRequest..

요약하기

Ajax는 특정한 기술, 즉 "css할 수 있어요"와 같이 "전 ajax할 수 있어요" 가 아니란 것이다. ajax는 방법론이다HTML,CSS,DOM을 기본으로 개념을 잡고 어떻게 서버측과 비동기적으로 페이지를 구축하는냐 라고 할 수 있다.

위키백과참조

앞서 설명한 것처럼 되어있다.여기도 특정 기술이 아니라고 설명되어있다. 일부 요약했고 링크된 곳으로 직접가보자

Ajax(Asynchronous JavaScript and XML)는 대화식 웹 애플리케이션의 제작을 위해 아래와 같은 조합을 이용하는 개발 기법이다.

  • 표현 정보를 위한 HTML (또는 XHTML) 과 CSS
  • 동적인 화면 출력 및 표시 정보와의 상호작용을 위한 DOM, 자바스크립트
  • 웹 서버와 비동기적으로 데이터를 교환하고 조작하기 위한 XML, XSLT, XMLHttpRequest (Ajax 애플리케이션은 XML/XSLT 대신 미리 정의된 HTML 이나 일반 텍스트, JSON, JSON-RPC를 이용할 수 있다).

DHTML이나 LAMP와 같이 Ajax는 자체가 하나의 특정한 기술을 말하는 것이 아니며, 함께 사용하는 기술의 묶음을 지칭하는 용어이다. 실제로 AFLAX와 같이 사실상 Ajax에 바탕을 두고 있는 유사/복합 기술들이 속속 나타나고 있다.

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM empty clone 메소드 복사하기

jQuery/DOM&jQuery 2009.11.28 21:20

jQuery DOM clone 메소드

.clone()은 엘리먼트를 복사하는 메소드이다.

클론은 이벤트 또한 복제하는데 하나하나 살펴보자

아메바......

위의 엘리먼트를 복제해보자

$('p').clone();

자 위의것 대로 하면 될것같지만 복사해서 놓을 위치를 정해줘야 된다. 그래서 .insertAfter()등의 메소드를 사용한다.

$('p').clone().insertAfter('p');

위와같이하면아래와같이 복사되어 나올것이다

아메바......

아메바......

이벤트까지 복제

이벤트 까지 복제하는예제를 보자.변수에 true를 넣으면 이벤트까지복제 반대로 false를 넣어주면 엘리먼트만 복제된다.


위의 버튼을 누르면 복제되도록하려면

  $('button').click(function() {
     //button 엘리먼트에 접근 클릭시 이벤트발생
      $(this).clone(true).insertAfter(this);
     //this 즉 button엘리먼트를 복사해서 그뒤에 붙임
     // clone(true)로 이벤트까지 복사
    }); 

이러면 클릭시 옆에 새로 버튼이 나올거고 또 그버튼을 클릭하면 또 복사되어 나올것이다.

예제릐 결과를 보고싶다면 아레로 가보자

http://sianasiatiger.cafe24.com/study/D_clone.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM empty remove 메소드 제거하기

jQuery/DOM&jQuery 2009.11.25 15:12

jQuery DOM empty remove 메소드

제거하기위한 메소드로는 .empty().remove()가 있다..empty()의경우는 검색된 요소안의 모든 엘리먼트를 제거하고 .remove()의 경우는 검색된 엘리먼트와 자식들을 제거한다.차례대로 보자

empty 메소드

empty메소드는 비운다는 말 그대로 모든걸 지운다.해당엘리먼트의 자식과 텍스트모두 제거한다

모두 사라 집니다.

위의 코드에 아래를 삽입하면 아무것도 나오지 않는다.

$('p').empty();
//p란 엘리먼트에 접근후 
//p엘리먼트의 자식과 텍스트 제거

remove 메소드

이메소드는 접근하여 검색된 엘리먼트와 자식,텍스트를 제거한다.

사라짐

안사라짐

위에서 selected란 클래스의 엘리먼트를 사라지게 할것이다.

$('p').remove('.selected');
//p엘리먼트에 접근후 
//selected란 클래스를 가진것을 제거한다.

결과는 안사라짐 이것만 나올것이다.

예제의 결과는 여기에서http://sianasiatiger.cafe24.com/study/D_empty_remove.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM wrap 메소드 대치하기

jQuery/DOM&jQuery 2009.11.24 18:52

text replaceAll, replaceWith 메소드

대치란 원래있던 값대신에 다른 값을 생성하여 넣어주는 것을 말한다. 이런것이가능한 메소드는 .text(), .replaceAll()그리고 .replaceWith()등이 있다.

text 메소드

.text()메소드는 텍스트를 대치해준다.안녕하세요?반갑습니다로 대치해보겠다.

안녕하세요?

이걸 대치하려면 다음과 같다.

$('p').text('반갑습니다');

결과는 안녕하세요? 대신에 반갑습니다가 나올것이다

replaceWith 메소드

이메소드는 .text()메소드 처럼 대치하느데 그 대상이 엘리먼트인다.예제를보자문자대신에 그림을 대치시켜보자.

네이버 간판으로 바뀜

$('p').replaceWith('');

네이버 간판으로 바뀜 대신에 아래그림이 나올것이다

replaceAll 메소드

이것도 영어 Not only A but also B = B as well as A와 마찬가지다 replaceWith와 기능은 같고 위치값만 다를뿐이다.

$('').replaceAll('p');

예제의 결과는 여기서 확인http://sianasiatiger.cafe24.com/study/D_replace.html

저작자 표시
신고

설정

트랙백

댓글


티스토리 툴바