복습
•
jquery는 라이브러리 ⇒ 기능(메서드) 제공
◦
메서드 ⇒ 어떤 기능
•
jquery를 따로 import를 해줘야 함 - jquery.com에 접속해서 진행해줘야 함
(https://jquery.com/ ⇒ release.jquery.com OR jquery CDN 확인)
<script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
crossorigin="anonymous"></script>
HTML
복사
•
캐스팅 → jquery 객체 생성
◦
문서객체 캐스팅
// jquery 뒤에는 대부분 콜백이 나옴
// ready는 window.onload와 같음
$(document).ready(function() {
$.each(links, (index, item) => {
console.log(index, item)
output += `<a href="${item.url}">${item.name}</a>\n<br>`
})
$('#links').html(output)
$('h2').each(function (index, item) {
console.log(index, item.innerHTML, $(item).html())
})
})
JavaScript
복사
◦
document 관리해주는 메서드
◦
이벤트, 비동기 통신 ⇒ 오늘 진행
// 페이지 로드가 완료 되고 나서 실행
// $() => jquery 객체를 생성해준다
JavaScript
복사
•
set / get
// h2는 css의 선택자와 같음
$('h2').css('color', 'blue')
JavaScript
복사
•
interval, 5초 후에 동작
setTimeout(() => {
// option의 selected => 선택자
const selected_val = $('select > option:selected').val()
console.log('selected_val >', selected_val)
// input 태그의 text
let input_str = $('input:text').val()
console.log(input_str)
// input 태그의 체크된 체크박스
const checked_val = $('input:checkbox:checked').val()
console.log('checked_val >>', checked_val)
if (!checked_val) {
alert('확인하세요!!!')
}
}, 5000)
JavaScript
복사
•
반복 처리해주는 메서드
$.each() => 반복 처리 해주는 메서드
$.each(배열, 콜백(index, item))
$('selector').each(callback)
let output = '';
// a 태그를 만들어주는 콜백함수
$.each(links, (index, item) => {
console.log(index, item)
output += `<a href="${item.url}">${item.name}</a>\n<br>`
})
JavaScript
복사
•
document.querySelector('#links').innerHTML=output
// innerHTML의 역할을 html이 해줌
$('#links').html(output) // jQuery.html()
// innerHTML 활용
$('h2').each(function (index, item) {
console.log(index, item.innerHTML, $(item).html())
})
JavaScript
복사
•
탐색 : selector, filter() 를 활용
$(selector).filter(selector)
$(selector).filter(callback)
$(document).ready(() => {
// 짝수번째 인덱스만 선택됨
// table 밑에 tbody가 생기므로 table tr로 구성 (table > tr x)
// filter(인덱스 기준), 인덱스 범위 : 0 ~ n-1
$('table tr').filter(':even').css('background-color', 'yellow')
// 홀수번째 인덱스만 선택됨
// jquery 객체 반환 =>
// .css('background', 'orange').filter(':odd').css('color', 'white'))
$('h2').css('background', 'orange').filter(':odd').css('color', 'white')
// 3번째 요소 적용
$('h1').eq(3).css('color', 'red')
// 첫 번째 인덱스
$('h1').first().css('background-color', 'pink')
// 마지막 인덱스
$('h1').last().css('background-color', 'pink')
// 3의 배수
// filter
$('h3').filter((index, item) => {
console.log(index, item)
return index % 3 == 0
}).css('color', 'blue')
})
JavaScript
복사
•
xml
// <시작태그></마감태그>
let xml = `
<links>
<link>
<name>네이버</name>
<url>https://www.naver.com</url>
</link>
<link>
<name>구글</name>
<url>https://www.google.com</url>
</link>
<link>
<name>페이스북</name>
<url>https://www.facebook.com</url>
</link>
</links>
`
let html_doc = ''
$().ready(() => {
// 문자열 => xml 문서 객체로 변환
// $.parseXML(문자열)
// 캐스팅하지 않음
let xmlDoc = $.parseXML(xml)
// 요소를 찾는 메서드 -> find(엘리먼트 이름) 'link'
// find에서 링크 3개 찾아옴 (위 소스 참고)
// link => name, url
$(xmlDoc).find('link').each(function(index, item) {
console.log(index, item)
let name = $(item).find('name').text()
let url = $(item).find('url').text()
console.log(name, url)
html_doc +=
// parsing(파싱).
// ex) xml, json => html
`
<div class="box">
<h1>${name}</h1>
<p>${url}</p>
</div>
`
$('body').html(html_doc)
// this 사용시 item 생략 가능
// $(this)
})
})
JavaScript
복사
•
문서 객체 컨트롤
◦
클래스 지정해줘서 구성하는 게 좋음, 구분은 확실히 (디자인 영역은 디자인 영역으로 구분)
▪
addClass(), removeClass()
◦
getter
console.log('경로 : ', $('a').attr('href')) // getter
$('a').attr('href', 'http://www.facebook.com')
JavaScript
복사
◦
img 태그 관련
$('img').attr('src', '/image/bonobono.jpg')
$('img').attr({
src : '/image/bonobono.jpg',
width : 100,
height : 100
})
JavaScript
복사
◦
read
// html read - 태그 포함에서 가져옴 (콘솔 창에서 확인 가능)
console.log('html() => ', $('#menu1').html())
// text read - 텍스트만 가져옴 (콘솔 창에서 확인 가능)
console.log('text() => ', $('#menu2').text())
JavaScript
복사
◦
엘리먼트 삭제
// 엘리먼트 삭제 : 부모 엘리먼트 캐스팅 삭제 대상 캐스팅 부모에게 삭제요청
$('#menu3').remove()
// 비움, 삭제되는 것은 똑같으나 콘솔에서 확인 됨
$('#menu2').empty()
JavaScript
복사
•
문서 객체 생성
$('<h1></h1>').html('안녕하세요1234!!!!').appendTo('body') // 안녕하세요1234!!!!
$('<h1>안녕하세요!!!!</h1>').appendTo('body') // 안녕하세요!!!!
// $(A).appendTo(B) : 타깃 B
// $(A).prependTo(B) : 타깃 B, 맨 위쪽으로
// $(A).append(B) : 타깃 A, A에다 추가, 밑으로
// $(A).prepend(B) : 타깃 A, 맨 위쪽으로
// $(selector).append(content, content, content,...) => 활용 빈도 많음
// $(selector).append((index) => {})
JavaScript
복사
이벤트
•
이벤트 처리 : on 메서드, 이벤트 메서드
$(selector).on('이벤트이름', function())
$(selector).on({'이벤트이름': fn, '이벤트이름': fn, ...})
JavaScript
복사
•
이벤트 예제
$(document).ready(function(){
// $('h1').on('click', function() {
// // this : 객체 자신을 가리키는 키워드, 이벤트가 발생한 엘리먼트 객체를 가리킨다
// // 특정 영역을 클릭하면 '+' 문자 추가됨
// $(this).html(function(index, html) {
// return html + '+'
// })
// })
// 위의 주석 처리한 소스와 동일하게 출력되지만 해당 코드가 가독성 면에서 더 좋음
$('h1').click(function(e) {
$(this).html(function(index, html){
return html + '@'
})
})
// 객체 표현
$('h1').on({
// 속성: 이벤트 이름, 값: handler 함수 (이벤트에 대한 영역)
// css보다 addClass 주는 게 나음
mouseenter : function() {
$(this).addClass('over')
},
mouseleave : function() {
$(this).removeClass('over')
}
})
})
JavaScript
복사
•
on을 활용하여 이벤트 범위 한정
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jquery_7</title>
<script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
crossorigin="anonymous"></script>
<style>
h1 {
border: 1px solid #000;
margin: 10px;
}
</style>
<script>
$(document).ready(function(){
// $('h1').click(function(){
// let length = $('h1').length
// let html = $(this).html()
// $('#wrap').append(`<h1>${length}-${html}</h1>`)
// }) => 개선 필요
// on을 활용하여 이벤트 범위 한정
// wrap > h1
$('#wrap').on('click', 'h1', function(){
let length = $('h1').length
let html = $(this).html()
$('#wrap').append(`<h1>${length} - ${html}</h1>`)
})
})
</script>
</head>
<body>
<div id="wrap">
<h1> header - 0 </h1>
</div>
</body>
</html>
JavaScript
복사
•
입력 받을시 keyup 활용, 캐스팅한 특정메서드는 jquery를 반환, 전체 체크 선택 및 해제 로직
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jquery_8</title>
<script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
crossorigin="anonymous"></script>
<script>
$().ready(() => {
// 입력 받을시 keyup 활용
// 캐스팅한 특정메서드는 jquery를 반환
$('#msg').keyup(function(){
let cnt = $(this).val().length
let remain = 150 - cnt
// console.log(cnt, remain)
if (remain < 0) {
alert('소개글은 150자까지 작성이 가능합니다.')
let str = $(this).val().substr(0, 150)
$(this).val(str)
$('span').text('150')
return false
}
$('span').text(cnt)
})
// 전체 체크 선택 및 해제 로직
$('#allCheck').change(function(){
if (this.checked) {
$('#checkItem').children().prop('checked', true)
} else {
$('#checkItem').children().prop('checked', false)
}
})
})
</script>
</head>
<body>
<input type="checkbox" id="allCheck">
<label for="allCheck">all 전체 동의</label>
<div id="checkItem">
<input type="checkbox"> 사이트 이용 동의 <br>
<input type="checkbox"> 개인정보 이용 동의 <br>
<input type="checkbox"> 마케팅 이용 동의 <br>
</div>
<hr>
<textarea cols="50" rows="10" id="msg"></textarea>
<span>0</span> / 150
</body>
</html>
JavaScript
복사
비동기 통신
•
ajax
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jquery_9</title>
<script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
crossorigin="anonymous"></script>
<script>
$().ready(() => {
// $.ajax(options) => 객체 형식으로
// $.ajax(url, {options})
$.ajax('/data.json', {
success : function(data) {
// http Code : 200
// 304 : 정상
console.log('type(data)', typeof(data))
$('body').append(data)
},
error : function(request, status, error){
console.log(request)
console.log(status)
console.log(error)
}
})
})
</script>
</head>
<body>
</body>
</html>
JavaScript
복사
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jquery_9</title>
<script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
crossorigin="anonymous"></script>
<script>
$().ready(() => {
// $.ajax(options) => 객체 형식으로
// $.ajax(url, {options})
$.ajax({
url : '/data.xml',
success : function(data) {
// http Code : 200
// 304 : 정상
console.log('data', data)
console.log('type(data)', typeof(data))
// $('body').append(data)
// json parsing
// data.forEach(item => {
// $('body').append(`<h1>${item.name} : ${item.price}</h1>`)
// });
// xml parsing
$(data).find('product').each(function(){
let name = $(this).find('name').text()
let price = $(this).find('price').text()
$('body').append(`<h1>${name} 10 : ${price}</h1`)
})
},
error : function(request, status, error){
console.log(request)
console.log(status)
console.log(error)
}
})
})
</script>
</head>
HTML
복사