프론트

JQuery 셀렉터, 선택자, 메소드

짱코딩러 2022. 9. 5. 15:27

JQuery : 자바스크립트 언어를 간편하게 사용할 수 있도록 단순화시킨 오픈 소스 기반의 자바스크립트 라이브러리

*html->css->javascript 순서로 적용

 

<script src="https://code.jquery.com/jquery-3.1.1.min.js"/>

 

$() : 함수. JQuery가 제공하는 함수를 사용할 수 있게 된 상태

$변수 : jQuery 변수. jQuery에서 사용하는 내장 함수들을 모두 사용할 수 있음

$(document).ready() 메서드	//문서가 준비되면 함수내용 적용해!

 

//[1]함수이름 생성
$(document).ready(myFun);	
	function myFun(){
		//span에 redtext라는 클래스를 붙여줌
		$('span').addClass('redtext');
	}
//[2]함수이름 없이 바로 적용(익명함수)
 $(document).ready(function(){//전달하지 않고 익명함수로 바로 선언
	$('span').addClass('italictext');	//$('span')은 CSS의 span태그를 지정한거임
});

 

셀렉터,선택자

문서 내에서 원하는 엘리먼트(요소)를 쉽게 식별하고 이를 추출하기 위해서 jQuery에서 제공하는 기술

 

기본

셀렉터 설명
* 모든 엘리먼트와 일치
 E 태그명이 E인 모든 엘리먼트와 일치
 E F E의 자손이면서 엘리먼트의 이름이 F인 모든 엘리먼트
 E>F E의 바로 아래 F 엘리먼트
 E+F E의 형제 엘리먼트로 바로 다음 형제 F 엘리먼트
 E~F E의 형제 엘리먼트로 다음에 나오는 모든  F 엘리먼트
 E:has(F) 엘리먼트 F의 자손을 하나 이상 가지고 있는 E 모든 엘리먼트
 E.C 클래스명 C를 가지고 있는 모든 E 엘리먼트.
 *.C 클래스명 C를 가지고 있는 모든 엘리먼트
 E#I 아이디가 I 인 모든 E 엘리먼트.
 *#I 아이디가 I인 모든 엘리먼트
 E[A] 어트리뷰트 A를 가지는 모든 E 엘리먼트
 E[A=V] 어트리뷰트 A의 값이 V인 모든 E 엘리먼트
 E[A^=V] 어트리뷰트 A의 값이 V로 시작하는 모든 E 엘리먼트
 E[A$=V] 값이 V로 끝나는 어트리뷰트 A를 가지고 있는 모든 E 엘리먼트
E[A*=V] 값에 V를 포함하는 어브리뷰트 A를 가지고 있는 모든 E 엘리먼트

 

위치기반

:first 페이지에서 처음으로 일치하는 엘리먼트를 반환한다.
:last 페이지에서 마지막으로 일치하는 엘리먼트를 반환한다.
:even 페이지 전체의 짝수 번째 엘리먼트를 반환한다.
:odd 페이지 전체의 홀수 번째 엘리먼트를 반환한다.
:eq(n) n번째로 일치하는 엘리먼트를 반환한다.
:gt(n) n번째 엘리먼트(포함하지 않음) 이후의 일치하는 엘리먼트를 반환한다.
:lt(n) n번째 엘리먼트(포함하지 않음) 이전의 일치하는 엘리먼트를 반환한다.
:first-child 첫 번째 자식 엘리먼트를 반환한다.
:last-child 마지막 자식 엘리먼트를 반환한다.
:only-child 형제가 없는 모든 엘리먼트를 반환한다.
:nth-child(n) n번째 자식 엘리먼트를 반환한다.
:nth-child(even) 짝수 자식 엘리먼트를 반환한다.
:nth-child(odd) 홀수 자식 엘리먼트를 반환한다.
:nth-child(Xn+Y) 전달된 공식에 따른 n번째 자식 엘리먼트를 반환한다. Y0인 경우 생략 가능하다.

 

정의필터

:animated 현재 애니메이션이 적용되고 있는 엘리먼트를 선택한다.
:button 모든 버튼을 선택한다(input[type=submit], input[type=reset], input[type=button], button).
:checkbox 체크박스 엘리먼트만 선택한다.
:checked 선택된 체크박스나 라디오 버튼만을 선택한다(CSS에서 지원).
:contains(foo) 텍스트 foo를 포함하는 엘리먼트만 선택한다.
:disabled 인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택한다(CSS에서 지원).
:enabled 인터페이스에서 활성화 상태인 모든 폼 엘리먼트를 선택한다(CSS에서 지원).
:file 모든 파일 엘리먼트를 선택한다(input[type=file]).
:header 헤더 엘리먼트만 선택한다. 예를 들어<h1>부터 <h6>까지의 엘리먼트를 선택한다.
:hidden 감춰진 엘리먼트만 선택한다.
:image 폼 이미지를 선택한다(input[type=image]).
:input 엘리먼트만 선택한다(input, select, textarea, button).
:not(filter) 필터의 값을 반대로 변경한다.
:parent 엘리먼트를 제외하고, 텍스트도 포함해서 자식 엘리먼트를 가지는 엘리먼트를 선택한다.
:password 패스워드 엘리먼트만 선택한다(input[type=password]).
:radio 라디오 버튼 엘리먼트만 선택한다(input[type=radio]).
:reset 리셋 버튼을 선택한다(input[type=reset] 이나 button[type=reset]).
:selected 선택된 엘리만트만 선택한다.
:submit 전송 버튼을 선택한다(button[type=submit] 이나 input[type=submit]).
:text 텍스트 엘리먼트만 선택한다(input[type=text]).
:visible 보이는(visible) 엘리먼트만 선택한다.

 

 

메소드

$(셀렉터).addClass(클래스명) : 선택한 요소에 전달받은 클래스를 추가함.

<style type="text/css">
	.italictext { font-style: italic; }
</style>
<script src="../js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
	$('span').addClass('italictext');
</script>	
</head>
<body>
<span> simple </span>
</body>

$(셀렉터).length : 요소의 개수를 얻기 위해 사용

each() : For~in(반복문) 처럼 각 요소마다 적용

$(this) : each() 함수 내에서 현재 접근 가능한 요소

text() : 엘리먼트에 대해 텍스트 내용을 얻는다.

css() : 인자로 지정한 CSS 스타일을 선택한 요소에 적용

console.log("출력할 대상")

<script src="../js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
   $(document).ready(function() {
      $('p em').css('background-color', 'yellow').each(function() {  //div 하위의(손자까지 싹다 포함) em에 각각 함수 적용
         $('.result1').append($(this).text()+ "\n");//클래스가 result1인 요소에서. 그 요소에 text를 가져가다 붙이고 줄바꿈해
                                                   //여기서 this는 one, two, three인거임.
      });
      $('div > em').css('background-color', 'pink').each(function() {//div에 인접한(손자말고 찐자식만) em
         $('.result2').append($(this).text()+ "\n");     //클래스가 result2인 애한테 this의 텍스트를 넣어   
      });

      console.log("검색된 엘리먼트 개수 : " + $('p em').length);    
      console.log("검색된 엘리먼트 개수 : " + $('div > em').length);
   });
</script>
</head>
<body>
   <p>
      <em> one  </em>
      <em> two  </em>
      <span> <em> three </em> </span>
   </p>
   <div>
      <em> four  </em>
      <span> <em> five  </em> </span>
      <em>six</em> 
    </div>
<hr>
   <div>
      <span> ancestor descendant로 검색된 엘리먼트 : </span>
      <span class="result1"></span>
   </div>
   <div>
      <span> parent &gt; child로 검색된 엘리먼트 : </span>
      <span class="result2"></span>
   </div>
</body>

 

$(‘셀렉터’).append(‘추가할 내용’) : 셀렉터가 추가할내용의 뒤에 추가된다.

$(‘추가할 내용’).appendTo(‘셀렉터’) : 추가할 내용이 셀렉터의 뒤에 추가된다.

//둘이 같은거임
$('p').append('<b>연습</b>');
$('<b>연습</b>').appendTo('p');

<p>one</p>

 

//태그안에 다른 태그를 넣어줄 수도 있음
$('span').append($('b'));

 <b> 사과 </b>
 <span> 먹고 싶은 과일 : </span>

 

<script type="text/javascript">
   $(function() {
      var fruits=["apple", "banana", "orange", "melon"];
      var cars=["sonata", "grandure", "genesis"];
      
      $.each(fruits, function(index, value){//배열(fruits) 요소마다 각각 익명함수 적용해
         $("#fruit_list").append($("<li>"+value+"</li>"));
         
      });
      
      $.each(cars, function(index, value){
         //얘는 appendTo니까 붙일 요소를 먼저 만들고 어느 위친지 나중에 적용해
          $("<li>"+value+"</li>").appendTo("#car_list");
      });
   });
</script>
</head>
<body>   
 <div> 
    <b> 내가 좋아하는 과일 </b>
    <ul id="fruit_list"></ul>
 </div> 
 
 <div> 
    <b> 갖고 싶은 차  </b>
    <ul id="car_list"></ul>
 </div> 
</body>

 

html() : 태그를 포함한 텍스트를 얻는다. 

text() : 태그를 제외한 텍스트만 얻는다.

css('속성명','속성값') : 스타일을 적용한다.

removeClass() : 인자로 지정된 스타일을 제거한다.

<style>
   table {   table-layout:auto;  width: 75%;}    
   .textstyle { color: blue;   font-weight: bold; background-color: pink}  

</style>
<script src="../js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
   $(document).ready(function() {
      //td에 클래스 적용
	  $('td').addClass('textstyle');
     //td에 적용한 클래스 삭제
	  $('td:lt(2)').removeClass('textstyle'); //2번째 인덱스 이전의 요소들에 적용(2번 포함X)
	  $('td:gt(4)').removeClass('textstyle'); //4번째 인덱스 이후의 요소들에 적용(4번 포함X)
   });
</script>
</head>
<body>
   <table>
      <tr><td>zero</td><td>one</td><td>two</td></tr>
      <tr><td>three</td><td>four</td><td>five</td></tr>
   </table>
</body>

css(map) : MAP지정방식. {'속성명':'속성값' , … }

$('div span:first-child, div span:last-child') .css(
              {
                 'text-decoration'  : 'underline', 
                 'color'  : 'red', 
                 'font-size' : '20pt‘ 
               } );
//메소드 체인 방식
     $('div span:first-child, div span:last-child') //div 하위의 span태그 중에서 첫번째span, 마지막span
        .css('text-decoration', 'underline')
        .css('color', 'red')
        .css('font-size', '20pt');

click : 버튼이 눌리면 인자에 기술한 함수가 자동 호출하여 이벤트를 처리

attr(name) : attribute(속성)값을 얻어오기

attr(name, value) : 새로운 attribute(속성) 값을 설정하기

val() : 값(vaule)을 얻어오기

prev() : 속성의 형제 속성 중에 바로 이전 속성의 집합을 반환

html(htmlString) : 적용한 태그 속 내용을 바꿔서 적용함

   <script type="text/javascript">
      $(document).ready(function () {
         $('#selectBtn:button').click(function () {	//버튼이 눌리면
            var checkedList = "";
            var checkedConsole = "";
            //input태그중에 [name속성이 hobby인거]에 대해서: 체크박스의 값이: 체크되었으면
            $("input[name='hobby']:checkbox:checked").each(function () {
               checkedList += $(this).prev().text() + "\t";//체크된 요소들을 담아담아쓸어담아
                                    //체크박스 앞의(이전의) 텍스트를 가져와야하므로 prev() 사용
               checkedConsole += $(this).val() + "\t";//지금 체크된 요소의 val()를 뿌려뿌려
            });
            $('#contents').html(checkedList);//결과자리에다가 리스트를 적용(내용 변경)
            console.log(checkedConsole);
         });
      });
   </script>
</head>

<body>
   <div>
      <span class="item"> 음악감상 </span>
      <input type="checkbox" name="hobby" value="music">
   </div>
   <div>
      <span class="item"> 요가 </span>
      <input type="checkbox" name="hobby" value="yoga">
   </div>
   <div>
      <span class="item"> 독서 </span>
      <input type="checkbox" name="hobby" value="reading">
   </div>
   <div>
      <input type="button" id="selectBtn" value="취미 선택">
   </div>
   <div id="contents"> 결과 </div>
</body>

 

메소드 체이닝

 

add(selector 혹은 elements 혹은 htmlString)

<script type="text/javascript">
   $(function() {
      $("button").click(function() {
         $("div").addClass('redBorder')
                 .add("p") //redBorder를 추가한거에 p태그를 추가
                 .addClass('yellow'); //redBorder를 추가한거에 p태그를 추가한거에 yellow를 추가
                 //redBorder먼저 적용하고, p태그를 데려왔기 때문에 p태그에 redBorder는 적용되지 않음.
      });
   });
</script>
</head>
<body>   
   <div></div>   <div></div>    <div></div>
   <p> redBorder 클래스의 적용은 받지 못하고 yellow 클래스의 적용 받음</p>
   <button> 클릭 </button>
</body>

filter(selector 혹은 function)

<script type="text/javascript">
	$(function() {
	    $("div").css("background", "yellow") 
                  .filter(function(index) {		//익명함수
                     return index == 1 || $(this).attr("id") == "fourth";
                   })//div요소들 중에 두번째나, 네번째에만 고를래
                  .css("border-color", "red"); //고른애들 border줄래
	   });
</script>
</head>
<body>
	<div id="first"></div>
	
	<div id="second" class="middle"></div>
	<div id="third"  class="middle"></div>
	<div id="fourth" class="middle"></div>
	<div id="fifth"  class="middle"></div>
	
	<div id="sixth"></div> 
</body>

 

	$(function() {	//자동실행
	    $("div").css("background", "yellow") 
                  .filter(".middle")	//가운데에있는 애들은 필터링할게~ 
                  .css("border-color", "red"); //방금 필터링한 애들만 border줄게~
	});

 

not(selector 혹은 elements 혹은 function) : 선택된 엘리먼트들 중 표현식을 만족하지 않는 엘리먼트 얻기

 

slice(begin, end) : 선택된 엘리먼트들 중 원하는 범위의 엘리먼트만 반환하기(begin 이상 end 미만)

	$(function() {	//자동실행
		$('button').click(function(){	//버튼 클릭되면 시행해
			//셀렉터로 얻어낸 확장 집합 객체가 여러 번 사용될 경우에는 변수에 저장해 둔다.
			var $div = $('div');	//div선택해서 요소를 변수($div)에 담고
			//div 엘리먼트 중에서 2 이상 3미만, 인텍스가 0부터 시작하기에 세번째 엘리먼트만 반환
			$div.slice(2, 3).css('background', 'yellow');	//2~2번요소에 적용
			//end가 생략된 상태에서 begin만 기술하면 begin부터 끝까지
			$div.slice(4).css('background', 'pink');	//4번 이후부터 끝까지 적용
		});
	});

children() : 해당 엘리먼트의 자식 엘리먼트들 찾기

contents() : 해당 엘리먼트 내부 탐색 및 내용 변경하기

$("div").contents().remove("span"); //div의 컨텐츠중에 span을 지워

remove() : 껍데기까지 다 지움

empty() : 알맹이만 지움

clone() : 복제

next() : 해당 엘리먼트 뒤에 위치하는 형제 엘리먼트 찾기

nextAll() : 해당 엘리먼트 뒤에 있는 모든 엘리먼트 찾기 

prev() : 해당 엘리먼트 앞에 있는 형제 엘리먼트 찾기 

prevAll() : 해당 엘리먼트 앞에 있는 모든 형제 엘리먼트 찾기 

siblings() : 해당 엘리먼트와 같은 레벨의 모든 엘리먼트 찾기 

$(".hilite").siblings().css("color", "red").length;

parents() : 모든 조상 엘리먼트 찾기

parent() : 가장 인접한 부모 엘리먼트 찾기

find() : 선택된 엘리먼트들 중에서 원하는 엘리먼트 얻기

map(fn) : 선택된 엘리먼트들의 내용을 변경

andSelf() : 현재 설정 스택에 요소의 이전 설정을 추가

end() : 체인을 통해 확장집합을 생성할 경우 최조의 요소로 돌아감

'프론트' 카테고리의 다른 글

JQuery 이벤트, 효과  (0) 2022.09.05
JQuery Attribute  (0) 2022.09.05
Javascript 스크립트 작성 방식  (0) 2022.09.04
JavaScript 문서 객체(DOM)  (0) 2022.09.03
JavaScript 객체, 배열, 내장 객체, 브라우저 객체  (0) 2022.08.31