220708 - 자바스크립트 - DOM 제어 / 제이쿼리
- DOM 요소 제어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul{
list-style: none;
}
legend{
font-size: 1.2em;
font-weight: bold;
margin-left: 20px;
}
form{
width: 520px;
height: auto;
padding-left: 10px;
margin: 50px auto;
}
fieldset{
border: 1px solid #ccc;
padding: 30px 20px 30px 30px;
margin-bottom: 35px;
}
.field{
float: left;
width: 60px;
font-weight: bold;
font-size: 0.9em;
line-height: 55px;
text-align: right;
margin-right: 15px;
}
.input-box{
width: 350px; /*정렬*/
height: 35px;
border: 1px solid #ccc;
padding: 5px;
margin: 10px 0;
float: left;
border-radius: 5px;
}
</style>
<script>
window.onload=function(){
var check=document.querySelector('#shippingInfo');
check.addEventListener('click',function(){
if (this.checked==true){
// document.querySelector('#shippingName').value=document.querySelector('#billingName').value;
// document.querySelector('#shippingTel').value=document.querySelector('#billingTel').value;
// document.querySelector('#shippingAddr').value=document.querySelector('#billingAddr').value;
//name 으로 백엔드 연결하기 (queryselector 필요 X)
document.ship.shippingName.value=document.order.billingName.value;
document.ship.shippingTel.value=document.order.billingTel.value;
document.ship.shippingAddr.value=document.order.billingAddr.value;
} else {
//document.querySelector('#shippingName').value='';
//document.querySelector('#shippingTel').value='';
//document.querySelector('#shippingAddr').value='';
document.ship.shippingName.value='';
document.ship.shippingTel.value='';
document.ship.shippingAddr.value='';
}
});
}
</script>
</head>
<body>
<div id="container">
<form action="" name="order">
<fieldset>
<legend>주문 정보</legend>
<ul>
<li>
<label class="field" for="billingName">이름 : </label>
<input type="text" class="input-box" id="billingName" name="billingName">
</li>
<li>
<label class="field" for="billingTel">연락처 : </label>
<input type="text" class="input-box" id="billingTel" name="billingTel">
</li>
<li>
<label class="field" for="billingAddr">주소 : </label>
<input type="text" class="input-box" id="billingAddr" name="billingAddr">
</li>
</ul>
</fieldset>
</form>
<form action="" name="ship">
<fieldset>
<legend>배송 정보</legend>
<ul>
<li>
<input type="checkbox" id="shippingInfo" name="shippingInfo">
<label for="shippingInfo" class="check">주문 정보와 배송 정보가 일치합니다</label>
</li>
<li>
<label class="field" for="shippingName">이름 : </label>
<input type="text" class="input-box" id="shippingName" name="shippingName">
</li>
<li>
<label class="field" for="shippingTel">연락처 : </label>
<input type="text" class="input-box" id="shippingTel" name="shippingTel">
</li>
<li>
<label class="field" for="shippingAddr">주소 : </label>
<input type="text" class="input-box" id="shippingAddr" name="shippingAddr">
</li>
</ul>
</fieldset>
</form>
</div>
</body>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<script>
function displaySelect(){
var selectMenu=document.testForm.class;
//폼 안 select 요소를 변수에 전달 var text=selectMenu.options[selectMenu.selectedIndex].innerText;
//select 집합 중 선택된 인덱스를 변수에 전달 alert('['+text+']를 선택했습니다.');
}
</script>
</head>
<body>
<form action="" name="testForm">
<p>
<label>학과</label>
<select name="class" onchange="displaySelect();">
<!--onchange: select 버튼 클릭했을 때-->
<option value="archi">건축공학과</option>
<option value="mechanic">기계공학과</option>
<option value="indust">산업공학과</option>
<option value="elec">전자공학과</option>
<option value="computer">컴퓨터공학과</option>
<option value="chemical">화학공학과</option>
</select>
</p>
</form>
</body>
|
cs |
jQuery
: 자바스크립트 라이브러리 (자바스크립트 기반 언어)
=> DOM용 / DOM 쉽게 제어하지만 속도가 느림
=> for, if문 등은 수행 못하므로 자바스크립트와 혼용 사용
다운로드 방식
1. CDN 링크 복사 (인터넷 필수)
2. 파일 다운
- 기본 문법
$('선택자').메서드();
$ => jQuery 식별자
선택자에 따옴표 필수 => 안 하면 변수로 인식
ex.
$(p) => p변수
$('p') => p 태그
- 문제 : h1 클릭 시 문구/색 변화
<script>
window.onload=function(){
var h=document.querySelectorAll('h1');
for(var i=0;i<h.length;i++){
h[i].onclick=function(){ //주체 표기 실수 하지 말기 ex. h
this.style.color='red'; //주체 표기 실수 하지 말기 ex. h
this.innerText='코로나 박멸';
}
}
}
</script>
</head>
<body>
<h1>서울 코로나 바이러스</h1>
<h1>경기 코로나 바이러스</h1>
</body>
===>jQuery로 제어
<script src="js/jquery-3.6.0.min.js"></script> <!--라이브러리-->
<script>
//$(document).ready(function(){ //window.onload=function(){
$(function(){ //(document).ready는 생략 가능
//body 안 문서가 준비(읽어오기)되면 function 수행
$('h1').click(function(){
$(this).css('color','red').html('코로나 퇴치 완료');
//선택한 this의 css 속성 수정 & innerHTML 수정
//this: click한 주체, 자신 / css, html : 메소드 / 하나의 선택자에 여러 메소드 => 메소드 체인
});
});
</script>
</head>
<body>
<h1>서울 코로나 바이러스</h1>
<h1>경기 코로나 바이러스</h1>
</body>
jQuery - 선택자
$('*') => 전체 선택자
$('p') => 태그 선택자 (p)
$('#') => id 선택자
$('.') => class 선택자
<script>
$(function(){
$('*').css('color','violet'); //전체 선택자
$('p').css('backgroundColor','beige'); //태그 선택자
$('#target').css('border','1px solid red'); //id 선택자
$('.item').css('color','blue'); //class 선택자
$('.select').css('background','#f3f3f3');
$('.item.select').css('color','violet'); //class가 item이며 select일 때
$('p.item').css('color','green'); //태그가 p이며 클래스가 item일 때
$('h1,p').css('color','brown'); //h1 태그, p 태그
});
</script>
</head>
<body>
<h1>제이쿼리 시작</h1>
<p class="item">자바스크립트로 만들어진 라이브러리</p>
<ul>
<li>선택자</li>
<li>메소드</li>
<li class="item">이벤트</li>
<li class="selects">애니메이션</li>
<li>플러그인</li> <!--지양-->
<li>응용기술</li>
</ul>
<p id="target">홈페이지 제작 중..</p>
<p class="item select">html, css, javscript</p>
</body>
- 자식 선택자, 후손 선택자
<script src="js/jquery-3.6.0.min.js"></script> <!--라이브러리-->
<script>
$(function(){
$(function(){
$('#box1>p').css('color','red'); //자식
});
$(function(){
$('#box2>p').css('backgroundColor','beige');
});
$(function(){
$('#box2 p').css('color','blue'); //후손
});
});
</script>
</head>
<body>
<div id="box1">
<h2>나는 제목</h2>
<p>자식 선택자 공부</p>
</div>
<div id="box2">
<h2>나는 제목2</h2>
<p>후손 선택자 공부</p>
<div>
<p>나는 손자</p>
</div>
</div>
</body>
- 필터 선택자
: 선택지들 필터링하는 선택자
<script src="js/jquery-3.6.0.min.js"></script> <!--라이브러리-->
<script>
$(function(){
$('input[type="text"]').css('background','yellow');
});
</script>
</head>
<body>
<div id="box1">
<h2>나는 제목</h2>
<p>자식 선택자 공부</p>
</div>
<div id="box2">
<h2>나는 제목2</h2>
<p>후손 선택자 공부</p>
<div>
<p>나는 손자</p>
</div>
</div>
<input type="text"><br>
<input type="password"><br>
<input type="text"><br>
<input type="text"><br>
</body>
- :selected
select문에서 선택된 option
<script>
$(function(){
setTimeout(function(){ //제이쿼리 X
var choice=$('select>option:selected').val(); //value=>val()
alert("오늘 저녁은 "+choice+"이시군요");
},3000);
});
</script>
</head>
<body>
<div id="box1">
<h2>나는 제목</h2>
<p>자식 선택자 공부</p>
</div>
<div id="box2">
<h2>나는 제목2</h2>
<p>후손 선택자 공부</p>
<div>
<p>나는 손자</p>
</div>
</div>
<select name="" id="">
<option value="김치찌개">김치찌개</option>
<option value="부대찌개">부대찌개</option>
<option value="비빔밥">비빔밥</option>
<option value="칼국수">칼국수</option>
<option value="냉면">냉면</option>
</select>
</body>
- 위치 필터 선택자
:even 짝수
:odd 홀수
:first 첫번째 요소
:last 마지막 요소
<script>
$(function(){
$('li:even').css('background','green');
$('li:odd').css('background','beige');
$('li:first').css('background','#f3f3f3');
$('li:last').css('background','#beige');
$('tr:odd').css('background','#cef279'); //0부터 시작
$('tr:even').css('background','#ffb2d9'); //0부터 시작
$('tr:first').css('background','#000').css('color','#fff'); //짝수 선택자 코드 뒤에 배치해야 함 (선택 범위 겹치므로)
$('tr:last').css('background','#ccc');
});
</script>
</script>
</head>
<body>
<h2>동물의 세계</h2>
<ul>
<li>사자</li>
<li>코끼리</li>
<li>표범</li>
<li>거북이</li>
<li>기린</li>
<li>악어</li>
</ul>
</body>
- 함수 필터 선택자
:eq(인덱스) => 전달받은 인덱스에 해당하는 요소 선택 (-1: 마지막, 0: 처음)
:lt(인덱스) => 해당 인덱스 미만의 요소 선택 (less than)
:gt(인덱스) => 해당 인덱스 초과하는 요소 선택 (greater than)
:contains(문자열) => 해당 문자열 포함하는 요소 선택
:nth-child => 1부터 숫자 시작 (cf. :odd, :even => 0부터 숫자 시작)
<script src="js/jquery-3.6.0.min.js"></script> <!--라이브러리-->
<script>
$(function(){
$('li:eq(-1)').css('color','red'); //맨 뒤
$('li:lt(3)').css('color','blue'); //인덱스0~2
$('li:gt(3)').css('background','yellow'); //인덱스4~
$('li:contains(표범)').css('background','yellowgreen');
$('li:nth-child(2n)').css('color','violet'); // 2,4,6 (0은 없는 숫자, 2부터 시작)
$('li:nth-child(2n+1)').css('color','blue'); // 1,3,5
$('tr:eq(0)').css({ //맨 위
color:'#fff',
background:'#ccc'
});
$('td:nth-child(3n+1)').css('background','#cef279'); //1
$('td:nth-child(3n+2)').css('background','#ffb2d9'); //2
$('td:nth-child(3n)').css('background','#b2ebf4'); //3
});
</script>
</head>
<body>
<h2>동물의 세계</h2>
<ul>
<li>사자</li>
<li>코끼리</li>
<li>표범</li>
<li>거북이</li>
<li>기린</li>
<li>악어</li>
</ul>
<h2>혈액형 조사</h2>
<table>
<tr><th>이름</th><th>혈액형</th><th>지역</th></tr>
<tr><td>김철수</td><td>O형</td><td>서울시 용산구</td></tr>
<tr><td>이영희</td><td>A형</td><td>서울시 중구</td></tr>
<tr><td>홍길동</td><td>AB형</td><td>서울시 영등포구</td></tr>
<tr><td>이영표</td><td>B형</td><td>서울시 강남구</td></tr>
<tr><td>박찬호</td><td>A형</td><td>서울시 서초구</td></tr>
<tr><td>손흥민</td><td>O형</td><td>서울시 송파구</td></tr>
</table>
</body>
jQuery - 메소드
- 메소드 체인
: 하나의 선택자에 메소드 여러개 연결
$(this).css('color','red').css('background','yellow').css('border','1px solid blue');
=> 같은 메소드는 객체로 묶을 수 있음
=>
$('h1').hover(function(){
$(this).css({
color : 'red',
background : 'yellow',
border : '1px solid red'
});
<script src="js/jquery-3.6.0.min.js"></script> <!--라이브러리-->
<script>
$(function(){
var ballpen={
제조사:'모나미',
가격:500,
볼크기:'0.5m'
};
alert(ballpen.제조사);
$('h1').css({
color:'red',
background:'yellow',
border:'1px solid red'
});
});
</script>
</head>
<body>
<h1>자바스크립트</h1>
</body>
- 이벤트성 메소드
- hover
$('선택자').hover(함수1,함수2);
//함수1: 마우스 올릴 때 / 함수2: 마우스 떠날 때
1.
<script src="js/jquery-3.6.0.min.js"></script> <!--라이브러리-->
<script>
$(function(){
$('p').hover(function(){
$(this).css('color','red');
},function(){
$(this).css('color','black');
});
});
</script>
</head>
<body>
<h1>제이쿼리 시작</h1>
<p class="item">자바스크립트로 만들어진 라이브러리</p>
<ul>
<li>선택자</li>
<li>메소드</li>
<li class="item">이벤트</li>
<li class="selects">애니메이션</li>
<li>플러그인</li> <!--지양-->
<li>응용기술</li>
</ul>
<p id="target">홈페이지 제작 중..</p>
<p class="item select">html, css, javscript</p>
</body>
2.
<script src="js/jquery-3.6.0.min.js"></script> <!--라이브러리-->
<script>
$(function(){
$('h1').hover(function(){
$(this).css({
color : 'red',
background : 'yellow',
border : '1px solid red'
});
},function(){
$(this).css('color','black').css('background','white').css('border','none');
});
});
</script>
</head>
<body>
<h1>html 제작</h1>
<h1>css 스타일</h1>
<h1>javascript</h1>
</body>