2020년 12월 14일
업데이트:
content 관련 메소드
HTML() 메소드
<h3>html() 메소드</h3>
<pre>
선택된 요소의 content 영역에 작성될 내용을 설정하거나
content 영역의 내용을 얻어오는 메소드.
(Javascript의 innerHTML과 같은 기능)
setter : 작성된 html 태그를 실제 태그로 인식함.
getter : 해당 요소의 content에 작성된 내용을 얻어옴. (태그도 포함함.)
</pre>
<h1 id="test1"><a href="https://www.naver.com">네이버로 이동</a></h1>
<h1 id="test2"></h1>
<script>
$(document).ready(function() {
// id가 test1인 요소 내용을 태그 포함하여 얻어오기
var content1 = $("#test1").html();
console.log("content1 : " + content1);
// id가 test2인 요소에 content1을 삽입.
// (html 태그는 태그로 인식하도록 하기)
// $("#test2").html(contetn1);
var tmp = "<a href='https://www.google.com'>구글로 이동</a>";
$("#test2").html(tmp);
});
</script>
TEXT() 메소드
<h3>text() 메소드</h3>
<pre>
선택된 요소의 content 영역에 작성될 내용을 설정하거나
content 영역의 내용을 얻어오는 메소드.
(Javascript의 innerText과 같은 기능)
setter : 작성된 html 태그를 실제 태그로 인식하지 않음(글자로만 취급).
getter : 해당 요소의 content에 작성된 내용을 얻어옴. (태그 무시.)
-> 태그는 삭제되고 내용만 얻어와짐
</pre>
<h1 id="test3"><a href="https://www.naver.com">네이버로 이동</a></h1>
<h1 id="test4"></h1>
<script>
$(function(){
var content2 = $("#test3").text();
console.log("content2 : " + content2);
$("#test4").text("<a href='https://www.naver.com'>네이버로 이동</a>");
});
</script>
매개변수로 함수 전달하기
<h3>html(), text() 매개변수로 함수 전달하기</h3>
<pre>
jQuery 메소드 중 html(), text(), val()는 매개변수로 함수를 전달할 수 있다.
함수의 형태는
function(index, html){}의 형식을 가지고 있음.
$("선택자").html(function(index, html){});
index : 현재 접근중인 요소의 인덱스를 반환
html : html()로 인해 변경되기 전의 content 값
</pre>
<div class="testClass1">테스트 1</div>
<div class="testClass1">테스트 2</div>
<div class="testClass1">테스트 3</div>
<script>
$(document).ready(function(){
$(".testClass1").html(function(index, html){
var str = "<h3>현재 인덱스 : " + index + ", 변경 전 content : "
+ html + "</h3>";
return str;
})
});
</script>
객체 생성 및 제거
<style>
.item {
width: 100px;
height: 100px;
display: inline-block;
margin: 5px 5px 0px 0;
text-align: center;
line-height: 100px;
background: yellowgreen;
}
.item span {
font-size: 24px;
font-weight: bold;
color: white;
}
.lime {
background-color: lime;
}
.added {
color: orangered;
}
.box {
width: 100px;
height: 100px;
padding: 5px 10px 15px 10px;
margin: 10px;
}
#remove-test {
border: 2px solid red;
}
#result {
border: 2px dashed blue;
}
</style>
객체 생성 방법
<h3>객체 생성 방법</h3>
<div id="area1"></div>
<script>
$(document).ready(function () {
// 1) HTML 태그 작성 방법으로 객체 생성 방법
var obj1 = "<h4>Create text with HTML</h4>";
// 2) DOM 객체를 이용한 객체 생성 방법
var obj2 = document.createElement("h4");
// Create text with DOM
var textNode = document.createTextNode("Create text with DOM");
obj2.appendChild(textNode);
// 3) jQuery 방식의 객체 생성 방법
var obj3 = $("<h4>").text("Create text with jQuery");
// $("<h4>") == document.createElement("h4");
$("#area1").append(obj1, obj2, obj3);
$("#area1").append(obj1, obj2, obj3);
// html 태그를 직접 작성한 문자열을 이용해서
// 객체를 추가한 경우 여러번 재사용이 가능하지만
// DOM, jQuery 방식으로 생성된 객체는
// 한번 삽입되면 재사용이 불가능함.
// (여러 번 삽입 시 마지막 삽입에만 적용된다)
});
</script>
객체 삽입 메소드
<h3>객체 삽입 메소드 - 1</h3>
<pre>
선택자 요소(A)를 기준으로 삽입 메소드 매개변수에
생성된 요소(B) 또는 함수의 리턴값을 추가
$(A).append(B) : A요소 내 뒷부분에 B를 추가(자식)
$(A).prepend(B) : A요소 내 앞부분에 B를 추가(자식)
$(A).after(B) : A의 요소 뒷부분에 B를 추가(형제)
$(A).before(B) : A의 요소 앞부분에 B를 추가(형제)
</pre>
<h1 id="test1"><span>A</span></h1>
<h1 id="test2"><span>A</span></h1>
<h1 id="test3"><span>A</span></h1>
<hr>
<h1 id="test4"><span>A</span></h1>
<script>
$(document).ready(function () {
//window.setInterval을 이용해서 1초마다 새로운 객체 삽입
var index = 0;
var arr = ["B", "C", "D", "E"];
var interval1 = window.setInterval(function(){
// var el = $("<span>").addClass("added").text(arr[index++]);
// <span class="added">B</span>
var el = '<span class="added">'+ arr[index++] +'</span>';
$("#test1").append(el);
$("#test2").prepend(el);
$("#test3").after(el);
$("#test4").before(el);
// E까지 출력된 후 interval 멈추기
// -> window.clearInterval
if(index > 3){ // 배열 내용을 모두 출력했을 때
window.clearInterval(interval1);
//interval1 변수에 있는 setInterval을 없앰.
}
}, 1000);
});
</script>
<!-------------------------------------------------------------------------------------------->
<hr>
<h3>객체 삽입 메소드 - 2</h3>
<pre>
생성된 요소(B)를 매개변수로 지정한 선택자(A) 요소에 추가
(part1의 메소드와 선택자, 생성구문의 순서가 반대)
$(B).appendTo(A) : B를 A의 요소 내 뒷부분에 추가(자식)
$(B).prependTo(A) : B를 A의 요소 내 앞부분에 추가(자식)
$(B).insertAfter(A) : B를 A의 요소 뒤에 추가(형제)
$(B).insertBefore(A) : B를 A의 요소 앞에 추가(형제)
</pre>
<h1 id="test5"><span>A</span></h1>
<h1 id="test6"><span>A</span></h1>
<h1 id="test7"><span>A</span></h1>
<hr>
<h1 id="test8"><span>A</span></h1>
<script>
$(document).ready(function () {
// #test5 ~ #test8까지
/// appendTo(), prependTo(), insertAfter(), insertBefore()
// 위 메소드를 이용하여
// #test5 ~ #test8까지 1초마다 span 태그에 B, C, D, E를 작성하여
// 객체 추가하기
var index2 =0;
var arr2 = ["B","C","D","E"];
var interval2 = setInterval(function(){
var el = "<span class='added'>" + arr2[index2++]+ "</span>" ;
$(el).appendTo($("#test5"));
$(el).prependTo($("#test6"));
$(el).insertAfter($("#test7"));
$(el).insertBefore($("#test8"));
if(index2 > arr2.length-1){ // 배열 내용을 모두 출력했을 때
window.clearInterval(interval2);
//interval1 변수에 있는 setInterval을 없앰.
}
},1000);
});
</script>
객체 복제 메소드
<h3>객체 복제 메소드</h3>
<p>
clone([true|flase]) : html요소를 복사하는 메소드<br>
매개변수로 이벤트 복사여부를 지정(기본값 : false)
</p>
<button id="clone">clone</button>
<div id="clone-test">
<div id="item1" class="item"><span>안녕?</span></div>
</div>
<script>
$(function(){
$("#item1").hover(function(){
// 마우스가 들어왔을 때
// 마우스가 들어온 요소에 lime 클래스 추가
$(this).addClass("lime");
}, function(){
// 마우스가 떠났을 때
$(this).removeClass("lime");
})
});
// id가 clone인 버튼이 클릭되었을 때
$("#clone").click(function(){
// id가 item1인 요소를 이벤트까지 복제하여
// id가 clone-test인 요소의 마지막 자식으로 추가하기
$("#item1").clone(true).appendTo($("#clone-test"));
// ("#item1").clone(true) : 복제된 요소
});
</script>
객체 제거 메소드
<h3>객체 제거 메소드</h3>
<p>
empty() : 모든 자식요소를 제거<br>
remove() : DOM요소 잘라내기. 연관된 이벤트도 모두 삭제<br>
detach() : DOM요소 잘라내기. 연관된 이벤트 모두 보관함.
<!-- detach : 떼다, 파견하다 -->
</p>
<button id="empty">empty</button>
<button id="remove">remove</button>
<button id="detach">detach</button><br>
<div id="remove-test" class="box">
<div id="item2" class="item"><span>안녕</span></div>
</div>
<div id="result" class="box"></div>
<script>
// ready() 함수 : 페이지 로딩 완료 후 수행
// id가 item2인 요소에
// 마우스가 들어갔을 때 lime 클래스 추가
// 마우스가 나갔을 때 lime 클래스 제거하는 이벤트 핸들러 추가
$("#item2").hover(function(){
$(this).addClass("lime");
}, function(){
$(this).removeClass("lime");
});
// empty 이벤트 핸들러
$("#empty").click(function(){
// id가 remove-test인 요소의 지식 요속들을 모두 제거
$("#remove-test").empty();
});
// remove 이벤트 핸들러
$("#remove").click(function() {
var el = $("#item2").remove();
console.log(el);
$("#result").append(el);
});
// detach 이벤트 핸들러
$("#detach").click(function() {
var el = $("#item2").detach();
console.log(el);
$("#result").append(el);
});
</script>
jQuery 메소드
each() 메소드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>11_jQuery메소드</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<style>
.highlight_0 {background:red;}
.highlight_1 {background:orange;}
.highlight_2 {background:yellow;}
.highlight_3 {background:green;}
.highlight_4 {background:blue;}
</style>
</head>
<body>
<h1>each() 메소드</h1>
<pre>
객체, 배열을 순차 접근하는 for in, for of와 비슷한 메소드로
객체나 배열의 요소를 순차적으로 접근하면서 index도 알려주는 메소드
[작성법]
1) $.each(object, function(index, item){});
object : 객체 또는 배열
index : 현재 접근중인 배열의 인덱스 또는 객체의 key 값
item : 현재 접근중인 배열의 요소 또는 객체의 value 값
2) $("선택자").each(function(index, item){});
$("선택자") : 여러 요소를 배열로 반환
</pre>
<div id="area1"></div>
<script>
$(document).ready(function() {
// 객체배열 생성
var arr = [{name : "네이버", link : "https://www.naver.com"},
{name : "구글", link : "https://www.google.com"},
{name : "w3school", link : "https://www.w3schools.com"}];
$.each(arr, function(index, item){
// console.log(index);
// console.log(item);
// a태그 생성
var str = index + "번째 : " + item.name + "로 이동";
var el = $("<a>").text(str).attr("href", item.link);
// .attr("속성명", "속성값");
// -> 해당 요소에 특정 속성 추가
$("#area1").append(el);
$("#area1").append($("<br>")); // 개행
});
});
</script>
<hr>
<div id="wrap">
<h1>item-0</h1>
<h1>item-1</h1>
<h1>item-2</h1>
<h1>item-3</h1>
<h1>item-4</h1>
</div>
<script>
$(function(){
// id가 wrap인 요소의 자식 중 h1 태그 선택
// $("#wrap").children("h1");
$("#wrap > h1").each(function(index, item){
$(item).addClass("highlight_" + index);
// item : 현재 접근중인 배열 요소
// 현재 배열 요소 : #wrapㅇ의 자식 중 h1 태그
// $(item) : h1 태그 하나 선택
// index : 현재 접근 중인 배열 요소의 인덱스(0~4)
});
});
</script>
</body>
</html>
이벤트
이벤트 관련 속성
<h3>이벤트 관련 속성</h3>
<p>이벤트핸들러의 매개변수로 event객체를 전달함.
인라인 이벤트 모델 방식으로 이벤트 설정 시 매개변수 키워드는 event로 고정.</p>
<button onclick="test1(event);">실행확인</button>
<script>
function test1(e){
console.log(e);
console.log(e.target);
}
</script>
이벤트 연결 on() / 해제 off()
<h3>이벤트 연결 on() / 해제 off()</h3>
<p>
요소 객체에 이벤트 발생 시 연결될 이벤트 핸들러를 지정하는 메소드이다.<br>
$('선택자').bind() : 현재 존재하는 문서 객체만 이벤트 연결<br>
$('선택자').unbind() : bind()로 연결된 이벤트 제거 <br>
</p>
<h4>
bind(), unbind() 메소드는 jquery3.0부터 deprecated로 설정되어<br>
대신 on(), off() 메소드를 사용함.<br><br>
$('선택자').on("이벤트명", "이벤트 핸들러") : bind()대신에 on()으로 대체됨<br>
$('선택자').off() : on()으로 연결된 이벤트 제거
</h4>
<h1 id="test1">마우스를 올려보세요</h1>
<button id="btn1">이벤트 제거</button>
<script>
$("#test1").on("mouseenter", function(event){
// mouseenter : 마우스가 들어왔을 때라는 이벤트
// event : 발생한 이벤트에 대한 정보가 담겨있는 객체
// event.target : 이벤트가 발생한 요소 (==this)
// console.log(event.target);
console.log(this);
$(event.target).css("backgroundColor", "pink").text("마우스 들어옴");
$(this).css("cursor", "pointer");
});
// mouseleave : 마우스가 요소를 떠났을 때
$("#test1").on({"mouseleave":function(event){
$(event.target).css("backgroundColor", "yellow").text("마우스 나감");
}, "click": function(){
alert("마우스 클릭됨.");
}});
// #btn 클릭 시 #test1 이벤트 모두 제거
$("#btn1").on("click", function(event){
$("#test1").off("mouseenter")
.off("mouseleave").off("click").text("이벤트 제거됨.")
.css("backgroundColor", "red")
.css("color", "white");
});
</script>
$(‘선택자’).on( events , selector , handler )
<h3>$('선택자').on( events , selector , handler )</h3>
<pre>
선택자를 기준으로 매개변수로 전달된 selector에 지정한 event 발생 시
해당 handler를 동적 적용시켜 이벤트 처리를 할 수 있음.
** 페이지 로딩 후 스크립트 코드로 인해 동적으로 추가된 요소는
일반적인 방법으로 이벤트 지정이 불가능함.
이 때 아래 이벤트 연결 방법을 사용하면됨.
$(document).on( events , selector , handler );
-> 정적이든, 동적이든 문서내에 작성된 요소 중
selector에 해당하는 요소에 events가 발생하는 경우
handler를 수행하라는 의미
</pre>
<div id="wrap">
<h2>클릭 시 h2 태그요소 추가</h2>
</div>
<script>
var count = 0;
//$("#wrap > h2").on("click", function(event){
$(document).on("click", "#wrap > h2", function(){
// 동적 추가 요소에 이벤트 부여
var h2 = "<h2>클릭으로 인해 추가됨-" + (count++) + "</h2>";
$(event.target).after(h2);
});
</script>
one() 메소드
<h3>one() 메소드</h3>
<p>이벤트에 대한 동작을 딱 한 번만 연결할 때 사용</p>
<button id="test4">클릭하세요</button>
<script>
$("#test4").one("click", function () {
alert("처음이자 마지막 이벤트 발생");
$(this).css("background-color", "red")
.text("클릭 불가")
.prop("disabled", true);
});
</script>
연습문제_1
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>연습문제_1</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
.area{
display: inline-block;
width: 100px;
}
.box{
width: 100%;
height: 100px;
border : 1px solid black;
text-align: center;
line-height: 100px;
cursor : pointer;
transition-duration: 0.5s;
}
.input-box{
width: 100%;
margin: auto;
}
</style>
</head>
<body>
<div class="area">
<div class="box"></div>
<input type="text" class="input-box">
</div>
<div class="area">
<div class="box"></div>
<input type="text" class="input-box">
</div>
<div class="area">
<div class="box"></div>
<input type="text" class="input-box">
</div>
<div class="area">
<div class="box"></div>
<input type="text" class="input-box">
</div>
<div class="area">
<div class="box"></div>
<input type="text" class="input-box">
</div>
<script>
// box 클래스 요소를 클릭했을 때
// box 클래스 요소의 배경색을
// 클릭된 box 바로 다음에 작성된 input 태그의 값으로 변경
$(".box").click(function(){
var boxColor = $(this).css("backgroundColor"); // getter 방법
// .css("backgroundColor") : 해당 요소의 스타일 중 배경색을 얻어옴
console.log(boxColor);
var inputColor = $(this).next().val();
// this : 이벤트가 발생한 요소
// $(this) : 이벤트가 발생한 요소를 선택
// .next() : 다음 형제 요소 선택
// .val() : input 태그에 작성된 값을 얻어옴
console.log(inputColor);
if(boxColor == "rgba(0, 0, 0, 0)") {
// 배경색이 지정되지 않았다면
$(this).css("backgroundColor", inputColor); // setter 방법
// $(this) : 이벤트가 발생한 요소 선택
// css("backgroundColor", inputColor)
// : 해당 요소의 스타일 중 배경색을 inputColor로 변경
} else {
// 배경색이 지정되어 있다면
$(this).css("backgroundColor", "rgba(0, 0, 0, 0)");
}
});
// input 태그에 색상명이 작성되는 경우
// 작성된 글자색으로 input 태그의 color 변경
$(".input-box").keyup(function() {
// input-box 클래스를 가진 요소에서
// 키보드가 올라오는 이벤트가 발생했을 때
$(this).css("color", $(this).val());
// $(this).val() : 이벤트가 발생한 요소의 값을 얻어옴
// css("color", $(this).val()
// : 이벤트가 발생한 요소의 값을 얻어와
// 해당 요소의 글자색을 얻어온 값으로 변경
});
</script>
</body>
</html>
연습문제_2
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>연습문제_2</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<style>
#wrap {
width: 202px;
height: 50px;
background-color: pink;
}
.added {
font-size: 35px;
font-weight: bold;
}
</style>
</head>
<body>
<button type="button" id="start">시작</button>
<button type="button" id="stop">정지</button>
<div id="wrap"></div>
<script>
$("#start").one("click", function () {
$(this).prop("disabled", true);
});
var timer; // setInterval을 저장하기 위한 변수
var count = 0;
$("#start").on("click", function () {
// wrap에 있는 모든 요소 제거
$("#wrap").empty();
// count = 0;
var timer = setInterval(function () {
var el = "<span class='added'>" + (count++) + "</span>";
if (count <= 10) {
$("#wrap").append(el);
} else {
// #wrap의 자식 요소(span 태그들) 모두 제거
$("#wrap").empty();
count = 0;
}
}, 100);
$("#stop").on("click", function () {
// 수행중인 setInterval (timer)을 멈춤
clearInterval(timer);
count = 0;
});
});
</script>
</body>
</html>
댓글남기기