728x90

Regular Expressions in Java


java.util.regex package 에 있는 Matcher 클래스와 Pattern 클래스를 사용하여 문자열을 정규표현식으로 검증할수 있다.

     

http://www.javamex.com/tutorials/regular_expressions/pattern_matcher.shtml#.UfdJmo1M-X8


e.g. )  boolean b = Pattern.matches(“^[a-zA-Z0-9]*$”, this.input);

 

A.     정규표현식 설명


^ : 문자열의 시작을 나타냄. 

$ : 문자열의 종료를 나타냄. 

. : 임의의 한 문자를 나타냄. (문자의 종류는 가리지 않는다)

| : or를 나타냄. 

? : 앞 문자가 없거나 하나있음을 나타냄. 

+ : 앞 문자가 하나 이상임을 나타냄. 

* : 앞 문자가 없을 수도 무한정 많을 수도 있음을 나타냄. 

[] : 문자 클래스를 지정할 때 사용한다. 문자의 집합이나 범위를 나타내며 두 문자 사이는 '-' 기호로 범위를 나타낸다. []내에서 ^ 가 선행하여 나타나면 not 를 나타낸다. 

{} : 선행문자가 나타나는 횟수 또는 범위를 나타낸다. 

a{3} 인 경우 a가 3번 반복된 경우를 말하며, a{3,}이면 a가 3번 이상 반복인 경우를 말한다. 또한 a{3,5}인 경우 

a가 3번 이상 5번 이하 반복된 경우를 나타낸다. 

( ): 소괄호 ‘( )’ 특수문자는 ‘( )’ 특수문자 안의 글자들을 하나의 문자로 봅니다. 예를 들어 ‘gu(gg){2}le’ 와 같은 패턴을 작성하게 되면 ‘guggggle' 문자열이 문자열에 포함되어 있어야 됩니다.

|: 패턴 안에서 OR연산을 사용할 때 사용합니다. 예를 들어 'hi|hello' 는 hi 나 hello 가 포함되어있는 문자열을 의미합니다.

\w : 알파벳이나 숫자

\W : 알파벳이나 숫자를 제외한 문자

\d : 숫자 [0-9]와 동일

\D : 숫자를 제외한 모든 문자

\: 위의 각 기능에서 벗어납니다(escape).

(?i): 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않는다 (물음표+소문자i(아이))


B.     기본적인 문자열 검증 정규식


^[0-9]*$  :  숫자만

^[a-zA-Z]*$  :  영문자만

^[가-힣]*$  :  한글만

^[a-zA-Z0-9]*$  :  영어/숫자만

.+ : 한문자 이상의 전체문자를 표시한다.

C. 정규식 표현 예제


이메일 : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$  or  ^[_0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[_0-9a-zA-Z-]+)*$ 

휴대폰 :  ^01(?:01[6-9]) - (?:\d{3}\d{4}) - \d{4}$ 

일반전화 : ^\d{2,3} - \d{3,4} - \d{4}$

주민등록번호 : \d{6} \- [1-4]\d{6}

IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

파일확장자: ([^\s]+(\.(?i)(jpg|png|gif|bmp))$)



1. 자바스크립트 정규표현식은 RegExp 객체로 표현됨.

2. RegExp 객체 생성방법

    1) RegExp() 생성자 사용

    2) 한쌍의 슬래시(/) 안에 리터럴을 기술

           --> var pattern = /s$/;        

           --> var pattern = new RegExp("s$");

                              : 's' 로 끝나는 문자열에 매칭됨


3. 정규표현식 리터럴 문자

    1) \0 : 널문자

    2) \t  : 탭

    3) \n : 줄바꿈

    4) \v : 수직탭

    5) \f  : 폼피드

    6) \r  : 캐리지리턴


4. 문자클래스 ( 대괄호로 둘러싼 개별 리터럴 문자 --> 대괄호내에 정의된 모든 문자에 매치됨)

    1) /[abc]/   : a,b,c 모두 매칭

    2) /[^abc]/  : a,,b,c 가 아닌 모든 문자에 매치

    3) /[a-z]/    : 임의의 알파벳 소문자에 매치

    4) /[a-zA-Z0-9]/   : 임의의 알파벳 대소문자 및 숫자에 매치

    5) 특수문자

          a) \s : Unicode 공백문자

          b) \S : Unicode 공백문자가 아닌 문자

          c) \w : ASCII 문자([a-zA-Z0-9]) 와 동일

          d) \W : ASCII 문자가 아닌 문자 ([^a-zA-Z0-9]) 와 동일

          e) \d  : ASCII 숫자([0-9]) 와 동일

          f) \D : ASCII 숫자가 아닌 문자([^0-9]) 와 동일

          g) \b : 백스페이스


               ==> /[\b]/    백스페이스에 매치됨.


               ==> /[\s\d]/  공백문자나 숫자 하나에 매치


5. 정규표현식 반복 문자 

      1) {n,m} n번이상 m번 보다 이하

      2) {n,}   n번이상

      3) {n}    딱 n번

      4) ?        0또는 한번 나타남  ({0,1}과 동일)          

      5) +        한번이상      ({1,}과 동일)

      6) *        0번이상       ({0,} 과 동일)


           ==> /\d{2,4}/    : 2에서 4자리 사이의 숫자와 매치


           ==> /\w{3}\d?/    : 정확히 3 문자와 매치 돠고 생략 가능한 숫자가 하나 있다.


           ==> /\s+java\s+/  : 앞뒤에 하나 이상의 공백이 있는 java 와 매치


           ==> /[^"]*/            : 0개 이상의 따옴표가 아닌 문자와 매치


6. 대체표현식 (|문자)  ==>  왼쪽에서 오른쪽으로 검색됨 (먼저 매치되면 뒤의 것은 매칭 안됨)

                    /ab|cd|ef/          : ab 문자열 또는 cd문자열 또는 ef문자열 매치

                    /d{3}|[a-z]{4}/  : 세자리 숫자나 네개의 소문자에 매치 

                    /a|ab/                : "ab" 에 적용되면 첫번째 표현식에만 매칭됨.


7. 그룹화 (소괄호)  : 

# 정규표현식 플래그

   i    : 대소문자 구별하지 않음

   g   : 전역매칭 수행 , 첫번째 매치에서 끝내지 않고 매치되는 모든 것을 찾는다.

   m  : 여러줄 상태


# 정규표현식 패턴 매칭을 위한 String 메서드

(1) search()  : - 정규표현식을 파라미터로 받아 가장 처음 매칭되는 부분 문자열의 위치를 리턴, 

                    - 파라미터가 정규표현식이 아니라면 RegExp()생성자로 정규표현식으로 변환된다. 

                     - 매칭되는 부분 문자열이 없다면 -1 리턴 

                     - 전역기능 지원안함. g플래그가 있다면 무시 


               "javaScript".search(/script/i);               ==>  4리턴


(2) replace() : - 찾아서 바꾸기 작업 수행

                      - 첫번째 파라미터 : 정규표현식 , 두번째 파라미터 :바꿀 문자열(두번째파라미터 함수가능,동적문자열가능)

                      - g플래그가 있으면 모두다 바꾸고, 없으면 첫번째 매치만 바꿈

                      - 첫번째 파라미터가 정규표현식이 아니면 주어진 문자열을 그대로 검색한다.

                      - 

                 text.replace(/javascript/gi,"JavaScript");           ==> 문자열의 대문자가 어떤상태던지 JavaScript로 변환한다.


(3) match()

728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

jQuery 자식 팝업 창에서 부모 창 컨트롤  (0) 2016.03.17
jquery radio, select, checkbox  (0) 2013.10.28
quick menu 바  (0) 2013.07.19
javascript 브라우저 종류  (0) 2012.11.23
자주 쓰이는 JQuery Ajax 예제  (0) 2011.08.02
728x90

 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 

<script type="text/javascript">

 $(function(){
  var currentTop = parseInt($("#quickmenu").css("top"));
  $(window).scroll(function() {
   $("#quickmenu").stop().animate({"top": $(window).scrollTop()+currentTop+"px"}, 500);
  });
 });

</script>

 

- quick menu bar 부분

<div id="quickmenu" style="position:absolute; left:50%; top:100px; width:100px; margin-left:450px;">...</div>

728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

jquery radio, select, checkbox  (0) 2013.10.28
정규 표현식 요약  (0) 2013.10.02
javascript 브라우저 종류  (0) 2012.11.23
자주 쓰이는 JQuery Ajax 예제  (0) 2011.08.02
jQuery 요약  (0) 2011.08.02
728x90


if( navigator.appName.indexOf("Microsoft") > -1 ) // IE?

{

if( navigator.appVersion.indexOf("MSIE 6") > -1) // IE6?

{

// code

}

else if( navigator.appVersion.indexOf("MSIE 7") > -1) // IE7?

{

// code

}

}


출처 - http://www.dezrare.com/604


===================================================================================


1. 브라우저 헤더정보

<script language="javascript">

function userAgent()
{
var browserType = "";
if(navigator.userAgent.indexOf("MSIE") != -1)
{
browser = "IE";
return browserType;
}
if(navigator.userAgent.indexOf("Firefox") != -1)
{
browser = "FF";
return browserType;
}
if(navigator.userAgent.indexOf("Mozilla") != -1)
{
browser = "MZ";
return browserType;
}
if(navigator.userAgent.indexOf("Opera") != -1)
{
browser = "OP";
return browserType;
}
if(navigator.userAgent.indexOf("Safari") != -1)
{
browser = "SF";
return browserType;
}
if(navigator.userAgent.indexOf("Mac") != -1)
{
browser = "MC";
return browserType;
}

browser = "NG";
return browserType;
}
</script>

2. 객체존재여부
<script language="javascript">
function userAgent()
{
if(window.ActiveXobject){
browser = "IE";
return browserType;
}
else {
browser = "NG";
return browserType;
}
}
</script>


출처: http://blog.naver.com/cowboy0626/30007053474

728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

정규 표현식 요약  (0) 2013.10.02
quick menu 바  (0) 2013.07.19
자주 쓰이는 JQuery Ajax 예제  (0) 2011.08.02
jQuery 요약  (0) 2011.08.02
자바스크립트 실수 모음  (0) 2011.05.20
728x90


자주 쓰이는 jQuery AJAX 예제
개발일정에 치여 도무지 블로깅 할 시간이 안나 미치겠네요. 새로운 것 정리하기는 힘들고 자주 사용하고 있는 Ajax 패턴 정리해 봅니다.
Ajax 구현할 때는 거의 jQuery 를 활용하고 있습니다. 모바일 웹 구현할 때 네이티브 앱과 같은 UX 를 위해 Ajax 를 많이 사용하게 됩니다.
■로그인
로그인은 보통 화면에서 폼 값을 입력한 후 해당 값과 함께 ajax 호출합니다.
호출된 액션에서 로그인 관련 인증 및 예외처리 프로세스를 돌인 후
인증 상태에 따라 결과 값을 출력합니다.
출력된 값에 따라 로그인 페이지에서 경고를 띄우든 다음 페이지로 진행하든 처리하죠.
ajax 루틴을 돌고 있을 때 사용할 로딩 바를 띄우는 작업도 함께 해주면 좀더 나은 UX 를 구현할 수 있겠죠.
- login view script
<script>
function checkLogin(){
   
    if( $.trim($("#userId").val()) == '' ){
        alert("아이디를 입력해 주세요.");
        $("#userId").focus();
        return;
    }
    if( $.trim($("#userPw").val()) == '' ){
        alert("비밀번호를 입력해 주세요.");
        $("#userPw").focus();
        return;
    }
    // 로그인 프로세스 호출
    $.ajax({
        type: 'post'
        , async: true
        , url: '/member.do?cmd=login'
        , data: $("#frm").serialize()
        , beforeSend: function() {
             $('#ajax_load_indicator').show().fadeIn('fast');
          }
        , success: function(data) {
            var response = data.trim();
            console.log("success forward : "+response);
            // 메세지 할당
            switch(response) {
                case "nomatch":
                    msg = "아이디 또는 비밀번호가 일치하지 않습니다."; break;
                case "fail":
                    msg = "로그인에 실패 했습니다."; break;
                default :
                    msg = "존재하지 않는 사용자입니다."; break;
            }
            // 분기 처리
            if(response=="success"){
                window.location.href = "${targetUrl}";
            } else {
                alert(msg);
            }
          }
        , error: function(data, status, err) {
         console.log("error forward : "+data);
            alert('서버와의 통신이 실패했습니다.');
          }
        , complete: function() {
         $('#ajax_load_indicator').fadeOut();
          }
    });
}
</script>
- login view html
<form id="frm" name="frm" method="post" action="" onSubmit="checkLogin();return false;">
    <fieldset>
        <legend>login</legend>
        <div class="login_item mg_top34">
            <label>id</label>
            <input id="userId" name="memberVo.xcWebMbrId" type="text" class="i_login" />
        </div>
        <div class="login_item mg_top10">
            <label>password</label>
            <input id="userPw" name="memberVo.xcPswd" type="password" class="i_login" />
        </div>
       
        <div id="ajax_load_indicator" style="display:none">
            <p style="text-align:center; padding:16px 0 0 0"><img src="/mobile/common/img/ajax-loader-line.gif" /></p>
        </div>
        <p class="keeping mg_left89">
            <input id="keepidpw" class="rd_box22" value="1" type="checkbox" name="idPswdSave" >
            <label for="keepidpw">ID/PW 저장</label>
        </p>
        <p class="keeping mg_left20">
            <input id="keepid" class="rd_box22" value="1" type="checkbox" name="idSave" >
            <label for="keepid">ID 저장</label>
        </p>
        <span class="btn_login">
            <input type="image" src="<%=imageUrl%>/btn/btn_login.jpg" title="로그인" onclick="checkLogin();return false;">
        </span>
        <p class="btn_register"><a href="/member.do?cmd=memberJoin"><img src="<%=imageUrl%>/btn/btn_join.jpg" alt="회원가입" /></a>
        <a href="/member.do?cmd=goIdPwFind" class="mg_left5"><img src="<%=imageUrl%>/btn/btn_sch.jpg" alt="아이디/비밀번호 찾기" /></a></p>
    </fieldset>
</form>
- login ajax result
<%@ include file="/mobile/common/include/config.jsp" %>
${result}
■내용 추가
페이지 하단으로 스크롤 이동했을 때 추가되는 자동으로 다음 페이지 데이터가 추가되는 UX를 구현할 때 사용하는 기법으로 jQuery 의 append() 함수를 사용할 수 있다.
- product list view script
<script>
function paging(){
    count++;
   
    $.ajax({
        type: 'post'
        , async: true
        , url: "/display.do?cmd=productListAppend&ordFlag="+'${ordFlag}'+"&categoryCd="+categoryCd+"&itemCode="+'${itemCode}'+"&count="+count
        , beforeSend: function() {
             $('#ajax_load_indicator').show().fadeIn('fast');
          }
        , success: function(data) {
            var response = data.trim();
            console.log("success forward : "+response);
            // 상품 리스트 할당
            $('#view_list').append(response);
            $('#product_count').html($('#view_list li.thumb').size());
          }
        , error: function(data, status, err) {
            console.log("error forward : "+data);
            alert('서버와의 통신이 실패했습니다.');
          }
        , complete: function() {
            $('#ajax_load_indicator').fadeOut();
          }
    });
}
</script>
- product list view html
<!-- 상품 목록 -->
<div id="view_list" class="product_list" style="display: none;">
<c:forEach var="list" items="${returnMap}">
  <a href="/display.do?cmd=productView&brandCd=${list.brandCd }&prodCd=${list.prodCd }&ordFlag=${ordFlag }&styleYY=${list.styleYY }&priceDpYn=${list.priceDpYn }&listPrice=${list.listPrice }&categoryCd=${categoryCd}&itemCode=${itemCode}&rNum=${list.rNum }&count=${count}">
    <ul>
      <li class="thumb"><img src="${list.listImg }" alt="상품이미지" /></li>
      <li class="b_title"><span class="brand">[${list.brandNm }]</span><span class="title">${list.prodNm }</span></li>
      <li class="price">
      <c:if test="${list.priceDpYn eq 'Y'}">
      ${list.listPrice }원
      </c:if>
      <c:if test="${list.priceDpYn eq 'N'}">
      <span><a href="#"><img src="<%=imageUrl%>/common/ic_login.png" alt="로그인" /></a></span>
      </c:if>
      </li>
      <li class="btn_go"><img src="<%=imageUrl%>/btn/btn_go.png" alt="" /></li>
    </ul>
  </a>
</c:forEach>
</div>
<div id="ajax_load_indicator" style="display:none">
    <p style="text-align:center; padding:14px 0 14px 0"><img src="/mobile/common/img/ajax-loader-line.gif" /></p>
</div>
   
<!-- 더보기 bar-->
<div class="more_bar">
<a href="javascript:paging()">
  <ul class="sec01">
    <li class="btn_arr"><img src="<%=imageUrl%>/common/arr_down.png" alt="" /></li>
    <li class="text_more">15개 더보기</li>
    <li class="text_num"><span id="product_count">${total}</span> / 999</li>
  </ul>
  </a>
  <p><a href="#"><img src="<%=imageUrl%>/btn/btn_top.jpg" alt="맨위로" /></a></p>
</div> 
- append view html
<%@ include file="/mobile/common/include/config.jsp"%>
<!-- 상품 목록 -->
<c:forEach var="list" items="${returnMap}">
    <a href="/display.do?cmd=productView&brandCd=${list.brandCd }&prodCd=${list.prodCd }&ordFlag=${ordFlag }&styleYY=${list.styleYY }&priceDpYn=${list.priceDpYn }&listPrice=${list.listPrice }&categoryCd=${categoryCd}&itemCode=${itemCode}&rNum=${list.rNum }&count=${count}">
        <ul>
            <li class="thumb"><img src="${list.listImg }" alt="상품이미지" /></li>
            <li class="b_title"><span class="brand">[HAZZYS]</span><span
                class="title">${list.prodNm }</span></li>
            <li class="price">
            <c:if test="${list.priceDpYn eq 'Y'}">
            ${list.listPrice }원
            </c:if>
            <c:if test="${list.priceDpYn eq 'N'}">
            <span><a href="#"><img src="<%=imageUrl%>/common/ic_login.png" alt="로그인" /></a></span>
            </c:if>
            </li>
            <li class="btn_go"><img src="<%=imageUrl%>/btn/btn_go.png" alt="" /></li>
        </ul>
    </a>
</c:forEach>

728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

quick menu 바  (0) 2013.07.19
javascript 브라우저 종류  (0) 2012.11.23
jQuery 요약  (0) 2011.08.02
자바스크립트 실수 모음  (0) 2011.05.20
자바스크립트 팁  (0) 2011.05.20
728x90

[jQuery Cookbook - 1장 jQuery의 기초]

 

• jQuery는 HTML문서, 보다 정확하게는 문서객체모델(DOM)과 자바스크립트 사이의 상호작용을 간단하게 해주는 오픈소스자바스크립트 라이브러리이다.
•jQuery의 철학 : Write less, do more (적게 작성하고, 보다 많이 한다)
•jQuery 선택자 : #은 id, .은 class
•jQuery('div').hide() => 모든 div를 숨긴다.
•jQuery('div').text('new content') => 모든 div의 내부텍스트를 변경한다.
•jQuery('div').addClass("updatedContent") => 모든 div에 updatedContent클래스를 추가한다.
•jQuery('div').show() => 모든 div를 나타낸다.
•jQuery 온라인문서 : http://docs.jquery.com/Main_Page
•문서에 jQuery 포함하기 (부가적인 기능향상을 위해 방법1을 사용하자!)
방법1 : <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

방법2 : 다운로드 받아 포함시키기

•DOM 로드된 후 함수 실행 (로딩속도 향상을 위해 방법3을 사용하자!)

방법1 : jQuery(document).ready(function() { //실행구문 })

방법2 : jQuery(function() { //실행구문 })

방법3 : </body> 앞에 스크립트 추가

•DOM요소 선택

jQuery('a') => 모든 a요소 (== document.getElementsByTagName('a'))

jQuery('a').length => 모든 a요소의 개수

jQuery('input', $('form')) => 모든 form요소내의 input요소(들)

jQuery('input', document.forms[0]) => 첫번째 form요소내의 input요소(들)

jQuery('input', 'body') => body요소내의 input요소(들)

•DOM요소 필터링

jQuery('a').filter('.external') => 모든 a요소 중 클래스명이 external인 a요소(들) (== jQuery('a').filter(function(index) { return $(this).hasClass('external'); }))

jQuery('p').filter('.middle').end() => 모든 p요소 중 클래스명이 middle인 요소(들)의 필터링 전 요소(들) (== jQuery('p'))

•파괴작업 (end()도 파괴작업의 이) : 일치된 jQuery요소집합에 변경을 가하는 모든 종류의 작업
•DOM요소 검색

jQuery('p').find('em') => 모든 p요소 하위의 em요소(들) (== jQuery('em', $('p')) ==jQuery('p em'))

jQuery('p').filter('.middle').find('span').end().end() => 모든 p요소 중 클래스명이 middle인 요소(들)의 하위 span요소(들)의 검색 전, 필터링 전 요소(들)

(==jQuery('p'))

•filter는 현재 요소(들)에 대해, find는 하위 요소(들)에 대해 작동
•DOM 셀렉션 추가

jQuery('div').find('p').andSelf().css('border', '1px solid #993300'); => div요소(들)과 하위 p요소(들) 모두에 대해 스타일 적용

•DOM 탐색

jQuery('li:eq(1)') => 두번째 li 요소

관련메소드 => next():다음요소, prev():이전요소, parent():상위요소, children():하위요소들, nextAll():다음요소들, prevAll():이전요소들

jQuery('li:eq(1)').parent().children(':last') => 두번째 li요소의 상위요소의 마지막 하위요소

기타 탐색관련 메소드 : http://docs.jquery.com/Traversing

•DOM요소 생성

jQuery('<p><a>jQuery</a></p>'); => p요소 생성

jQuery('<p><a>jQuery</a></p>').find('a').attr('href', 'http://www.jquery.com'); => p요소를 생성하고 하위 a요소(들)을 찾아 속성 변경

jQuery('<p><a>jQuery</a></p>').find('a').attr('href', 'http://www.jquery.com').end().appendTo('body');

=> p요소를 생성하고 하위 a요소(들)을 찾아 속성 변경 후 생성된 p 요소를 body요소 하위로 포함시킴

•DOM요소 제거

jQuery('a).remove(); => 모든 a요소 제거

jQuery('a').remove('.remove'); => 클래스명이 remove인 모든 a요소 제거

•DOM요소 교체

jQuery('li.remove').replaceWith('<li>removed</li>'); => 클래스명이 remove인 모든 li요소들을 뒤에 나온 li요소로 변경

•DOM요소 복제

jQuery('ul').clone().appendTo('body'); => 모든 ul요소들을 복제하여 body의 하위요소로 포함시킴

jQuery('ul#a li').click(function() { //실행구문 }).parent().clone(true).find('li').appendTo('#b').end().end().remove();

=> 아이디가 a인 ul 하위의 li요소들을 클릭하면 함수를 실행시키고 부모요소인 ul요소를 찾아 복제(true이면 이벤트까지도 복제됨)한 후 복제된 ul의

하위 li요소들을 찾아 아이디가 b인 요소의 하위요소로 포함시킨 후 기존 ul을 제거

•속성 제어

jQuery('a').attr('href', 'http://www.jquery.com').attr('href'); => 모든 a요소의 href속성의 값을 설정하고 가져옴

jQuery('a').attr({'href':'http://www.jquery.com', 'title':'jquery.com'}) => 모든 a요소의 href속성값과 title속성값을 설정

jQuery('a').removeAttr('title') => 모든 a요소의 title속성 제거

•class 조작

addClass() : 클래스 추가  hasClass() : 클래스 값 확인  removeClass() : 클래스 제거  toggleClass() : 클래스 없으면 추가, 있으면 제거

•HTML 컨텐츠 / 텍스트 조작

jQuery('p').html('<strong>Hello World</strong>'); => 모든 p요소에 html컨텐츠 삽입

jQuery('p').html(); => 모든 p요소의 html 가져옴

jQuery('p').text('Hello World'); => 모든 p요소에 text 삽입 (text메소드는 html을 escape한다)

jQuery('p').text(); => 모든 p요소의 text 가져옴

•전역적인 충돌 없이 $ 사용

(function($) {

})(jQuery);

 

 

[JQuery Cookbook - 2장 jQuery로 요소 선택하기]

 

• jQuery함수내에서 CSS셀렉터 사용
jQuery('#content p a'); => id가 content인 요소의 하위 모든 p요소의 하위 모든 a요소들
jQuery('#content p a').addClass('selected'); => 선택된 요소들에 selected 클래스 적용
•직속 자손 결합자 (>) : 계층적 관계
jQuery('#nav li > a'); => id가 nav인 요소의 하위 모든 li요소의 직속 자손인 a요소들

jQuery('> p', '#content'); => id가 content인 요소의 직속 자손인 p요소들 => jQuery('#content > p')와 같다

jQuery('#content').children(); => id가 content인 요소의 모든 직속 자손들 => jQuery('#content').find('> *');과 같다

jQuery('#content').children('p'); => id가 content인 요소의 모든 직속 p요소들

•인접 형제 결합자 (+) : 같은 레벨벨
jQuery('h1 + h2'); => h1요소에 인접한 h2요소들 => jQuery('h1').next('h2');와 같다
jQuery('h1').siblings('h2, h3, p'); => h1요소에 인접한 h2나 h3나 p 요소들
jQuery('li.selected').nextAll('li'); => selected클래스를 가진 모든 li요소들 다음에 나오는 모든 li요소들
•일반 형제 결합자 (~)

jQuery('li.selected ~ li'); => selected클래스를 가진 모든 li요소들 다음에 나오는 모든 li요소들

•필터

◦:first 첫번째 선택요소
◦:last 마지막 선택요소
◦:even 짝수번째 요소들
◦:odd 홀수번째 요소들
◦:eq(n) 인덱스가 n인 요소
◦:lt(n) 인덱스가 n보다 작은 요소들
◦:gt(n) 인덱스가 n보다 큰 요소들

jQuery(':even'); => 문서내의 모든 짝수번째 요소들
jQuery('ul li').filter(':first'); => ul요소다음에 나오는 첫번째 li요소들

•현재 에니메이션 중인 요소 선택
jQuery('div:animated'); => 에니메이션 중인 div요소들

jQuery('div:not(div:animated)').animate({height:100}); => 에니메이션 중이 아닌 div요소들의 높이를 100까지 에니메이션

•텍스트나 요소를 포함하는 요소 선택

jQuery('span:contains("bob")'); => bob라는 문자열을 포함하는 span요소들

jQuery('div:has(p a)'); => p요소 하위에 a요소를 가진 div요소들

jQuery('p').filter(function() { return /(^|\s)(apple|orange|lemon)(\s|$)/.test(jQuery(this).text()); });

  => apple이나 orange나 lemon이라는 텍스트를 가진 p요소들

•일치되지 않는 요소 선택

jQuery('div:not(#content)'); => id가 content가 아닌 모든 div요소들

jQuery('a:not(div.important a, a.nav)'); => important클래스를 가진 div요소의 하위 a요소가 아니고 nav클래스를 가진 a요소가 아닌 a요소들

jQuery('a').click( function() { jQuery('a').not(this).addClass('not-clicked'); } ); => a요소를 클릭하면 모든 다른 a요소들에 not-clicked클래스 추가

$('#nav a').not('a.active'); => id가 nav인 요소의 하위 a요소들 중 active클래스를 가지지 않은 a요소들

•가시성 기반 요소 선택

jQuery('div:hidden'); => 눈에 보이지 않는 div요소들

•속성 기반 요소 선택

jQuery('a[href="http://google.com"]');=>href속성의 값이 http://google.com인 a요소들

jQuery('*[title][href]'); => title과 href 속성을 모두 가지는 요소들

jQuery('div[id^="content-sec-"]'); => id속성의 값이 content-sec-으로 시작하는 div요소들

•속성 셀렉터

◦[attr] 특정 속성을 가지고 있는 요소
◦[attr=val] 속성이 특정값을 가지는 요소
◦[attr!=val] 속성이 특정값을 가지지 않는 요소
◦[attr^=val] 속성이 특정값으로 시작하는 요소
◦[attr$=val] 속성이 특정값으로 끝나는 요소
◦[attr~=val] 공백과 함께 특정값을 포함하는 요소 (car는 car와 일치하지만 cart와는 불일치)
•폼요소 셀렉터

◦:text <input type="text" />
◦:password <input type="password" />
◦:radio <input type="radio" />
◦:checkbox <input type="checkbox" />
◦:submit <input type="submit" />
◦:image <input type="image" />
◦:reset <input type="reset" />
◦:button <input type="button" />
◦:file <input type="file" />
◦:hidden <input type="hidden" />
jQuery(':text'); => type속성의 값이 text인 모든 input요소들

jQuery(':input:not(:hidden)'); => 눈에 보여지는 모든 input요소들

jQuery(':text, :textarea'); => type속성의 값이 text이거나 textarea인 모든 input요소들

•특성을 갖는 요소 선택

jQuery('*').filter(function() { return !!jQuery(this).css('backgroundImage') });

=> 배경이미지를 갖는 모든 요소들

=> !!는 타입을 불린으로 변경하기 위함

=> jQuery함수의 인자인 this는 모든요소들(*) 중 filter에 인자로 전달되는 시점에 함수에 인자로 전달된 요소를 가리키는데

    요소를 jQuery함수의 인자로 넘겨 jQuery메소드를 사용할 수 있도록 함

jQuery('div').filter(function() { var width = jQuery(this).width(); return width>100&&width<200; });

=> 넓이가 100보다 크고 200보다 작은 모든 div요소들

•컨텍스트 매개변수

◦컨텍스트란 jQuery가 셀렉터 식에 의해 매치되는 요소를 찾을 장소
◦jQuery에 의해 사용되는 기본 컨텍스트는 DOM계층에서 최상위 항목인 document임. 즉, jQuery('p')는 jQuery('p', 'document')와 같다
jQuery('p', '#content'); => id가 content인 요소의 하위 p요소들 (이때 #content가 p의 컨텍스트) => jQuery('#content p');와 같다

jQuery('form').bind('submit', function() { var allInputs = jQuery('input', this); });

=> form요소들 중 submit이벤트가 일어나면 allinputs변수에 이벤트가 일어난 form의 모든 input요소들을 저장

[출처 네이버 블로그 - 달빛소년]

728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

quick menu 바  (0) 2013.07.19
javascript 브라우저 종류  (0) 2012.11.23
자주 쓰이는 JQuery Ajax 예제  (0) 2011.08.02
자바스크립트 실수 모음  (0) 2011.05.20
자바스크립트 팁  (0) 2011.05.20
728x90


1. for문 안의 배열 iterate
 
 Example:
 var myArray = [ “a”, “b”, “c” ];
 var totalElements = myArray.length;
 for (var i = 0; i < totalElements; i++) {
 console.log(myArray[i]);
 }


 Solution: always use regular for loops to iterate arrays.
 var myArray = [ “a”, “b”, “c” ];
 for (var i=0; i<myArray.length; i++) {
  console.log(myArray[i]);
 }
 
 << myArray 에 대한 간섭으로 인해 잘못된 정보를 참조할 수 있다고 하는 내용인데요...
    이글에 대한 많은 분들이 댓글 이슈를 달아주시기도 한 내용입니다.
 그럼 이슈가 무엇이였냐면요... 위 Example 에 대한 예시가 잘못되었다는 것이죠
 Example :
  for (var el in myArray){}
 Solution :
  for(var i = 0, iMax = myArray.length; i < iMax; i++){}
 이런 식으로 했어야 하였다는 이슈가 있더군요.
 
2. 배열 정의
 Example:
 var myArray = new Array(10);
 Solution: Use literal notation to initialize arrays. Do not predefine array length.
 var myArray = [];
 
 << 문제점 2개를 이야기 하는데요
      var a = new Array(10); // 빈 item 에 접근으로 인해 undefined 발생
  var a = {"","","","",....,""}; // 속도가 느린문제
  이런 문제를 앉고 있다고 하네요 >>
 
 
3. Undefined properties
 Example:
 var myObject = {
  someProperty: “value”,
  someOtherProperty: undefined
 }
 Solution: if you want to explicitly declare a uninitialized properties inside an object, mark them as null
 var myObject = {
  someProperty: “value”,
  someOtherProperty: null
 }
 
 << object 에 없는 값과 있으나 undefined 로 정의한 값을 구분할 수 없다는 이슈였습니다.
 typeof myObject['someOtherProperty'] // undefined
 typeof myObject['unknownProperty'] // undefined   >>
 


4. 클로저 오용
 Example:
 function(a, b, c) {
  var d = 10;
  var element = document.getElementById(‘myID’);
  element.onclick = (function(a, b, c, d) {
   return function() {
    alert (a + b + c + d);
   }
  })(a, b, c, d);
 }
 Solution: use closures to simplify your code
 function (a, b, c) {
  var d = 10;
  var element = document.getElementById(‘myID’);
  element.onclick = function() {
   //a, b, and c come from the outer function arguments.
   //d come from the outer function variable declarations.
   //and all of them are in my closure
   alert (a + b + c + d);
  };
 }
 
 << 변수에 대한 접근 범위를 몰라 중복해서 불필요한 파라미터를 정의하는 것을 말합니다. >>
 
5. loop 안의 클로져
 Example:
 var elements = document.getElementByTagName(‘div’);
 for (var i = 0; i<elements.length; i++) {
  elements[i].onclick = function() {
   alert(“Div number “ + i);
  }
 }
 Solution: use a second function to pass the correct value.
 var elements = document.getElementsByTagName(‘div’);
 for (var i = 0; i<elements.length; i++) {
  elements[i].onclick = (function(idx) { //Outer function
   return function() { //Inner function
    alert(“Div number “ + idx);
   }
  })(i);
 }


 << 내부 클로져의 경우 최종값 i 값을 참조한다는 문제였습니다. >>
 
6. DOM 으로인한 메모리 누수
 Example:
 function attachEvents() {
  var element = document.getElementById(‘myID’);
  element.onclick = function() {
   alert(“Element clicked”);
  }
 };
 attachEvents();
 Solution: avoid those closures or undo the circular reference inside the function
 function attachEvents() {
  var element = document.getElementById(‘myID’);
  element.onclick = function() {
   //Remove element, so function can be collected by GC
   delete element;
   alert(“Element clicked”);
  }
 };
 attachEvents();
 
 << 요소에 function이 참조로 걸려 해제가 되지 않는 문제를 다루고 있습니다. >>


7. float 과 integer의 구분
 Example:
 var myNumber = 3.5;
 var myResult = 3.5 + 1.0; //We use .0 to keep the result as float
 Solution: don’t use decimals to “convert” numbers to floats.
 var myNumber = 3.5;
 var myResult = 3.5 + 1; //Result is 4.5, as expected
 
 << 자바스크립트 float 과 integer 구분이 없습니다. 모두 float 입니다. >>
 
8. with() 사용
 Example:
 team.attackers.myWarrior = { attack: 1, speed: 3, magic: 5};
 with (team.attackers.myWarrior){
  console.log ( “Your warrior power is ” + (attack * speed));
 }
 Solution: don’t use with() for shortcuts. Only for context injection when you really need it.
 team.attackers.myWarrior = { attack: 1, speed: 3, magic: 5};
 var sc = team.attackers.myWarrior;
 console.log(“Your warrior power is ” + (sc.attack * sc.speed));


 << with() 는 특별한 경우가 아니면 사용하지 말라는 내용입니다. 이유는 느리기 때문입니다. >>
 
9. 문자 조합을 이용한 setTimeout/setInterval
 Example:
 function log1() { console.log(document.location); }
 function log2(arg) { console.log(arg); }
 var myValue = “test”;
 setTimeout(“log1()”, 100);
 setTimeout(“log2(” + myValue + “)”, 200);
 Solution: never use strings for setTimeout()or setInterval()
 function log1() { console.log(document.location); }
 function log2(arg) { console.log(arg); }
 var myValue = “test”;
 setTimeout(log1, 100); //Reference to a function
 setTimeout(function(){ //Get arg value using closures
  log2(arg);
 }, 200);
 
 << 스트링 조합을 사용할 경우 웹브라우저 엔진이 새로운 function 을 만들때 매우 느려지기때문에
    이렇게 사용하지 말라고 말합니다. >>
 
10. 무거운 funcation에 대한 setInterval() 사용
 Example:
 function domOperations() {
  //Heavy DOM operations, takes about 300ms
 }
 setInterval(domOperations, 200);
 Solution: avoid setInterval(), use setTimeout()
 function domOperations() {
  //Heavy DOM operations, takes about 300ms
  //After all the job is done, set another timeout for 200 ms
  setTimeout(domOperations, 200);
 }
 setTimeout(domOperations, 200);


 <<  자바 스크립트 엔진은  대기열에 이미 다른 실행이있다면 다음 실행 대기열에 추가합니다.
  이럴경우 function 을 건너뛰거나 동시에 실행될 소지가 발생합니다. >>
 >>
11. this 의 오용
 - 예로 표현하기 어려움.
 * Regular function: myFunction(‘arg1’);
 this points to the global object, wich is window for all browers.
 * Method: someObject.myFunction(‘arg1’);
 this points to object before the dot, someObject in this case.
 * Constructor: var something = new myFunction(‘arg1’);
 this points to an empty Object.
 * Using call()/apply(): myFunction.call(someObject, ‘arg1’);
 this points to the object passed as first argument.
 
 << 여기에 대해서는 궁금하네요...접근에 대한 이슈같아 보입니다. >>
 
12. eval() 을 이용한 dynamic properties 접근
 Example:
 var myObject = { p1: 1, p2: 2, p3: 3};
 var i = 2;
 var myResult = eval(‘myObject.p’+i);
 Solution: use square bracket notation instead of eval()
 var myObject = { p1: 1, p2: 2, p3: 3};
 var i = 2;
 var myResult = myObject[“p”+i];
 
 << eval() 대신에 배열을 이용해서 접근하라는 말입니다. >>
 
13. undefined 를 사용하는 변수
 Example:
 if ( myVar === undefined ) {
  //Do something
 }
 Solution: use typeof when checking for undefined.
 if ( typeof myVar === “undefined” ) {
  //Do something
 }
 
 << undefined 확인하기위해서는 typeof 를 사용하라는 것입니다. >>
 


 

728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

quick menu 바  (0) 2013.07.19
javascript 브라우저 종류  (0) 2012.11.23
자주 쓰이는 JQuery Ajax 예제  (0) 2011.08.02
jQuery 요약  (0) 2011.08.02
자바스크립트 팁  (0) 2011.05.20
728x90

* 지역변수는 함수 전체에서 정의되어 있다. var 문이 실행되고 나서야 실제로 초기화가 이루어진다.
* 모든 객체는 객체를 초기화하는데 사용되는 생성자 함수인 constuctor 프로퍼티를 갖는다.
* 리터럴 객체 혹은 리터럴 배열 생성방법: var obj = {} , var arr = [] 이다. 생성자를 사용 호출시 new() 사용한다.

함수 전역 변수
function square(x) { return x * x; }
var a = square(4);  // a에는 숫자 16이 저장된다.
var b = square;      // 이제 b는 square 같은 함수를 가르킨다.
var c = b(5) ;         // c에는 숫자 25가 저장된다.

var o = new Object;
o.square = function(x){ return x * x; } // 함수 리터럴
y = o.square(16);  // y에는 256이 저장된다.

var a = new Array(3); 
a[0] = function(x) { return x * x;}
a[1] = 20;
a[2] = a[0](a[1]); // a[2]에는 400이 저장된다.


) call()메서드
call() : 함수 f()에 두 숫자를 전달하고 이 함수를 마치 객체의 o의 메서드인 것처럼 호출하려 한 다면 다음과 같은
 코드를 작성할 수 있다.
f.call(o, 1, 2);
이 표현은 다음의 코드와 유사하다.
o.m = f;
o.m(1,2);
delete o.m;

) 네임스페이스로서의 호출 객체
function init(){
// 코드는 여기에 넣는다.
// 선언된 모든 변수는 전역 네임스페이스를 어지럽히는 대신
// 호출 객체의 프로퍼티가 된다.
}
init();  // 함수를 호출하는 것을 잊어서는 안된다.

* 익명의 함수를 정의하고 호출하는 단일 표현식을 사용할 수 있다.
(function(){  // 이 함수는 이름이 없다.
// 코드는 여기에 넣는다.
// 선언된 모든 변수는 전역 네임스페이스를 어지럽히는 대신 
// 호출객체의 프로퍼티가 된다.
})();  // 함수 리터럴을 종결하고 이를 지금 호출한다.

* 자바스크립트에서 함수는 다른 모든 값과 마찬가지로 데이터다. 따라서 함수는 다른 함수에 의해 반환될수 있고 객체에 프로
   퍼티로 할당될 수도 있으며, 또한 배열 등에 저장될 수도 있다.

* 자바스크립트의 객체는 자신의 프로토타입에 있는 프로퍼티들을 상속받는다.

// 생성자 함수는 각 인스턴스의 프로퍼티가 다른 값이 되도록 초기화시킨다.
function Rectangle(w, h){
 this.width = w;
 this.height = h;
}
// 프로토타입 객체는 각 인스턴스들이 공유해야 하는 프로퍼티나 메서드를 정의한다.
// 생각) JAVA의 static 역할을 말하는 거 같다.
Rectongle.prototype.area = function(){ return this.width * this.height; }

생성자는 객체들의 클래스를 위한 이름을 정의하고 , width나 height와 같은 인스턴스마다 다를 수 있는 프로퍼티의 값을 초기화시킨다. 그리고 프로토타입 객체는 생성자와 연결되며, 이 생성자를 통해 생성되는 객체들은 프로토타입이 가진 프로터티들을 똑같이 상속받는다. 이 말은 프로토타입 객체가 메서드나 상수 같은 프로퍼티들을 위치시키기에 좋은 곳임을 의미한다.

프로토타입의 프로퍼티들은 클래스의 모든 객체가 공유하기 때문에, 모든 객체가 같이 사용하는 프로퍼티들을 정의해놓는 것

// 마지막 문자가 변수 c의 값과 같으면 참을 반환한다.
String.prototype.endWith = function(c){
  return ( c == this.charAt(this.length-1) );
}
var message = "hello world";
message.endWith('h') // 거짓을 반환
message.endWith('d') // 참을 반환

** 예제 **

//생성자 함수를 정의
function Circle(radius){
// r은 인스턴스 프로퍼티이며, 생성자 안에서 저의되고 초기화된다.
this.r = radius;
}

// Circle.PI는 클래스 프로퍼티다. 이것은 생성자 함수의 프로퍼티이다.
Circle.PI = 3.14159;

// 여기에는 원의 넓이를 계산하기 위한 인스턴스 메서드가 정의되어 있다.
Circle.prototype.area = function() { return Circle.PI * this.r * this.r; };

// 이 클래스 메서드는 Circle의 두 객체들을 받아서 더 큰 반지름을 가진 것을 반환한다.
Circle.max = function(a, b){
if(a.r > b.r) return a;
else return b;
};

// 여기에 나타나있는 코드는 위에서 정의된 필드를 사용한다.
var c = new Circle(1.0);   // Circle 클래스의 인스턴스를 하나 만든다.
c.r = 2.2;            //인스턴 프로퍼티 r의 값을 지정한다.
var a = c.area();   // 인스턴스 메서드인 area()를 호출한다.
var x = Math.exp(Circle.PI);    // 클래스 프로퍼티인 PI를 사용하여 계산을 한다.
var d = new Circle(1.2);     // 다른 Circle 인스턴스를 만든다.
var bigger = Circle.max(c, b); //클래스의 메서드 max()를 사용한다.

** 예제 끝 **

* typeof는 기본 타입을 객체와 구별하는 데 가장 유용하게 사용 할 수 있다. 
   typeof undefined는 'undefined' 지만 typeof null은 'object'이다.
   모든 배열은 객체이기 때문에 배열의 타입도 'object'다. 
   함수는 객체이긴 하지만 타입은 'function'이다.

* 어떤 값이 기본 타입이나 함수가 아니라 객체라고 판단하면 이에 관련하여 정보를 얻기위해 instanceof연산자를 사용한다.
   x instanceof Array
   객체 o에 대해서 instaceof Object는 항상 true이다. 
   instanceof는 함수에 대해서도 작동하며 아래의 모든 표현은 함수 f에 대해 true다.
    typeof f == "function"
    f instanceof Function
    f instanceof Object

var d = new Date();   // Date 객체, Date는 Object를 확장한다.
var isobject = d instanceof Object; // true 평가한다.
var realobject = d.constructor == Object; // false로 평가한다.

** 13장 웹  브라우저와 자바스크립트 **

* 클라이언트 자바스크립트에서는 Document 객체가 HTML 문서를 나타낸다.
* Window 객체는브라우저 창 또는 프레임을 나타낸다. 
   Window 객체가 클라이언트 측 프로그래밍에서 전역 객체역할을 담당하고 있다.

* 여러 개의 창(또는 프레임)을 사용해서 애플리케이션을 작성할 수 있는데, 애플리케이션에 속한 각 창은 고유한 Window 객체를 가지며, 클라이언트 측 자바스크립트 코드의 고유한 컨텍스트를 정의한다.





 ** 비공식 스크립트 어트리뷰트 **
MS는 오직 익스플러에서만 작동하며 event와 for 어트리뷰트를 사용한다. << 사용하지 말자 >>

** onload
onload 이벤트 처리기는 모든 문서의 파싱이 끝나고 모든 스크립트가 실행된 후 그리고 모든 보조내용( 이미지 같은 것들 )
 onload 이벤트를 방생시켜 Window객체에 onload 이벤트 처리기가로 등록된 모든 자바스크립트 코드를 실행한다.
onload 처리기가 구동되는 때는 모든 문서의 읽기 작업과 파싱 작업이 완전히 끝난 후이기 때문에 모든 문서 엘리먼트는 
자바스크립트를 사용하여 조작할 수 있다.

** onunload 이벤트 처리기
사용자가 웹 페이지를 떠나 다른 곳으로 이동할 때 브라우저는 현제 페이지에 대한 자바스크립트 코드의 마지막 실행 기회를
onunload 이벤트 처리기를 구동한다.

* 클라이언트 쓰레다는 단일 쓰레드다. 싱글 쓰레드
 
* URL에서 전달인자 추출하기 예
function getArgs(){
 var args = new Object(); 
 var query = location.search.substring(1);
 var pairs = query.split("&");
 for(var i=0; i<pairs.length; i++){
  var pos = pairs[i].indexOf("=");
  if(pos == -1) continue;
  var argname = pairs[i].subtring(0, pos); // 키값을 추출한다.
  var value = pairs[i].substring(pos+1); //값을 추출한다.
  var = decodeURIComponent(value); // 필요하다면 디코딩을 수행한다.
  args[argname] = value;  // 객체 프로퍼티로 저장한다.

 }
 return args;
}

** Document 객체 이름 짓기 **

<form name="f1"><input tpye="button" value="Push Me"></form>
document.forms[0]     // 문서 내의 위치를 통해 참조 
document.forms.f1       // 프로퍼티로 이름을 통해 폼 참조
document.forms["f1"]   //배열 인텍스로 이름을 통해 참조
  document.f1

<form nam="shipping">
 ..
 <input type="text" name="zipcode">
..
</form>
doument.shipping.zipcode

만약  name 어트리뷰트가 모두 'n' 이라는 똑같은 이름을 사용한다면 
 document.n 프로퍼티는 두 원소에 대한 참조를 가지는 배열이 된다.

<form name="myform" onsumit="return validateform();">...</form>
document.myform.onsubmit = validateform;



HTML 문서의 트리 표현


* '트리라는 표현은 가족 구조를 표현하는 트리에서 빌려온 것이다.
한 노드의 바로 위에 있는 노드는 아래에 있는 노드의 부보(parent)다.
다른 노드의 바로 한 레벨 밑에 있는 노드는 위에 있는 노드의 자식(children)이다.
같은 부모를 가졌으며 같은 레벨에 있는 노드들을 형제(sibling)이다.
어떤 노드의 아래에 있는 모든 노드(레벨의 상관없이)는 위에 있는 노드의 자손(descendant)이다.
부모와 조부모를 비롯하여 어떤 노드의 위에 있는 모든 노드는 아래에 있는 노드이 조상(ancestor)이다.

* 문서의 노드 순회 예
function countTags(n){
 var numtags = 0;
 if(n.nodeType == 1 /*Node.ELEMENT_NODE*/)
  numtags++;
  var children = n.childNodes;
  for(var i=0; i<children.length; i++){
   numtags += countTags(childdren[i]);
  }
  return numtags;
}

<body onload="alert('this document has '+ countTags(document) +' tags')">

*
document.getElementByTagName("body")[0];
var tables = document.getElementByTagName("table");
alert("This document contains" + tables.length+ " tables");

var myParagraph = document.getElemetByTagName("p")[3];  //효율적이 못하다.

<p id="specialParagraph" />
var myParagraph = docment.getElementById("specialParagraph");

function id(x){
 if(typeof x == "string") return document.getElementById(x);
   return x;
}

var headLine = document.getElementById("headLine");
headLine.setAttribute("align", "center");

var headLine = document.getElementById("headLine");
headLine.align = "center";


** 이벤트와 이벤트 처리 **

<input type="button" value="Click Here" onclick="alert(this.onclick 또는 typeof this.onclick); ">
자바스크립트를 통해 접근하면 이벤트 처리기 프로퍼티는 함수가 된다. 
이벤트 처리기에서 this 키워드는 이벤트가 발생한 객체를 참조한다. this.value -> Click Here 출력되는 걸 보면 Button엘리먼트를 참조 하는거 같다.

*--
<form name="f1">
 <input type="button" name="b1" value="Pree Me" />
</form>

document.f1.b1.onclick = function(){
alert("Thanks");
}
*--
function plead(){
document.f1.b1.value += ", please!";
}
document.f1.b1.onmouseover = plead;
*--

( HTML 어트리뷰트와 자바스크립트 프로퍼티에 상관없이 ) 이벤트 처리기는 대부분 반환값을 사용하여 이벤트 특성을 나타냄
<form name="f1" action="www.naver.com" 
          onsubmit="if(this.elements[0].value.length==0) return false;">
<form name="f1" action="www.naver.com" 
          onsubmit="if(this.elements['namef'].value.length==0) return false;">
<form name="f1" action="www.naver.com" 
          onsubmit="if(this.namef.value.length==0) return false;">

<form name="f1" action="www.naver.com" onsubmit="if(new String(this.namef.value).trim().length==0) return false;">
 <input type="text"  name="namef" />
 <input type="submit" value="go" />

</form>
*--

button.onclick = o.mymethod;
이 문장은 button.onclick이 o.mymethod 함수를 참조하게 만든다. mymethod함수는 이제 o와 button둘 모두의 메서드다.
this 키워드는 이제 o가 아닌 Button객체를 참조한다.

*--

<form >

<!-- 이벤트 처리기에서 this는 이벤트의 대상 엘리먼트를 참조한다. -->
<!-- 따라서 폼 내의 이웃 엘리먼트를 다음과 같이 참조할 수 있다. -->
<input id="b1" type="button" value="button1" onclick="alert(this.form.b2.value);">
<!-- 대상 엘리먼트도 유효 범위 체인 안에 있기 때문에 this를 생략할수 있다. -->
<input id="b2" type="button" value="button2" onclick="alert(form.b1.value);">
<!-- <form>도 유효 범위에 있기 때문에 생략 가능 -->
<input id="b3" type="button" value="button3" onclick="alert(b4.value);">
<!-- Document 객체는 유효 범위 체인 상에 있기 때문에 이 객체의 메서드는  -->
<!-- Document document를 앞에 붙이지 않고도 사용 할 수 있다.  -->
<!-- 하지만 좋은 습관은 아니다. -->
<input id="b4" type="button" value="button4" onclick="alert(getElementById('b3').value);">

</form>

*--

함수는 자신이 호출된 곳이 아니라 자신이 정의된 곳의 유효범위를 사용하여 실행됨을 기억해야 된다.

이벤트 처리기 유효 범위에 대한 모든 설명은 이벤트 처리기를 html 어트리뷰트로 저의하는 경우에만 해당된다는 사실을 
명심해라 한다.

** 폼( Form ) 객체 **

Form객체는 Document객체의 프로퍼티 중 하나인 forms[]배열의 원소를 통해 접근할 수 있다.
마지막 폼에 접근 하는 방법 : document.forms[document.forms.length-1]

현재 창에서 문서의 두 번째 폼에 속한 세 번째 엘리먼트를 참조하려면 
생각)elements는 해당 폼 객체 안에 있는 여러가지 input, button, checkbox...  뜻하는 거 같다.
document.forms[1].elements[2]

*
onsubmit 처리기는 순수하게 Submit 버튼을 클릭하는 것에 의해서만 구동됨을 명심해라.
*
모든 폼 엘리먼트에는 자신이 폼을 참조하는 form프로퍼티가 있다.
폼 엘리먼트의 이벤트 처리기에서는 this.form으로 Form객체를 참조할 수 있다.
형제 관계에 있는 x라는 폼 엘리먼트를 참조하려면 this.form.x 라고 한면 된다.
*
checkbox와 radio 엘리먼트는 토글 버튼이다. ( 선택아니면 해제 )
이름이 같은 토글엘리먼트를 배열로 받기 위해
document.erverything.extras
개별 참조하려면 
document.erverything.extras[0]

radio와 checkbox 엘리먼트에는 공통적으로 checked라는 프로퍼티가 있다.
페이지가 처음 로딩되었을 때 해당 엘리먼트가 선택되어 있을 것인지 여부를 나타낸다. defaultChecked 
 프로퍼티는 HTML checked 어트리뷰트에 해당하는 겂을 가지는 불리언 프로퍼티이다.

select 엘리먼트 속에 options[]배열 안에 저장된 Option 객체들을 표현한다.
select-multiple(다중 선택 가능) 일때는 selectIndex 프로퍼티만으로는 현재 선택되어 있는 옵션들을 모두 표현하기 충분치 않다. 이 경우 선택된 것을 판별하기 위해 options[]배열 안에 속한 모든 엘리먼트에 대한 loop문을 이용해 Option객체마다 
selected프로퍼티의 값을 확인해야 한다.
그 외에 text프로퍼티를 이용해 텍스트를 변경. 이와 더블어 value프러퍼티 역시 읽고/쓰기가 가능한 문자열이다. 웹서버로 전달할 문자를 지정한다.

다음과 같이 하면 이 엘리먼트에 속한 모든 옵션들을 제거 할 수 있다.
document.addressF.countryS.options.length = 0; // 모든 옵션들을 제거 

// Select 엘리먼트에서 하나의 Option 객체를 제거한다.
// 기존에 option[11]에 있던 옵션은 option[10]으로 이동한다.
document.addressF.countryS.options[10] = null;
728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

quick menu 바  (0) 2013.07.19
javascript 브라우저 종류  (0) 2012.11.23
자주 쓰이는 JQuery Ajax 예제  (0) 2011.08.02
jQuery 요약  (0) 2011.08.02
자바스크립트 실수 모음  (0) 2011.05.20

+ Recent posts