html 조작을 쉽게 바꿔주는 라이브러리에는 React, Vue, jQuery 등이 있는데..

React와 Vue는 자바스크립트 어느 정도 문법을 알아야 사용 가능하니🥲  jQuery를 먼저 알아보자!
(jQuery는 자바스크립트 querySelectorAll, classList.add 이런 것들을 이름만 훨씬 짧게 바꿔주는 라이브러리다)

 

 


 

jQuery 설치하기

 

구글링 후 jQuery 3.x 버전 <script> 태그를 찾아서 html 파일에 복붙하면 설치 끝이다 (초 - 간단)

그것마저 귀찮으면 html에 아래 코드를 복붙하면 된다

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

 

이제 jQuery 설치한 곳 하단에서 jQuery 문법을 사용할 수 있다

위치가 바뀌면 오류가 나니 주의하기!

 

+ 거의 모든 자바스크립트 라이브러리는 </body> 전에 넣는 걸 권장한다고 한다

이 강의에서는 (로딩 속도는 느려지지만) 가독성을 위해 <head> 태그 안에다가 작성했다

 

 

 

 

jQuery 를 써보자 😼

jQuery 를 쓰면 코드 양이 절반 가량으로 줄어든다!

 

ex) 기존에 작성해 놓았던 코드를 바꿔보자

$ === querySelector / querySelectorAll

on === addEventListener

<!-- javascript -->
<script>
        document.querySelectorAll('.navbar-toggler')[0].addEventListener('click', 
            function(){
                document.querySelectorAll('.list-group')[0].classList.toggle('show');
        });        
</script>
<!-- jQuery -->
<script>
	 $('.navbar-toggler').on('click', function(){
                $('.list-group').toggleClass('show');
        });  
</script>

 

**주의

html 셀렉터로 찾으면 html 함수를 뒤에 붙여야하고
jQuery 셀렉터로 찾으면 jQuery 함수를 뒤에 붙여야 잘 된다.

 

ex) 
$('어쩌구').innerHTML → X

$('어쩌구').html(' ') → O

 

 

 

1️⃣  html 변경하기

<p class="hello">안녕</p>

<script>
  $('.hello').html('bye'); 
</script>

 

 

2️⃣  css 변경하기

<p class="hello">안녕</p>

<script>
  $('.hello').css('color', 'red');
</script>

 

 

3️⃣  class 탈부착하기

<p class="hello">안녕</p>

<script>
  $('.hello').addClass('클래스명');
  $('.hello').removeClass('클래스명');
  $('.hello').toggleClass('클래스명');
</script>

 

 

4️⃣  html 여러 개 바꾸기

자바스크립트에서 태그 3개 내용을 일괄적으로 '바보'로 바꾸려면,

아래와 같이 3줄을 써야 한다

<!-- javascript 사용 -->

<p class="hello">안녕</p>
<p class="hello">안녕</p>
<p class="hello">안녕</p>

<script>
  document.querySelectorAll('.hello')[0].innerHTML = '바보';
  document.querySelectorAll('.hello')[1].innerHTML = '바보';
  document.querySelectorAll('.hello')[2].innerHTML = '바보';
</script>

그러나 jQuery 에서는.. 

 $() 셀렉터는 그냥 querySelectorAll처럼 여러개가 있으면 전부 찾아준다

 

그리고 거기에 [0] 이런 식으로 순서를 지정할 필요 없이 .html() 을 붙이면
셀렉터로 찾은 모든 요소를 한 번에 조작하고 변경해줄 수 있다

<!-- jQuery 사용 -->

<p class="hello">안녕</p>
<p class="hello">안녕</p>
<p class="hello">안녕</p>

<script>
  $('.hello').html('바보');
</script>

 

 

5️⃣  이벤트리스너 사용하

addEventListener 대신 on 쓰면 된다

on은 $() 이걸로 찾은 것들에만 붙일 수 있다

<p class="hello">안녕</p>
<button class="test-btn">버튼</button>

<script>
  $('.test-btn').on('click', function(){
    어쩌구~
  });
</script>

 

 

5️⃣  UI 애니메이션 넣

<p class="hello">안녕</p>
<button class="test-btn">버튼</button>

<script>
  $('.test-btn').on('click', function(){
    $('.hello').fadeOut();
  });
</script>

.hide() 는 사라지게
.fadeOut() 은 서서히 사라지게
.slideUp() 은 줄어들며 사라지게 만들어준다

간단한 애니메이션은 이런 식으로 쉽게 사용가능하다
애니메이션을 반대로 주고 싶으면 show() fadeIn() slideDown() 이런게 있다
아니면 fadeToggle() 이런 것도 있다 

 

 


문제

문제 

아무데나 버튼 하나를 만들고, 이 버튼을 누르면 모달창을 띄우도록 해보자

 

풀이

헷갈릴까봐 자바스크립트로 먼저 작성해서 실행하고,

실행이 잘 되는지 확인한 후에 해당 코드를 jQuery로 변환했다

<!-- html -->
<div class="black-bg">
        <div class="white-bg">
          <h4>로그인하세요</h4>
          <button class="btn btn-danger" id="close">닫기</button>
        </div>
      </div> 
<button class="login-btn">로그인</button>

 

- 로그인 버튼을 클릭하면 모달창 띄우기

- 닫기 버튼을 누르면 모달창 숨기기

- show 클래스(css로 작성한 부분)는 이전에 자바스크립트 강의에서 실습할 때 사용한 게 있어서 새로 만들지 않고,

해당 코드를 불러오는 방식으로 재사용했다

 

<!-- jQuery-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
   $('.login-btn').on('click', function(){
           $('.black-bg').toggleClass('show');
   });
   $('.btn-danger').on('click', function(){
           $('.black-bg').css('display', 'none');
   })
</script>

 

로그인 버튼을 누르면 .black-bg 클래스에 .show 클래스가 추가되어

display: block 이 되도록 설정했다

/* css */
.black-bg {
    display: none;
    width : 100%;
    height : 100%;
    position : fixed;
    background : rgba(0,0,0,0.5);
    z-index : 5;
    padding: 30px;
  }

.white-bg {
    background: white;
    border-radius: 5px;
    padding: 30px;
} 

.show {
    display: block;
}

 


 

TIL 끝!