FE

jQuery

soohykim 2025. 4. 11. 09:08
728x90
반응형

📒 jQuery

📕 jQuery

1. jQuery 개념

  • 모든 브라우저에서 동작하는 자바스크립트 라이브러리
  • 제작 목표
    • DOM과 관련된 처리 쉽게 구현
    • 일관된 이벤트 연결 쉽게 구현
    • 시각적 효과 쉽게 구현
    • Ajax 애플리케이션 쉽게 구현
  • 특징
    • CSS 선택자 기반의 DOM 처리가 가능하여 기존 JavaScript와 비교할 때 매우 쉽고 동적인 화면 처리 가능
    • ajax 애플리케이션 개발이 쉬움
    • 한꺼번에 다른 동작을 처리하는 함수를 연결하여 사용하는 '메서드 체인' 기능 효과적으로 사용
    • 오픈 소스로 무료로 사용 가능
    • 다양한 jQuery 플러그인 사용 가능
    • 웹 브라우저 종류와 상관없이 개발 가능한 크로스 브라우징 가능

2. jQuery 문법

1) 기본 문법

  • 문자는 jQuery를 선언하거나 접근할 때 사용
  • 문자는 jQuery문자의 별칭(alias)이고, $ 문자 사용
  • selector는 CSS 선택자를 의미, 메서드는 선택된 selector에 적용할 기능 제공
$(selector).메서드

jQuery(selector).메서드

2) ready() 함수

  • jQuery로 시작하는 모든 페이지는 ready() 메서드로 시작
  • 문서 준비가 완료되면 인자로 전달된 함수를 실행하라는 의미
  • jQuery 이벤트 메서드 중 하나로서 여러 번 사용 가능
$(document).ready(함수)

📕 jQuery 선택자

1. 기본 선택자

  • 선택자 종류
    • All selector : HTML DOM의 모든 태그 선택
    • Tag selector : 지정된 tag와 일치하는 모든 tag 선택
    • Id selector : 지정된 id와 일치하는 모든 tag 선택
    • Class selector : 지정된 class와 일치하는 모든 tag 선택
    • Multiple selector : 지정된 tag1 또는 tag2와 일치하는 모든 tag 선택
    • Attribute selector : 지정된 속성의 값과 일치하는 모든 tag 선택
$("*")   // all selector
$("tag") // tag selector
$("#id") // id selector
$(".class") // class selector
$("tag1, tag2") // multiple selector
$([속성=값]) // attribute selector

1) 전체 선택자 (*)

  • HTML 페이지에 있는 모든 문서 객체를 선택하는 선택자
  • CSS 기본 선택자는 전체 선택자인 Wildcard Selector

2) 태그 선택자 (태그명)

  • 지정된 태그만 선택하는 선택자
  • 태그의 이름을 명시적으로 사용
  • 하나 이상의 태그 선택자는 쉼표(,) 이용

3) 아이디 선택자 (#id)

  • 특정 id 속성을 가지고 있는 태그 선택하는 선택자
  • 유일한 값 지정
  • JS의 getElementById()와 동일

4) 클래스 선택자 (.클래스명)

  • 특정한 class 속성 가진 태그 선택하는 선택자
  • JS의 getElementsbyClassName()와 동일

5) 속성 선택자

  • 기본 선택자 뒤에 붙여 사용 가능
  • [속성] 형식으로 사용시 검색 대상은 모든 html 태그 대상
  • 종류
    • 요소[속성] : 특정 속성을 가지고 있는 문서 객체 선택 (일치)
    • 요소[속성=값] : 속성 안의 값이 특정 값과 같은 문서 객체 선택
    • 요소[속성~=값] : 속성 안의 값이 특정 값을 단어로써 포함하는 문서 객체 선택
    • 요소[속성^=값] : 속성 안의 값이 특정 값으로 시작하는 문서 객체 선택
    • 요소[속성$=값] : 속성 안의 값이 특정 값으로 끝나는 문서 객체를 선택
    • 요소[속성*=값] : 속성 안의 값이 특정 값을 포함하는 문서 객체 선택 (공백으로 정확하게 구분)
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ready 함수</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> //$(document).ready() $(document).ready(function(){ console.log("ready"); }); jQuery(document).ready(function(){ console.log("ready2`"); }); $(function(){ console.log('축약형 ready'); }); // onload는 1번만 가능 (onload2만 표출) window.onload = function() { console.log("window.onload1"); } window.onload = function() { console.log("window.onload2"); } </script> </head> <body> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>selector 기본</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ //1. 모든 a태그 // $("a").css('color','red'); //2. id가 x $("#x").css({'color':'blue', 'background-color' : 'orange', 'font-size' : '25px'}); //3. class가 y $("span.y").css('color','green'); //4. 속성이 target // $("[class]").css('color','orange'); // class 있음 // $("[class='y']").css('color','pink'); // 클래스가 y // $("p[class='y']").css('color','aqua'); // p태그의 클래스가 y // $("a[href^='https:']").css('color','lime'); // 시작하는 // $("a[href$='com']").css('color','gold'); // 끝나는 }); </script> </head> <body> <div> <p class="y">셀렉터</p> <a href="http://naver.com" class="y">naver</a><br/> <a href="https://daum.net" class="y">daum</a><br/> <a href="https://google.com" class="z">google</a><br/> <p> <a href="#" id="x">자손</a> <span class="y">P아래의 Span</span> </p> <p> <span><a href="xxx">자손2</a></span> </p> </div> </body> </html>
    • 📋 실행 📋

2. 계층 선택자

 

 

  • 선택자 종류
    • Child selector : 부모 요소 바로 아래 자식 요소 반환
    • Descent selector : 조상 요소 아래 일치하는 모든 자손 요소 반환
    • Next sibling selector : Prev 요소 바로 다음에 오는 단 하나의 형제 요소 반환
    • Next siblings selector : Prev 요소 이후의 모든 형제 요소들 반환
$("parent > child")      // child selector
$("ancestor descendent") // descent selector
$("prev + next")  // next sibling selector
$("prev ~ next")  // next siblings selector

1) 자식 선택자

  • 자식을 선택하는 선택자
  • 부모 > 자식 형태로 사용

2) 자손 선택자

  • 자손을 선택하는 선택자 (자식 포함)
  • 요소A 요소B 형태로 사용

3) 인접한 형제 요소 선택자

  • 같은 레벨의 형제 요소들 중에서 바로 뒤에 인접한 형제 요소 접근
  • 요소A + 요소B 형태로 사용

4) 모든 형제 요소 선택자

  • 같은 레벨의 형제 요소들 중에서 뒤의 모든 형제 요소 접근
  • 요소A ~ 요소B 형태로 사용
    • 📋 코드 📋
      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="UTF-8" />
        <title>Insert title here</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
        <script>
          $(document).ready(function () {
            //div 태그의 자식중에서 모든 앵커 선택 : 3
            //$("div > a").css('color','red');
            //div 태그의 자손중에서 모든 앵커 선택 ( 자식 포함) : 5
            //$("div a").css('color','green');
            //p 태그의 형제중에서 바로 다음 a 태그
            //$("p+a").css('color','blue');
            //p 태그의 형제중에서 다음 모든 a 태그
            //$("p~a").css({"font-size":"20px", "background":"pink"});
          });
        </script>
      </head>
      <body>
        <div>
          <p class="y">셀렉터</p>
          <a href="http://naver.com" class="y">naver</a><br />
          <a href="https://daum.net" class="y">daum</a><br />
          <a href="https://google.com" class="z">google</a><br />
          <p>
            <a href="#" id="x">자손</a>
          </p>
          <p>
            <span><a href="xxx">자손2</a></span>
          </p>
        </div>
      </body>
      </html>
    • 📋 실행 📋

3. filter 선택자

  • 다양한 방식으로 원하는 요소 걸러내는 역할
  • 보통 일반 선택자와 같이 사용하지만 단독 사용 가능
  • : 기호 사용
  • 종류
    • Basic Filter
    • Child Filter
    • Form Filter
    • Content Filter

1) Basic Filter

  • :eq(idx)
    • index에 해당하는 요소 반환
    • 0부터 시작 (음수값 지정하면 마지막 요소부터 시작)
  • :even / :odd
    • 짝수 번째 및 홀수 번째 요소 반환
    • 실제 짝수 번째가 아닌 index의 짝수 값으로 처리
    • 0부터 시작
  • :first / :last
    • 첫번째 요소 및 마지막 요소 반환
    • :fisrt = :eq(0)
    • :last = :eq(-1)
  • :gt(idx)
    • index보다 큰 index에 해당하는 요소 반환
    • 음수값 지정 가능
  • :lt(idx)
    • index보다 작은 index에 해당하는 요소 반환
    • 음수값 지정 가능
  • :not(selector)
    • selector와 일치하지 않는 모든 요소 반환
  • :focus
    • 현재 포커스 받은 요소 반환

2) Child Filter

  • :first-child
    • 자식 요소들 중에서 첫 번째에 해당하는 요소 반환
    • 지정된 요소의 부모 요소를 대상으로 첫 번째 자식 반환
      $("td:first-child") // td 태그의 부모 태그인 tr 태그를 기준으로 첫 번째 td 반환
      $(":first-child") // HTML의 모든 첫 번째 태그를 반환
  • :last-child
    • 자식 요소들 중에서 마지막에 해당하는 요소 반환
  • :nth-child(idx)
    • 일치하는 index에 해당하는 자식 요소 반환
    • 1부터 시작
  • :nth-child(2n)
    • 2의 배수 번째에 해당하는 자식 요소들 반환
  • :only-child
    • 부모 요소 기준으로 하나만 있는 자식 요소 반환

3) Form Filter

  • :button
    • <input type="button"> 또는 <button> 태그
  • :checkbox
    • <input type="checkbox">
  • :checked
    • <input type="checkbox" checked>
    • checkbox, radio, select 태그에 사용
  • selected
    • select 태그의 option 중에서 선택된 요소 반환
    • checkbox, radio 동작X
    • :enabled / :disabled
    • 활성화된 요소 및 비활성화된 요소 반환
  • :input
    • 모든 입력 요소 (input, select, textarea 등)
  • :submit
    • <input type="submit">
  • :hidden
    • <input type="hidden">

4) Content Filter

  • :contains(text)
    • text와 일치하는 문자열이 존재하는 요소 반환
    • 대소문자 구별
    • 대상 요소 및 하위 요소까지 검색
  • :has(selector)
    • 지정된 selector가 자식 요소로 존재하는 모든 요소 반환
  • :empty
    • 자식 요소가 존재하지 않고 텍스트 값이 비어 있는 요소 반환
    • <input>, <img>, <hr>, <br> 태그에 사용
  • :parent
    • 자식 요소가 존재하거나 텍스트 값(내용)을 가지고 있는 요소 반환
    • :empty와 반대되는 선택자
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>filter basic</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ //1. li중에서 2번째 위치 ( 0부터 시작하고 음수 가능) // $("li:eq(1)").css("color","red"); // (b) // $("li:eq(-1)").css("color","pink"); //뒤에서 첫번째 항목 (f) // $("li:gt(2)").css("color","aqua"); // 숫자보다 큰 것 (d, e, f) // $("li:lt(2)").css("color","orange"); // 숫자보다 작은 것 (a, b) //2. li중에서 짝수 및 홀수 index 위치 (index는 0부터 시작) // $("li:even").css("color","red"); // $("li:odd").css("color","blue"); //3. tr중에서 첫번째 위치 ( 0부터 시작하고 음수 가능) // $("tr:first").css("color","lime"); // tr:eq(0) 동일, 첫번째 줄 // $("tr:last").css("color","orange"); // 마지막 줄 // 4. 현재 포커스 받은 요소 // $(selector(선택자)).on('click', function(){}) $("input").on("click", function(){ $("input:focus").css("background-color","red"); $("input:not(:focus)").removeAttr("style"); }); //5. li중에서 c값 포함 $("li:contains('c')").css({"font-size":"20px", "background":"pink"}); }); </script> </head> <body> <input type="text" value="one"> <input type="text" value="two"> <input type="text" value="three"> <ol> <li>a</li> <li>b</li> <li>c</li> <li>d</li> <li>e</li> <li>f</li> </ol> <table border="1"> <tr> <td>#1</td> <td>#2</td> <td>#3</td> <td>#4</td> <td>#5</td> </tr> <tr> <td>#6</td> <td>#7</td> <td>#8</td> <td>#9</td> <td>#10</td> </tr> <tr> <td>#11</td> <td>#12</td> <td>#13</td> <td>#14</td> <td>#15</td> </tr> </table> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>filter child</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ /* nth-child는 부모의 n번째 위치에 있는 태그를 선택한다. 따라서 5번째 요소를 nth-child로 선택하려면 p:nth-child(5) */ // $(".box > p:nth-child(5)").css("color","pink") // 세번째 P /* nth-of-type은 부모태그안의 다른 태그와는 상관없이 해당 태그만을 순서에 포함해서 n번째로 있는 태그를 선택한다. */ $(".box > p:nth-of-type(3)").css("color","blue") // 세번째 P // li의 부모요소 기준으로 첫번쨰 및 마지막 자식 $("li:first-child").css("color","red") // a $("li:last-child").css("color","blue") // f // li의 부모요소 기준으로 3번쨰 자식 (1부터 시작) // $("li:nth-child(3)").css("color","red") //c // li의 부모요소 기준으로 짝수번쨰 자식 ( 1부터 시작) // $("li:nth-child(2n)").css("color","red") // td의 부모요소 기준으로 only 자식 $("td:only-child").css("color","red") // 11 }); </script> </head> <body> <div class="box"> <p>첫번째P</p> <span>첫번째span</span> <p>두번째P</p> <span>두번째span</span> <p>세번째P</p> <span>세번째span</span> </div> <ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> <li>e</li> <li>f</li> </ul> <table border="1"> <tr> <td>#1</td> <td>#2</td> <td>#3</td> <td>#4</td> <td>#5</td> </tr> <tr> <td>#6</td> <td>#7</td> <td>#8</td> <td>#9</td> <td>#10</td> </tr> <tr> <td colspan="5">#11</td> </tr> </table> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>filter form</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function () { // :button var a = $(":button").css("color", "red"); //console.log(a); // :checkbox (체크박스 선택)) var b = $(":checkbox[id='secondCheck']").prop("checked", false); //console.log(b); // :text var c = $(":text:first").css("background","pink"); // first, child만 있음 (ntn 혹은 eq를 이용해 중간단계 선택) //console.log(c); // :disabled :enabled var e = $(":disabled").css("background","lime"); //console.log(e); // :image // :selected // :hidden , :radio , :submit var checkedLen = $("input:checkbox:checked").length; console.log(checkedLen); var x = $("option:nth-child(2)") .text("이십") .val("200") .attr('selected','selected'); console.log($("option:eq(2)").val()); }); </script> </head> <body> <button>버튼1</button> <h3>Form</h3> <form> <button>버튼2</button><br/> <input type="text" name="firstInput" /><br/> <input type="text" name="secondInput" disabled="disabled" /><br/> <input type="checkbox" name="firstCheck" value="xxx" checked />첫번째 <input type="checkbox" name="secondCheck" value="xxx2" checked id="secondCheck" />두번째 <br/> <select> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </form> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>filter content</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ //1. :contains(text) $("div:contains('John')").css("color", "blue"); // var filteredDivs = $("div:contains('john')").filter(function() { // var reg = new RegExp(txtsearch, "i"); // return reg.test($(this).text()); // }) //2. :has(selector) $("div:has('p')").css("font-size", "30px"); //3. :empty (<td></td>) $("td:empty").text("빈문자열").css("background-color","yellow"); //4. :parent (<tr>) $("td:parent").css("color","red"); }); </script> </head> <body> <div>John Resig</div> <div>George Martin</div> <div>Malcom john Sinclair</div> <div> <p>Hi John Resig</p> </div> <table border="1"> <tr> <td>TD #0</td> <td></td> </tr> <tr><td>TD #2</td><td></td></tr> <tr><td></td><td>TD#5</td></tr> </table> </body> </html>
    • 📋 실행 📋

4. Traversing 선택자

1) jQuery Traversing

  • 1차적으로 선택자에 의해서 찾은 요소들을 다시 2차 필터링하거나 새로운 요소 추가할 때 사용
  • 종류
    • Filetering
    • Miscellaneous Traversing
    • Tree Traversal

2) Filtering

  • 셀렉터를 통해 얻은 객체에서 다시 필터링 가능
  • 메서드 체인 형식으로 Traversing 관쳔 추가 메서드 지정 가능
  • $(selector).eq(idx)
    • 여러 개의 일치하는 요소들 중에서 지정된 index와 일치하는 요소 반환
    • 0부터 시작
    • :eq(index) 선택자와 기능 거의 동일
      • 차이점 : .eq(index)메서드 뒤에 메서드 체인 형태로 다른 Traverse 관련 메서드 추가 사용 가능
      • 메서드 사용하여 traverse 메서드를 사용하기 이전 상태로 복귀할 수 있는 메서드
      • .eq(0)
        .end()
        .eq(1)
  • $(selector).filter(expr)
    • 지정된 expr(expression)과 일치하는 요소 반환
    • expr : 선택자 및 jQuery 표현식을 의미
    • 1차로 검색된 요소들(필터링된 DOM)을 대상으로 재검색
    • 선택자에 의한 1차적 검색 요소에 대해서 다시 추가적으로 필터링하는 경우 사용
  • $(selector).filter(fn)
    • 표현식으로 나타내기 어려운 경우 별도의 함수를 이용해서 어떻게 필터링할 것인시 설정 가능
    • 필터 기능을 정해진 선택자가 아닌 필요한 기능을 새로 확장해서 사용하는 효과 얻음
    • 함수에 구현된 내용이 true를 리턴할 경우에는 대상에 포함시키고 false인 경우 제외
  • $(selector).not(exp | fn)
    • 지정된 exp 및 fn와 일치하지 않는 요소 반환
    • .filter(exp | fn)과 반대 개념
  • $(selector).is(exp | fn)
    • 지정된 exp와 일치하는 요소가 하나라도 있으면 true 반환
    • 일반적으로 if 조건문과 같이 사용
  • $(selector).has(selector)
    • 지정된 selector를 포함하는 요소 반환
  • $(selector).first() / $(selector).last()
    • 첫번째 / 마지막 요소 반환
  • $(selector).map(fn)
    • map 함수 이용하여 가공한 후 return
    • 기본적으로 1차 선택자에 의해서 반환된 요소들을 함수(fn)을 사용하여 가공(변경)하고 결과를 배열로 반환
    • 🗒️ 예시 : 반환된 텍스트를 소문자/대문자로 변경
  • $(selector).slice(start, [end])
    • 부분값 반환
    • 1차 선택자에 의해서 반환된 전체 요소들 중에서 부분 요소를 얻을 때 사용
    • start : 시작 위치값(0부터 시작)
    • end : 마지막 위치 (end-1, 생략하면 요소의 마지막까지)
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Filtering</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ // 1차 selector에 의해서 검색되 요소를 2차 필터링하는 방법 // end() 사용하여 다시 1차 selector 참조 가능 //1. $(selector).eq(idx) $("li").eq(0).css("color","red"); //2. end() $("li").eq(2).css("color","lime") .end() // eq(2) 설정 후 다시 (li)로 돌아가 (eq3) 설정하기 위해 .eq(3).css("font-size","25px");
   // 3. p태그를 찾고 다시 class값이 .middle 찾기
   $("p").filter(".middle").css("color","green");
   // console.log(result);
   if (result) {
	$("#result").html("<h2>p 태그가 있습니다</h2>");
   }
         
   // 2. p태그를 찾고 다시 class값이 .middle 이 아닌 요소 
   $("p").not(".middle").css("color","blue"); 
         
   
   //3. * 태그를 찾고 다시 속성이 class인 요소가 p태그인지 ..
    // var result = $("*").filter("[class]").is("p")
    // console.log(result);

    //4. li태그를 찾고 span태그를 가지고 있는 요소     
    $("li").has("span").css("border", "2px solid red");

	//5. li태그를 찾고, 3의 배수  
     $("li").filter(function(index){
		return index % 2 == 0;
	 }).css({"color":"orange","backgroundColor":"blue"});  

	//6. map 가공 
     var arr = $("li").map(function(idx,ele){ // ele가 li를 상징
		 return $(this).text().toUpperCase(); // this는 li를 의미 (this = li = ele)
	 });
	 console.log(arr);

	 arr.each(function(idx, ele){
		console.log(ele.text);
		$("#orderList").append(ele + "<br>");
	 });

	 arr.each(function(idx, ele) {
		console.log(ele);
		$("#orderList").append(`<li>${ele}</li>`); // "li" : li 선택자 선택, <li> : li 선택자 생성
	 });

	//7. 부분 요소 
     $("ol li").slice(7).css("background-color","yellow");  

});

text

Middle text

final text

  • list item 1
  • list item 2
  • list item 3
  • list item 4
  • list item 5
  • list item 6
  • list item 7
  • list item 8
  • list item 9
``` - >**📋 실행 📋**
![](https://velog.velcdn.com/images/24tngus/post/ba4f61e2-8d69-4498-acef-6a214d0d1aa8/image.png)

3) Tree Traversal

  • $(selector).children([selector])
    • 선택자와 일치하는 자식 요소 반환
    • 선택자 생략시 모든 자식 노드 반환
    • 자식 요소 레벨까지만 검색 (자손 포함X)
  • $(selector).find(selector)
    • 선택자와 일치하는 하위 요소들 반환
    • 자식 및 자손레벨까지 포함하여 검색
  • $(selector).contents()
    • 인자 없는 메서드
    • text를 포함한 모든 하위 요소 반환
    • .filter() 및 .find() 메서드와 같이 사용
  • $(selector).parent([selector])
    • 선택자와 일치하는 부모 요소 반환
    • 선택자 생략시 모든 부모 노드들 반환
    • 부모 요소가 여러 개인 경우에는 배열로 반환
  • $(selector).parents([selector])
    • 선택자와 일치하는 모든 조상 요소 반환
    • 선택자 생략시 html 태그를 포함한 모든 조상 노드 반환
  • $(selector).next([selector])
    • 선택자와 일치하는 다음 형제 요소 반환
    • 선택자 생략시 바로 뒤 형제 요소 반환
    • $(selector).nextAll([selector])
  • $(selector).prev([selector])
    • 선택자와 일치하는 이전 형제 요소 반환
    • 선택자 생략시 바로 앞 형제 요소 반환
    • $(selector).prevAll([selector])
  • $(selector).siblings([selector])
    • 선택자와 일치하는 앞과 뒤 형제요소 반환
    • 선택자 생략시 모든 앞뒤 형제요소들 반환
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Tree Traversal 1</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function () { // find는 선택된 요소에서 selector와 일치하는 하위요소를 반환 (자손포함) // children()는 자식까지만 반환 //1. find- 자식 및 자손 포함하여 반환 $("div").find("span").css("border", "1px solid red"); //2. children - 자식만 반환 $("div").children("span").css("color", "orange"); // 1st, 3rd //3. content() - text 포함한 모든 자손요소 반환 var s = $("div").find("span").contents(); s.each(function (index, item) { console.log($(item).text()); }); //4. 부모 및 조상 $("p:first").parent().css({ border: "2px solid red" }); // 부모 (p:first = div) var parentEls = $("b") .parents() .map(function () { return this.tagName; }) .get() //선택한 요소를 배열로 가져오는 메서드 .join(", "); $("b").append("<strong>" + parentEls + "</strong>"); }); </script> </head> <body> <div> <span>this is 1st p</span> </div> <div> <div> <p> <span>this is 2nd p</span> </p> </div> </div> <div class="myClass"> <span>this is 3rd p</span> </div> <div> <p> <span> <b>My parents are: </b> </span> </p> </div> <span>this is 마지막 p</span> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Tree Traversal 2</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ //1. 다음 형제 - selector가 생략되면 바로 다음 형제 참조 // $("li").next().css("color","red"); // B, C, D, E //2. 다음 형제 - selector가 지정되면 일치하는 다음 형제 참조 //$("li").next(".selected").css("font-size","30px"); // B //3. 이전 형제 - selector가 생략되면 바로 이전 형제 참조 //$("li").prev().css("background-color","yellow"); // A, B, C, D //4. 이전 형제 - selector가 지정되면 일치하는 다음 형제 참조 // $("li").prev(".selected").css("font-size","30px"); // B //5. 위/아래 형제 $("li.xxx").siblings().css("background-color","blue"); // A, B, C, E }); </script> </head> <body> <ul> <li>A</li> <li class="selected">B</li> <li>C</li> <li class="xxx">D</li> <li>E</li> </ul> </body> </html>
    • 📋 실행 📋

5. Attributes 제어 선택자

1) Attribute Control

  • $(selector).attr(속성명, [속성값])
    • 지정된 속성명에 해당되는 속성값 얻거나 설정
    • 속성값을 가져오는 경우 일치하는 요소가 많으면 처음 일치하는 요소 반환
    • 반복적으로 가져오기 위하여 .each()메서드나 .map()메서드 함께 사용
  • $(selector).removeAttr(속성명)
    • 지정된 속성명에 일치하는 모든 속성값 제거
  • $(selector).val() / .val(값)
    • 선택된 input 태그의 값을 얻거나 설정
    • input, select, textarea 같은 폼 관련 태그에서 값 가져오거나 설정할 때 사용
    • 선택되거나 체크된 요소를 찾기 위하여 :selected 또는 :checked선택자와 함께 사용
  • $(selector).text() / .text(값)
    • 선택된 태그의 자손을 포함한 text 값을 얻거나 제거
    • Html 태그는 제거됨 (문자열만 반환)
  • $(selector).html() / .html(값)
    • 선택된 태그의 자손을 포함한 text 값을 얻거나 설정
    • Html 태그는 포함됨 (html 형식의 문자열 가져오거나 설정)
  • $(selector).addClass(class명)
    • 선택된 태그에 설정한 class에 해당하는 CSS 적용
    • 동시에 여러 개의 속성값을 설정 가능
    • 기존에 class 속성 있으면 덮어쓰기 되지 않고, 기존의 속성값 뒤에 추가
  • $(selector).removeClass(class명)
    • 선택된 태그에 설정한 class에 해당하는 CSS 제거
    • 동시에 여러 개의 속성값 설정 가능
  • $(selector).toggleClass(class명)
    • 선택된 태그에 설정한 class에 해당하는 toggle 시킴
    • addClass()와 removeClass() 메서드를 번갈아 실행한 것과 동일
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Attribute addClass, removeClass, toggleClass</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <style type="text/css"> .important { font-weight: bold; font-size: xx-large; } .blue { color: blue; } </style> <script> /* 태그의 CSS를 조작하기 위한 메소드이다. ● addClass() 선택한 태그에 하나이상의 class을 추가한다. ● removeClass() 선택한 태그로부터 하나 이상의 class을 제거한다. ● toggleClass() 선택한 태그로부터 add/remove class을 토글한다. ● css() 스타일 속성을 set/return 한다. */ $(document).ready(function () { $("#large").on("click", function () { $("p, h2").addClass("important blue"); }); $("#normal").on("click", function () { $("p, h2").removeClass("important blue"); }); //toggle $("#toggle").on("click", function () { $("p, h2").toggleClass("important blue"); }); }); </script> </head> <body> <h1>Heading</h1> <h2>Heading2</h2> <p>이것은 중요한 내용이다.</p> <button id="large">크게보기</button><br /> <button id="normal">보통</button> <hr /> <button id="toggle">toggle</button> <hr /> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Attribute val, text, html</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function () { $("#get").on("click", function () { var m = $("p").text(); var m2 = $("p").html(); var m3 = $("#addr1").val(); var m4 = $("a").attr("href"); console.log(m); console.log(m2); console.log(m3); console.log(m4); }); $("#set").on("click", function () { //$("p").text("<span>Hello</span>"); $("p").html("<i>Hello JS</i>"); $("#addr2").val($("#addr1").val()); // $("#addr1").val() : 값 읽어오기 $("a").attr("href", "http://www.daum.net"); // attr 속성 값을 가져오거나 변경 }); }); </script> </head> <body> <button id="get">출력</button> <button id="set">설정</button> <hr /> <p>Hello <em>world</em>!!!</p> 주소:<input type="text" name="userid" id="addr1" /><br /> 배송주소<input type="text" name="passwd" id="addr2" /><br /> <a href="http://www.google.com">link</a> <div id="result"></div> </body> </html>
    • 📋 실행 📋

6. Manipulation 제어 선택자

  • jQuery Mainpulation
    • DOM을 추가/삭제/수정/복사 처리를 쉽게할 수 있는 메서드
    • 동적인 HTML 화면 쉽게 구현 가능
      • HTML 화면에 없던 특정 값을 보여주기
      • 화면에 있던 값 수정/삭제
  • $(selector).append(content)
    • 선택된 요소의 text 위치에 content 설정
      • content : html, 문자열
      • 한꺼번에 여러 content 설정 가능
    • 대상요소에 text 값이 있으면 에 추가됨
    • 추가하려는 content가 html 문서내에 존재하면 추가하려는 content가 대상요소로 이동함
  • $(selector).prepend(content)
    • 선택된 요소의 text 위치에 content 설정
      • content : html, 문자열
      • 한꺼번에 여러 content 설정 가능
    • 대상요소에 text값이 있으면 에 추가됨
    • 추가하려는 content가 html 문서내에 존재하면 추가하려는 content가 대상요소로 이동함
  • $(selector).after(content)
    • 선택된 요소의 에 content 설정
    • 추가하려는 content가 html 문서내에 존재하면 추가하려는 content가 대상요소로 이동함
  • $(selector).before(content)
    • 선택된 요소의 에 content 설정
    • 추가하려는 content가 html 문서내에 존재하면 추가하려는 content가 대상요소로 이동함
  • $(selector).replaceWith(content)
    • 선택된 요소를 제거하고 새로운 content 설정
    • 추가하려는 content가 html 문서내에 존재하면 추가하려는 content가 대상요소로 이동함
  • $(selector).remove([selector])
    • 선택된 모든 요소 제거
    • selector가 지정되면 selector와 일치하는 요소 제거
  • $(selector).empty()
    • 선택된 요소의 text 포함된 하위 요소 제거 (자손 포함)
  • $(selector).clone([true])
    • 선택된 요소 복제 (모든 하위요소 포함)
    • true값 지정되면 이벤트 핸들러도 함께 복제
    • 기본값은 false
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Manipulation</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> /* 특정 태그에 새로운 content를 설정하는 방법이다. ● append() , appendTo() 선택한 태그 자식 끝에 content를 삽입한다. ● prepend() 선택한 태그 자식 처음에 content를 삽입한다. ● after() 선택한 태그의 다음에 content를 삽입한다. ● before() 선택한 태그의 전에 content를 삽입한다. */ $(document).ready(function () { $("#result").css({ border: "2px solid red" }); $("#append").on("click", function () { // $(부모선택자).append(자식선택자) $("#result").append("<h1>홍길동</h1>"); }); $("#prepend").on("click", function () { $("#result").prepend("<h1>이순신</h1>"); }); $("#before").on("click", function () { $("#result").before("<h1>유관순</h1>"); }); $("#after").on("click", function () { $("#result").after("<h1>홍범도</h1>"); }); $("#replaceWith").on("click", function () { $("#result p").replaceWith("<h3>강감찬</h3>"); }); $("#remove").on("click", function () { $("#result p:first").remove(); // #result p에 해당하는 요소인 자신 삭제 }); $("#empty").on("click", function () { $("#result p:nth-child(2)").empty(); // #result에 해당하는 요소의 내용(하위) 삭제 }); $("#cloneBtn").click(function () { // $(자식선택자).appendTo(부모선택자) $(".hello").clone().appendTo(".goodbye"); // clone(true) : 엘리먼트 복제하고, 이벤트 핸들러 기능까지 복제됨 // clone(false) : 엘리먼트만 복제 $(this).clone(true).insertAfter(this); }); }); </script> </head> <body> <div id="result"> <p>Hello</p> <p>World</p> </div> <button id="append">append</button><br /> <button id="prepend">prepend</button><br /> <button id="before">before</button><br /> <button id="after">after</button><br /> <button id="replaceWith">replaceWith</button><br /> <button id="remove">remove</button><br /> <button id="empty">empty</button><br /> <hr /> <div class="goodbye"> 홍길동 <div class="hello"> 이순신 </div> </div> <button id="cloneBtn">clone()</button> </body> </html>
    • 📋 실행 📋

7. Utilities 선택자

  • jQuery Utilities
    • 배열 순회/배열 필터링
    • 데이터를 배열 형식으로 변경
    • 배열 복제
    • 데이터의 공백 제거
    • XML 및 JSON 파싱처리 방법
  • $(selector).each(obj, fn)
    • 배열 및 map 형태의 반복되는 데이터를 순회처리
    • fn(콜백함수) 안에서 false 값을 return 하면 반복 중지됨
  • $(selector).grep(obj, fn, [inverter])
    • 배열형식 반복처리시 fn 내에서 필터링 처리 후 배열로 반환
    • function(함수)는 function(Object, Integer) 형식
      • Object는 index 위치에 해당하는 값
      • Integer는 배열의 index값
      • each() 메서드의 함수와 Integer, Object 인자의 순서 다름
    • Inverter는 boolean값 저장되고, 기본적인 function 기능을 역으로 실행 (기본값 false)
      • function는 return 조건식이 true인 경우에만 결과값 반환
      • inverter 값을 true로 지정하면 역으로 실행되어, function의 return 조건식이 true인 경우를 제외한 나머지가 반환됨
  • $(selector).map(obj, fn)
    • 배열형식 반복처리시 가공하여 새로운 배열로 반환
    • 배열에 저장된 값을 대문자 또는 소문자로 모든 변경시키거나 값의 일부만 반환
  • $(selector).trim(str)
    • 지정된 str 문자열의 앞과 뒤 공백을 제거하여 반환
    • 문자열의 중간에 존재하는 공백은 제거되지 않고 유지
  • $(selector).parseJSON(str)
    • 지정된 JSON 문자열을 JavaScript 객체인 JSON 객체로 변환하여 반환
    • JSON 형식에 위배되는 문자열의 경우 예외 발생
  • $(selector).each(fn)
    • selector와 일치하는 요소들을 반복 처리 (반복문과 유사)
    • 선택된 DOM요소들을 쉽게 반복적으로 순회
    • HTML 문서 내의 동일한 태그로 구성된 요소의 반복적인 처리시 유용하게 사용
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Utilities each, grep, map</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ var months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; //1. each : 단순 반복 처리 $.each( months , function(idx,value){ // join 하지 않으면 모두 array console.log(idx+ " " + value); $("#monthList").append(`<li>${value}</li>`); }); //2. grep : 필터링 처리 var months2 = $.grep(months, function(value, i) { return (value.indexOf('J') == 0); }).join(","); console.log(months2); $("#monthJ").append(`<strong>${months2}</strong>`); //3. map : 가공 처리 var months3 = $.map(months, function(value, i) { return value.substring(0,3); }).join("/"); console.log(months3); $("#month3Name").append(`<li>${months3}</li>`); }); </script> </head> <body> <h3>1월 ~ 12월 </h3> <ul id="monthList"></ul> <hr> <h3>1월 ~ 12월(J 포함) </h3> <p id="monthJ"></p> <hr> <h3>1월 ~ 12월(축약) </h3> <p id="month3Name"></p> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Utilities each</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ var sum = 0; $("li").each(function(idx , ele){ // console.log(idx, ele.innerText); console.log(typeof $(ele).text()); // String console.log(idx, $(ele).text()); console.log(typeof $(this).text()); console.log($(this).text()); sum = sum + Number.parseInt($(this).text()); }); $("#result").text(sum); }); </script> </head> <body> <ul> <li>100</li> <li>200</li> <li>300</li> <li>400</li> <li>500</li> </ul> 합계:<div id="result"></div> </body> </html>
    • 📋 실행 📋

📕 jQuery 처리

1. Event 처리

1) 기본 Event 처리 메서드 종류

  • $(selector).ready(function)
    • HTML의 DOM 요소들이 모두 사용할 준비가 되면 function 함수가 실행됨
    • window.onload 이벤트 처리와 차이가 있음
  • $(selector).bind(eventType[,eventData], function(eventObject)
    • 요소에 이벤트 핸들러 연결
    • eventType에 해당되는 이벤트 발생되면 function에 이벤트 전달
  • $(selector).on(events[,selector][,data], function)
    • 요소에 이벤트 핸들러 연결
    • 동적으로 생성될 요소에 대해서 이벤트 처리 가능
    • 한 번에 여러 이벤트 타입 지정 가능
    • jQuery 1.7버전부터 모든 이벤트 처리는 on() 메서드 사용할 것을 권장
    • .off(event) 메서드 사용하여 설정한 이벤트 핸들러 제거
  • $(selector).one(events[,selector][,data], function)
    • .on() 메서드와 동일
    • 차이점은 한번만 이벤트 처리됨
    • 이벤트가 처리된 후에 자동으로 이벤트 핸들러 제거(unbound)됨 (자동으로 이벤트 해제)
  • $(selector).trigger(eventType[,extraParameters])
    • 이벤트가 발생될 때 실행될 함수나 .on() 메서드로 연결된 어떤 이벤트 핸들러를 강제적으로 실행시키는 메서드
    • 함수를 강제적으로 실행시킬 때 사용
    • 사용자가 실행시키는 이벤트에 순서를 지정해서 실행 가능
  • $(selector).unbind(eventType[,function])
    • 이전에 .bind() 메서드로 설정했던 이벤트 핸들러를 제거
  • $(selector).off(events[,selector][,function])
    • 이전에 .on() 메서드로 설정했던 이벤트 핸들러를 제거
    • selector에 필터링할 수 있는 값을 설정하여 세밀하게 이벤트 핸들러 제거 가능 (반드시 .on() 메서드에서 사용한 인자와 동일해야 함)
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event 동적</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ $("button").on("click",function(){ $("div").html("<button id='ok'>OK</button>"); }); //동적으로 생성된 태그 이벤트 추가 $("body").on("click", "#ok" , function(){ console.log("ok"); }); }); </script> </head> <body> <button>new버튼</button> <div></div> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event trigger</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ $("#ok").on("click",function(){ console.log("ok") }); $("#ok2").on("click",function(){ $("#ok").trigger("click"); // #ok에 click 이벤트 발생 .click()과 동일 }); }); </script> </head> <body> <button id="ok">ok</button> <button id="ok2">ok_trigger</button> </body> </html>
    • 📋 실행 📋

2) Form 관련 Event 종류

  • $(selector).focus([function])
    • 대상 요소에 focus가 지정될 때 function 실행
    • function 생략 가능
    • .on("focus", function)와 동일
    • 인자 없는 focus 메서드는 .trigger("focus")와 동일
  • $(selector).blur([function])
    • 대상 요소에 focus를 잃었을 때 function 실행
    • function 생략 가능
  • $(selector).focusin([function])
    • .focus(function)과 동일한 기능
    • 차이점은 버블링 지원
    • function 생략 가능
  • $(selector).focusout([function])
    • .blur(function)와 동일한 기능
    • 차이점은 버블링 지원
    • function 생략 가능
  • $(selector).change([function])
    • <select>, <input>, <textarea> 태그에서 값을 변경하는 change 이벤트 발생시 function 실행
    • function 생략 가능
    • .on("change", function)와 동일
    • 인자 없는 change 메서드는 .trigger("change")와 동일
  • $(selector).select([function])
    • <input type="text">, <textarea>에서 특정 텍스트 값을 선택했을 때 function 실행
    • select와 무관함
    • function 생략 가능
    • .on("select", function)와 동일
    • 인자 없는 select 메서드는 .trigger("select")와 동일
  • $(selector).submit([function])
    • form에서 submit 버튼 또는 button을 클릭해서 submit 이벤트가 발생했을 때 function 실행
    • <input type="submit">, <button type="submit"> 클릭하거나 폼의 요소에서 Enter 키 눌렀을 때 발생
    • function 생략 가능
    • .on("submit", function)와 동일
    • 인자 없는 submit 메서드는 .trigger("submit")과 동일
  • $(selector).keydown([function])
    • 사용자가 키보드를 누르는 순간 keydown 이벤트가 발생되어 function 실행
    • function 생략 가능
    • .on("keydown", function)와 동일
    • 인자 없는 keydown 메서드는 .trigger("keydown")와 동일
  • $(selector).keypress([function])
    • .keydown() 메서드와 비슷
    • 차이점은 보조키(shift, ESC, Delete) 등 인식하지 못함
    • function 생략 가능
  • $(selector).keyup([function])
    • 사용자가 키보드를 누르고 뗄 때 keyup 이벤트가 발생되어 function 실행
    • function 생략 가능
    • .on("keyup", function)와 동일
    • 인자 없는 keyup 메서드는 .trigger("keyup")와 동일

3) Mouse 관련 Event 종류

  • $(selector).click([function])
    • 대상 요소를 마우스로 클릭하면 click 이벤트가 발생되어 function 실행
    • function은 생략 가능
    • 대상 요소를 마우스 포인터로 누르고 떨어질 때 발생되는 이벤트로 HTML 어떤 요소라도 이 이벤트 발생시킬 수 있음
    • .on("click", function)와 동일
    • 인자 없는 click 메서드는 .trigger("click")와 동일
  • $(selector).dbclick([function])
    • 대상 요소를 마우스로 더블클릭하면 dbclick 이벤트가 발생되어 function 실행
    • function은 생략 가능
  • $(selector).mouseenter([function])
    • 대상 요소에 마우스로 진입하면 mouseenter 이벤트가 발생되어 function 실행
    • function은 생략 가능
    • 바인딩된 요소에 진입하는 경우에만 이벤트 발생 (자식요소에 이벤트 발생되지 X)
    • .on("mouseenter", function)와 동일
    • 인자 없는 mouseenter 메서드는 .trigger("mouseenter")와 동일
  • $(selector).mouseover([function])
    • mouseenter와 비슷
    • 차이점은 버블링 처리
    • 자식 요소로 이벤트가 전달됨
  • $(selector).mouseleave([function])
    • 대상 요소를 마우스로 진입 후 빠져나올 때 mouseleave 이벤트가 발생되어 function 실행
    • function은 생략 가능
    • .on("mouseleave", function)와 동일
    • 인자 없는 mouseleave 메서드는 .trigger("mouseleave")와 동일
  • $(selector).mouseout([function])
    • mouseleave와 비슷
    • 차이점은 버블링 처리
    • 자식 요소로 이벤트가 전달됨
  • $(selector).mousedown([function])
    • 대상 요소에서 마우스로 누를 때 mousedown 이벤트가 발생되어 function 실행
    • which 속성 이용 가능
      • 1 : left 버튼
      • 2 : 중간 버튼
      • 3 : right 버튼
  • $(selector).mouseup([function])
    • 대상 요소에서 마우스로 눌렀다 뗄 때 mouseup 이벤트가 발생되어 function 실행
    • function은 생략 가능
  • $(selector).mousemove([function])
    • 대상 요소 안에서 마우스를 움직일 때 mousemove 이벤트가 발생되어 function 실행
    • function은 생략 가능
  • $(selector).hover(fnIn, fnOut)
    • mouseenter와 mouseleave 이벤트를 한꺼번에 처리 가능한 메서드
    • mouseenter 이벤트 발생시 fnIn 함수가 실행
    • mouseleave 이벤트 발생시 fnOut 함수가 실행
    • $(selector).mouseenter(functionIn).mouseleave(functionOut)와 동일
  • $(selector).hover(fnInOut)
    • mouseenter와 mouseleave 이벤트를 한꺼번에 처리 가능한 메서드
    • mouserenter 및 mouseleave 이벤트 발생시 똑같이 fnInOut 함수 실행
    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script> $(document).ready(function(){ //1. button 이벤트 // $("#ok").on("click mouseover",function(){ // 이벤트 여러개 작성 가능 // console.dir(event.target); // console.dir(this); // console.dir($(this)); // console.dir($(this).text()); // }); $("#ok").on({ mouseover: function() { $(this).css("background-color", "yellow"); // button 배경 변경 (background-color는 backgroundColor와 동일) }, mouseleave: function() { $(this).css("background-color", "white"); }, click: function() { $(this).text($(this).text().toLowerCase()) .css("font-size", "30px"); } }); $("#txtInput").on("keyup", function(e) { console.log($(this).val()); $("#textSpan").text($(this).val()); }); $("#hover").hover(function(){ console.log("mouseenter"); },function(){ console.log("mouseleave"); }); $("#hoverImg").hover( function() { // mouseover $(this).attr({"src":"./images/b.jpg"}).css("border-radius", "50%") }, function() { // mouseout $(this).attr({"src":"./images/a.jpg"}).css("border-radius", "30%") } ); //2. change 이벤트 $("select").on("change", function(){ console.log("select 선택!!" + $(":selected").text()); console.log("select 선택!!" + $(this).val()); var img_url = `./images/${$(this).val()}.png`; $("#fruitImg").attr("src", img_url); }); //3.checkbox 선택 // $("#checkbox").on("change", function(){ // console.log(this.checked); // }); $("#all").on("click", function() { var allChecked = this.checked; $(".fruit").each(function(idx, chkbox) { chkbox.checked = allChecked; }); }); //4. submit 이벤트 $("form").on("submit", function(){ if($("#userid").val().length==0){ event.preventDefault(); alert("아이디는 필수 항목입니다."); $("#userid").focus(); } }); }); </script> </head> <body> <button id="ok">OK</button><br> text:<input type="text" id="txtInput" /> <br> <span id="textSpan"></span><br> <button id="hover">hover</button><br> <img id="hoverImg" src="./images/a.jpg" height="100" width="100" /> <form action="http://www.google.com"> 아이디<input type="text" name="userid" id="userid"><br> 비밀번호<input type="text" name="passwd"><br> <select name="fruit"> <option value="apple">사과</option> <option value="banana">바나나</option> <option value="watermelon">수박</option> </select><br> <img src="./images/apple.png" id="fruitImg" width="100" height="100" /><br> 전체선택 <input type="checkbox" name="all" id="all" /><br /> <input type="checkbox" name="apple" class="fruit" />사과<br /> <input type="checkbox" name="banana" class="fruit" />바나나<br /> <input type="checkbox" name="watermelon" class="fruit" />수박<br /> <!-- 사과<input type="checkbox" name="checkbox" id="checkbox" checked> --> <input type="submit" value="전송"> </form> </body> </html>
    • 📋 실행 📋

    • 📋 코드 📋
    • <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>event hover</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <style type="text/css"> .small img { border:none; margin:10px; width:60px; height:60px; } .large{width:200px; height:200px;} .hover{ color: blue; background-color:gray; } </style> <script type="text/javascript"> $(document).ready(function() { $(".small").hover(function() { $(this).parent().addClass('hover'); }, function() { $(this).parent().removeClass('hover'); }); }); </script> </head> <body> <table> <tr> <td width=150 align=center> <a href="images/f1_bg.jpg" class="small"><img src="images/f1_bg.jpg" /></a> <p>삼성카메라 </td> </tr> <tr> <td width=150 align=center> <a href="images/f2_bg.jpg" class="small"><img src="images/f2_bg.jpg" /></a> <p>캐논 카메라</p> </td> </tr> <tr> <td width=150 align=center> <a href="images/f3_bg.jpg" class="small"><img src="images/f3_bg.jpg" /></a> <p>엘지폰 </td> </tr> </table> </body> </html>
    • 📋 실행 📋

2. Ajax 처리

  • $.ajax(url [,settings])
    • 비동기 HTTP(Ajax) 요청을 수행하는 메서드
    • url : 요청을 보낼 타겟 URL 값으로 문자열로 지정
    • settings : key/value 쌍으로 구성된 Ajax 요청시 추가로 설정할 수 있는 설정 값
    • 📋 코드 📋
      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="UTF-8" />
        <title>Ajax</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
        <script>
          $(document).ready(function () {
            $("#req").on("click", function () {
              var page_value = $("#page option:selected").val();
              var url = `https://reqres.in/api/users`;
              $.ajax({
                type: "get",
                url: url,
                data: {
                  page: page_value,
                },
                dataType: "text",
                success: function (responseData, status, xhr) {
                  // $("#result").text(responseData);
                  response_user_list(responseData);
                },
                error: function (xhr, status, error) {
                  console.log(error);
                },
              });
            });
          }); //ready
          function response_user_list(responseText) {
            var table_header = `<tr>
                    <th>id</th>
                    <th>email</th>
                    <th>first_name</th>
      				<th>last_name</th>
      				<th>avatar</th>
      			</tr>`;
      		$("#usersList").empty();	
      		$("#usersList").append(table_header);
      		//text data => object
      		var json_obj = JSON.parse(responseText);
      		var userDataList = json_obj.data;
      		$.each(userDataList, function(idx, userData){
      			const {id, email, first_name, last_name, avatar } = userData;
      			var avatar_image = `<img src=${avatar} />`;			
      			$('<tr>').append($('<td>').html(id))
      				.append($('<td>').html(email))
      				.append($('<td>').html(first_name))	
      				.append($('<td>').html(last_name))
      				.append($('<td>').html(avatar_image))
      			.appendTo('tbody');		
      		});	
          }
        </script>
      </head>
      <body>
        <h3>User List</h3>
        page번호
        <select id="page">
          <option value="1">1Page</option>
          <option value="2">2Page</option>
        </select>
        <br />
        <button id="req">요청</button>
        <div id="result"></div>
        <table border="1">
          <tbody id="usersList"></tbody>
        </table>
      </body>
      </html>
    • 📋 실행 📋

 
728x90
반응형