<script type="text/javascript">
// 첫번째 엘리먼트 선택
$("p:first").css("background-color", "orange");
// 첫번재 엘리먼트 선택
$("#box-1 div p:first").css("background-color", "lightgreen");
// 마지막번째 엘리먼트 선택
$("p:last").css("background-color", "orange");
// 마지막번째 엘리먼트 선택
$("#box-1 div p:last").css("background-color", "lightgreen");
</script>
<script type="text/javascript">
// 짝수번째 엘리먼트 선택
$("#box-1 div p:even").css("background-color", "lightgreen");
// 홀수번째 엘리먼트 선택
$("#box-1 div p:odd").css("background-color", "orange");
</script>
<script type="text/javascript">
// 부모엘리먼트를 기준으로 첫번째 자식 엘리먼트 선택하기
$("p:first").css("background-color", "lightgreen"); // 항상 하나만 선택 된다.
$("p:first-child").css("border", "2px solid red"); // 여러 개 선택 될 수 있다.
// 부모엘리먼트를 기준으로 마지막번째 자식 엘리먼트 선택하기
$("p:last").css("background-color", "orange"); // 항상 하나만 선택 된다.
$("p:last-child").css("border", "2px solid blue"); // 여러 개 선택 될 수 있다.
</script>
<script type="text/javascript">
// 부모엘리먼트를 기준으로 n번째 자식 엘리먼트 선택하기
$("p:nth-child(2)").css("background-color", "orange");
$(".container > div > p:nth-child(2)").css("border", "5px solid blue");
$(".container > div > div > p:nth-child(2)").css("border", "5px solid red");
</script>
원하는 태그를 선택하는 여러 방법
<script type="text/javascript">
// 지정된 인덱스번째의 엘리먼트 선택하기(0부터 시작)
$("#box-1 p:eq(0)").css("background-color", "red");
$("#box-1 p:eq(1)").css("background-color", "blue");
$("#box-1 p:eq(2)").css("background-color", "green");
$("#box-1 p:eq(3)").css("background-color", "orange");
$("#box-1 p:eq(4)").css("background-color", "pink");
</script>
* nth-child와 같은 기능을 하지만, 다른점은 nth-child는 1부터 시작하고 :eq는 0부터 시작한다.
<script type="text/javascript">
// 지정된 인덱스번째 이전 엘리먼트 선택하기
$("#box-1 p:lt(2)").css("background-color", "green");
// 지정된 인덱스번째 이후 엘리먼트 선택하기
$("#box-1 p:gt(2)").css("background-color", "orange");
</script>
<script type="text/javascript">
// 지정된 텍스트를 포함하고 있는 엘리먼트 선택하기
$("li:contains('라떼')").css("background-color", "orange");
</script>
<script type="text/javascript">
// 지정된 선택자에 해당하는 자손을 포함하고 있는 엘리먼트 선택하기
$("#box-1 div:has('dl')").css("background-color", "lightgreen");
</script>
<script type="text/javascript">
// 지정된 선택자에 해당하지 않는 엘리먼트 선택하기
$("#box-1 div:not(:has('dl'))").css("background-color", "lightblue");
</script>
<script type="text/javascript">
// 속성선택자로 엘리먼트 선택하기
//$("input[name=birth]").val("2022-11-30");
$("#user-birth").val("2022-11-30"); // name과 id가 둘 다 있다면 편한 것을 사용하면 된다.
</script>
<script type="text/javascript">
// 속성선택자로 엘리먼트 선택하기
//$("input[name=pwd]").prop("disabled", true);
$("#user-pwd").prop("disabled", true);
// 속성선택자로 엘리먼트 선택하기
//$("input[name=email]").prop("readOnly", true);
$("#user-email").prop("readOnly", true);
// 속성선택자로 엘리먼트 선택하기
$("input[name=skill]").prop("checked", true); // 개수가 늘거나 줄어도 전체 다 표시된다.
// $("#skill-1, #skill-2, #skill-3, #skill-4, #skill-5").prop("checked", true); //name을 하지 않으면 비효율적이 된다.(개수가 늘어나거나 줄으면 그 상태를 반영할 수 없다.)
</script>
* checked 또는 checked="checked"로 둘 다 적어도 되는 경우는 prop이다.
<script type="text/javascript">
//$("input").prop("disabled", true); // 태그명이 input인 엘리먼트를 선택하고 비활성화 시킨다.
// 폼 필터 선택자
$(":input").prop("disabled",true); //모든 입력필드를 선택하고 비활성화 시킨다.
</script>
<script type="text/javascript">
// 폼 필터 선택자
// $(":input")와 $("input, select, textarea")는 동일하다.
// $(":text")와 $("input[type=text]")는 동일하다.
// $(":password")와 $("input[type=password]")는 동일하다.
// $(":radio")와 $("input[type=radio]")는 동일하다.
// $(":checkbox")와 $("input[type=checkbox]")는 동일하다.
// $(":file")와 $("input[type=file]")는 동일하다.
// $(":disabled")는 비활성화된 폼요소를 선택한다.
// $(":checked")는 체크된 체크박스나 라디오 버튼을 선택한다.
// $(":selected")는 선택된 <option>을 선택한다.
</script>
<button onclick="handler()">버튼</button>
function handler() {
이벤트 처리 코드
}
<button id="btn-del-user">버튼</button>
var el = document.getElementById("btn-del-user");
el.onclick = function() {
이벤트 처리 코드
}
<button id="btn-del-user">버튼</button>
var el = document.getElementById("btn-del-user");
el.addEventListener('click', function) {
이벤트 처리 코드
}) ;
<button id="btn-del-user">버튼</button>
$('#btn-del-user').on('click', function() {
이벤트 처리 코드
})
<button id="btn-del-user">버튼</button>
$('#btn-del-user').click(function) {
이벤트 처리 코드
})
* jQuery는 브라우져의 종류에 상관없이 일관된 방식으로 이벤트처리가 가능하도록 추상화된 이벤트 처리관련 메소드를 제공한다.
<div class="container">
<h1>콜백 함수의 사용</h1>
<div>
<button class="btn btn-primary btn-sm" id="btn-1">버튼1</button>
<button class="btn btn-primary btn-sm" id="btn-2">버튼2</button>
<button class="btn btn-primary btn-sm" id="btn-3">버튼3</button>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
<script type="text/javascript">
// 콜백함수
// - 콜백함수는 운영체제, 가상머신, 브라우저가 (실행할 조건이 갖춰졌을 때) 자동으로 실행하는 메소드다.
// - 콜백함수는 이벤트핸들러와 같이 특정 이벤트에 바인딩 시켜서 해당 이벤트가 발생했을 때 브라우저가 함수를 실행시키는 함수가 대표적인 콜백함수다.
// - 이벤트핸들러가 대표적인 콜백함수의 유형이다.
/*
이벤트 처리에서 콜백함수의 사용
엘리먼트.addEventListener("이벤트이름", 콜백함수)
* 해당 엘리먼트에서 지정된 이벤트가 발생하면 실행될 콜백함수를 등록하는 것
(실행은 브라우저가 하므로 몇 번 실행될지, 언제 실행될고 종료될지 모른다.
개발자는 등록만한다.
콜백함수는 대부분 바인딩함수로 정의되는 경우가 많다.)
var element = document.querySelector("#btn-delete");
element.addEventListener('click', function() {
수행문;
수행문;
})
*/
var el1 = document.getElementById("btn-1");
var el2 = document.getElementById("btn-2");
var el3 = document.getElementById("btn-3");
el1.addEventListener('click', function() {}) // 콜백함수
el2.addEventListener('click', function() {}) // 콜백함수
el3.addEventListener('click', function() {}) // 콜백함수
Element = {
onclick: null,
onmouseenter : null,
onmouseListener : function(eventName, callback) {
}
}
el.addEventListener('click', function() {....})
-> eventName에 click이 전달되고 callback에 function() {....}이 전달된다.
- 실행순서를 결정할 수 없기 때문에 나는 함수를 전달만 해주고 브라우저가 상황에 맞게 실행한다.
var el1 = document.getElementById("btn-1");
var el2 = document.getElementById("btn-2");
var el3 = document.getElementById("btn-3");
// 이벤트 발생시 수행할 작업을 익명함수로 구현해서 엘리먼트에 바인딩 시킨다.
el1.addEventListener('click', function() {
alert("버튼 1 클릭됨");
}); // 콜백함수
el2.addEventListener('click', function() {
alert("버튼 2 클릭됨");
}); // 콜백함수
el3.addEventListener('click', function() {
alert("버튼 3 클릭됨");
}); // 콜백함수
// jQuery의 .on() 메소드로 이벤트 핸들러 등록하기
//var jQueryObuect = $("#btn-4");
//jQueryObject.on("click", function() {})
$("#btn-4").on('click', function() {
alert("버튼4 클릭됨")
});
$("#btn-5").on('click', function() {
alert("버튼5 클릭됨")
});
$("#btn-6").on('click', function() {
alert("버튼6 클릭됨")
});
<div class="container">
<h1>jQuery 이벤트 처리</h1>
<div class="border p-3 mb-3">
<div class="mb-1" id="box-10"> 첫번째 댓글입니다. <button class="btn btn-outline-danger btn-sm" data-reply-target="#box-10">숨기기</button></div>
<div class="mb-1" id="box-13"> 두번째 댓글입니다. <button class="btn btn-outline-danger btn-sm" data-reply-target="#box-13">숨기기</button></div>
<div class="mb-1" id="box-21"> 세번째 댓글입니다. <button class="btn btn-outline-danger btn-sm" data-reply-target="#box-21">숨기기</button></div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
<script type="text/javascript">
// $()함수로 이벤트를 등록할 엘리먼트를 선택하고, .on() 메소드로 이벤트핸들러함수를 바인딩 시킨다.
$(".btn-outline-danger").on('click', function(){
// jQuery의 이벤트핸들러함수에서 this는 이벤트가 발생한 엘리먼트 객체다.
console.log(this)
var el = this;
var id = el.getAttribute("data-reply-target");
$(id).hide(); // $("#box-10").hide();
});
</script>
* 이벤트핸들러함수에서 this는 이벤트를 발생시킨 바로 그 엘리먼트객체가 들어있다.