하이브리드 특강 2일차 오전: 자바스크립트

웹에서 가져온 데이터를 뿌려줄때 자바스크립트를 이용해 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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>생성자 함수를 이용한 객체 생성</title>
<script type="text/javascript">
// 생성자 함수 지정
function Student(name, korean, math, english, science) {
this.이름 = name;
this.국어 = korean;
this.영어 = english;
this.수학 = math;
this.과학 = science;
 
// 메서드
this.getSum = function(){
return this.국어 + this.수학+ this.영어 + this.과학
};
this.getAverage = function(){
return this.getSum() / 4;
};
this.toString = function(){
return this.이름 + ', ' + this.getSum() + ',' + this.getAverage();
};
}
 
// 생성자 함수를 이용한 객체 생성
var student = new Student('홍길동'100909897);
document.write(student.toString());
</script>
</head>
<body>
</body>
</html>
cs

라이브러리를 만들어서 이용할떄 위와 같이 사용 

위와 같은 형태로 자바스크립트 상속도 가능(이번 수업에서는 배우지 않는다)

애플릿 -> 플래쉬 -> 자바스크립트

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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DOM</title>
<script type="text/javascript">
window.onload = function() {
//변수 선언
var output = '';
output += '<ul>';
output += ' <li>JavaScript</li>';
output += ' <li>JQuery</li>';
output += ' <li>Ajax</li>';
output += '</ul>'
 
//innerHTML 속성에 문자열을 할당
document.body.innerHTML = output;
};
</script>
</head>
<body>
 
</body>
</html>
cs

요소선택 

window.onload : HTML 문서가 완전히 업로드 된후 자바 스크립트 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DOM</title>
<script type="text/javascript">
window.onload = function () {
var spans = document.getElementsByTagName('span');
spans[0].innerHTML = '호수';
spans[1].innerHTML = '들판';
 
};
</script>
</head>
<body>
    <span>하늘</span>
    <span>하늘</span>
    
</body>
</html>
cs

For 문 이용해서 요소 선택후 HTML 내용 바꾸기

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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DOM</title>
<script type="text/javascript">
window.onload = function () {
var spans = document.getElementsByTagName('span');
 
for (var i = 0; i<spans.length; i++){
if(i%2==1){
spans[i].innerHTML = '우주';
else {
spans[i].innerHTML = '지하';
}
}
};
</script>
</head>
<body>
    <span>하늘</span>
    <span>하늘</span>
    <span>하늘</span>    
</body>
</html>
cs

ID를 이용한 접근

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DOM</title>
<script type="text/javascript">
window.onloadfunction(){
//문서 객체를 가져옴
var header1 = document.getElementById('header_1');
var header2 = document.getElementById('header_2');
 
header1.innerHTML = '하하';
header2.innerHTML = '호호';
};
</script>
</head>
<body>
    <h1 id="header_1">Header</h1>
    <h1 id="header_2">Header</h1>
</body>
</html>


태그에 접근하는 많은 방법중 가장 빈번한 방법은 태그와 아이디 

Event - inline 이벤트 처리

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>event - 인라인 이벤트 처리</title>
</head>
<body>    
    <input type="button" value="이동" onclick="location.href='http://www.naver.com'">
    
    <!-- 한라인에 여러 이벤트 삽입 끝을 제외하고는 ; 삽입  -->
    <input type="button" value="확인" onclick="alert('클릭');alert('클릭')">    
</body>
</html>
cs

이벤트 연결 처리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>event - script에서 이벤트 처리</title>
<script type="text/javascript">
window.onload = function(){
var header = document.getElementById('header');
 
//이벤트가 발생할 때 호출되는 함수 
function whenClick(){
alert('Click');
}
 
//이벤트 연결 
header.onclick = whenClick;
};
</script>
</head>
<body>
    <div id="header">클릭</div>    
</body>
</html>
cs

다른 이벤트 연결 처리 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>event - script에서 이벤트 처리</title>
<script type="text/javascript">
window.onload = function(){
var header = document.getElementById('header'); 
 
//이벤트 연결 
header.onclick = function whenClick(){
alert('클릭');
}
};
</script>
</head>
<body>
    <div id="header">클릭</div>    
</body>
</html>
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>기본 이벤트</title>
<script type="text/javascript">
    window.onload = function(){
        var aa = document.getElementById('aa');
        //이벤트 연결 
        aa.onclick=function(){
            alert('이벤트 연결');
            
            //기본 이벤트 제거 
            return false;
        };
        
        var myForm = document.getElementById('myForm');
        
        //이벤트 연결
        myForm.onsubmit = function(){
            alert('이벤트 연결');
            
            // 기본 이벤트 제거
            return false;
        };
    };
</script>
</head>
<body>
    <a id="aa" href="http://www.naver.com">이동</a>    
    <br><br>
    <form id="myForm" action="a.jsp" method="get">
        <input type="text" name="name"><br>
        <input type="submit" value="전송">
        
    </form>
</body>
</html>



이벤트 버블링 (모든 브라우저에서 지원하므로 표준)

자시쪽에서 부모쪽으로 이벤트 전파 

이벤트 캡쳐링(IE는 지원하지 않는다)

부모쪽에서 자식쪽으로 이벤트 전파 

전달 막는것 예제

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
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>이벤트 전파</title>
<script type="text/javascript">
    window.onload = function(){
        //문서 객체에 접근
        
        var header = document.getElementById('header');
        header.onclick = function(){
            alert('header');
            //this : 이벤트가 발생한 객체
            this.style.background='pink';            
        };
        
        var paragraph = document.getElementById('paragraph');
        paragraph.onclick = function(e){
            alert('paragraph');
            this.style.background='yellow';
            /*
                인터넷 익스플로러 8이하의 버전은 이벤트가 발생할 때 이벤트 객체를
                window.event 속성으로 전달하지만, 다른 브라우저는 핸들러의 
                매개 변수로 전달
                인터넷 익스플로러 9이상에서는 매개변수, window.event 둘 다 지원                
            */
            
            var event = e || window.event;
            
            //이벤트 전달을 제거            
            event.cancelBubble = true;
            if(event.stopPropagation){
                event.stopPropagation()
            }            
                        
        };
    };
</script>
</head>
<body>
    <h1 id="header">header
        <p id="paragraph">Paragraph</p>
    </h1>
    
</body>
</html>
cs

자바스크립트 마무리



+ Recent posts