출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

data.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<table border="1">
		<tr>
			<td>우유</td>
			<td>2000</td>			
		</tr>
		<tr>
			<td>홍차</td>
			<td>5000</td>			
		</tr>
		<tr>
			<td>커피</td>
			<td>5000</td>			
		</tr>
		
		
	</table>

</body>
</html>

ajax-1.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<!-- 제이쿼리 DSK로드 -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>
	$(document).ready(function(){
		//alert('onload');
		$.ajax('data.html',{
			success : function(data){
				$('body').append(data);	
			}
			
		});
		
	});

</script>
</head>
<body>
	<h1>가격표</h1>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<!-- 제이쿼리 DSK로드 -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>
	$(document).ready(function() {
		$.ajax({
			url : 'data.html',
			success : function(data) {
				$('body').append(data);
			}
		});
	});
</script>
</head>
<body>
	<h1>가격표</h1>
</body>
</html>

 

parameter.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<div> 이름 : ${param.pname} </div>
<div> 가격 : ${param.price} </div>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<!-- 제이쿼리 DSK로드 -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>
	$(document).ready(function() {	
		$.ajax({
			url : 'parameter.jsp',
			type : 'GET', // get post put delete
			data : {
				pname : '우유',
				price : 2000,
				
			},
			success : function(data){
				$('body').append(data);
			}
			
		});
	});
</script>
</head>
<body>
	<h1>가격표</h1>
</body>
</html>

 

위에것을 동적으로 만들기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<!-- 제이쿼리 DSK로드 -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>

$(document).ready(function(){
    //alert('onload');
    $('input:button').click(function(){
  	  $.ajax({
  	    	url : 'parameter.jsp',
  	    	type : 'get', // http method get, post, put, delete
  	    	data : {	
  	    		pname: $('#pname').val(),
  	    		price: $('#price').val()
  	    	},
  	    	success : function(data) {
  				$('body').append(data);
  			}
  	     }); 
    });     
  
 });


</script>
</head>
<body>
	<h3>제품등록</h3>
	이름 <input type="text" id="pname"><br>
	가격 <input type="number" id="price"><br><br>
	<input type="button" value="등록"><br>
	<hr>
	<br>
	<h1> 가격표</h1>
</body>
</html>

 

idcheck.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!-- 공백제거 -->
${param.uid eq 'cool'? 'N' : 'Y'}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<!-- Jquery SDK 로드 -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

<script>

	$(document).ready(function(){
		$('#uid').focusin(function(){
			//alert('focusin');
			//$('#msg').html('사용할수 있는 아이디 입니다.');
			$('#msg').addClass('display_none');
			$('#msg').removeClass('color_blue');
			$('#msg').removeClass('color_red');
			
		});
		
	//$('#idChkBtn').click(function(){
		
		$('#uid').focusout(function(){
			$.ajax({
				url : 'idcheck.jsp',
				type : 'post',
				data : {
					uid: $('#uid').val()
				}, 
				beforeSend : function(){
					console.log('beforeSend');
					$('#loaddingImg').removeClass('display_none');
				},
				success : function(data){
					
					//alert(data);
					if(data == 'Y') {						
						$('#msg').html('사용할수 있는 아이디 입니다.');
						$('#msg').removeClass('display_none');
						$('#msg').addClass('color_blue');
					} else {
						$('#msg').html('사용할수 없는 아이디 입니다.');
						$('#msg').removeClass('display_none');
						$('#msg').addClass('color_red');
					}
					
					
				},
				error : function(request, status, error){
					console.log('request', request);
					console.log('status', status);
					console.log('error', error);
				},
				complete : function(){
					
				setTimeout(function(){
						$('#loaddingImg').addClass('display_none');
					}, 3000);
					
				}
			});
			
		});
		
	});

</script>

<style>
	
	.display_none {
		display: none;
	}
	
	.display_block {
		display: block;
	}
	
	.color_red {
		color : red;
	}
	.color_blue {
		color: blue;
	}
	
	/* #msg {
		display: none;
	} */
	 
</style>
</head>
<body>

	id <input type="text" id="uid"> 
	<input type="button" id="idChkBtn" value="아이디 체크">
	<div id="msg"  class="display_none"></div><br>
	<img id="loaddingImg" class="display_none" alt="loadding" src="loading.gif">
 
</body>
</html>

 

serialize / serializeArray

- 입력받는 값이 많을수록 편리하며 id가 아닌 name으로 캐스팅 한다.

 

- parameter.jsp는 위에 있음

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<!-- 제이쿼리 DSK로드 -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>

$(document).ready(function(){
	
		     
	     $('#myform').submit(function(event){
	    	 
	    	 console.log($(this).serialize()); // input 파라미터 쿼리스트림을 문자열로 처리
	    	 console.log($(this).serializeArray());
	    	 
	    	 //입력받는게 많을수록 더 편리하다. id가아닌 name으로 캐스팅한다.
	    	 $.ajax({
	    		 url : 'parameter.jsp',
	    		 data : $(this).serialize(),
                 // data : data : $(this).serializeArray()로 받아도 괜찮음
	    		 success : function(data){
	    			  $('body').append(data)
	    			 
	    		 }
	    	
	    	 });
	 		return false;
	     });
  
 });


</script>
</head>
<body>
	<h3>제품등록</h3>
	<form id="myform">
	이름 <input type="text" id="pname" name="pname"><br>
	가격 <input type="number" id="price" name="price"><br><br>
	<input type="submit" value="등록"><br>
	</form>
	<hr>
	<br>
	<h1> 가격표</h1>
	
</body>
</html>

 

 

 

http://coderap.tistory.com/539

<input type="text" id="pnum" name="pnum" required
onKeyup="this.value=this.value.replace(/[^0-9]/g,'');" />

숫자 이외에 다른 키 입력이 되지 않는다.

 

마우스이벤트

'

 

키보드이벤트

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>제이쿼리 키보드 이벤트</title>
    <!--제이쿼리 라이브러리 로드-->
    <script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>

    <style>
    
        .rudrh{
            color:red;
        }
    </style>

    <script>
    
        $('document').ready(function(){
            
            $('textarea').keyup(function(){
                
                //현재 입력 문자열의 길이
                var inputStrLen = $(this).val().length;                
                
                
                if(inputStrLen>50){
                    $('span').addClass('rudrh');
                    alert('50자까지만 입력가능!');                    
                    var userInput = $(this).val().substr(0,50);
                    $(this).val(userInput);
                    userInput = 50;                    
                }else{
                    $('span').removeClass('rudrh');
                }
                
                $('span').text(inputStrLen);
                
            })        
                        
        });
        
    </script>
    
</head>
    
    

<body>
    
    <textarea rows="10" cols="50"></textarea>
    <h1><span>0</span>/50</h1>
    
</body>
</html>

 

 

윈도우이벤트

윈도 이벤트는 윈도 객체만 사용할 수 있는 이벤트가 아니라

window 객체와 document 객체 이외에 img 태그 등이 사용할 수 있는 이벤트

 

 

입력 양식 이벤트

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>체크박스</title>

    <!--jQuery 라이브러리 로드-->
    <script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
    
        <script>
        $('document').ready(function(){
           
            // 체크박스 이벤트 처리 : change() 메소드 사용
            $('#check-all').change(function(){
                if(this.checked){
                    $('#check-item').children().prop('checked',true);
                }else {
                    $('#check-item').children().prop('checked',false);
                }
            });
        
            
        });
    </script>
    
</head>

<body>
    
    개인정보활용 동의 <input type="checkbox" id="agree"><br>.
    <input type="checkbox" id="check-all"><label> 전체선택</label>
    <br><br>
    <div id="check-item">
        <input type="checkbox"> 게시물 1 <br>
        <input type="checkbox"> 게시물 2 <br>
        <input type="checkbox"> 게시물 3 <br>
        <input type="checkbox"> 게시물 4 <br>
        <input type="checkbox"> 게시물 5 <br>        
    </div>
</body>

</html>

이벤트를 연결할 때 on ( ) 메서드를 사용

 

 

on( ) 메서드를 사용하지 않은 기본 이벤트 연결

    <script>
        
        $('document').ready(function(){
        
        
           $('h1').click(function(){
               var length = $('h1').length;
               var html = $(this).html();
               
               $('#wrap').append('<h1>'+length+' - '+html+'</h1>');
           });
            
            
        });
    </script>

</head>

<body>


    <div id="wrap">
        <h1> HEADER 1 </h1>
    </div>

 

 

 

- delegate 방식을 사용하는 on( ) 메서드

- 이벤트 리스너에서 this 키워드가 #wrap 태그가 아니라 h1 태그라는 것을 주의

        
        $('document').ready(function(){

            // 범위를 지정하고 해당 범위안의 엘리먼트를 지정해서 이벤트 적용
            // 해당 범위에 특정 엘리먼트가 추가되어도 이벤트를 적용.
           $('#wrap').on('click','h1',function(){
               
               var length = $('h1').length;
               var html = $(this).html();
               
               $('#wrap').append('<h1>'+length+' - '+html+'</h1>');
               
               
           });
            
        });           

 

                // 제거
                $('#wrap').off('click', 'h1');

1) $(this).html($(this).html()+'+');
2) $(this).html(function(index, html){return html+'+'});

1)

    <script>

        $('documnet').ready(function() {

            // 이벤트 연결
            $('h1').on('click',function(){
                
                // 클릭이 발생하면 이벤트가 발생한 객체의 문자열을 변경
                // this는 이벤트가 발생한 객체
                $(this).html($(this).html()+'+');
            });

        });

    </script>

</head>

<body>


    <h1> CLICK1 </h1>

</body>

2)

        $('documnet').ready(function() {
        
            // 이벤트 연결
            $('h1').on('click',function(){
                 $(this).html(function(index, html){                     
                        return html+'+'; 
                 });
            });
        });

둘다 실행 결과는 같다 // 클릭할때 마다 +가 생김

 

 

 

이벤트 연결 

1) 기본


- on ( ) 메서드의 매개변수에 객체를 넣어줌
- 속성 이름과 속성 값에 이벤트 이름과 이벤트 리스너를 넣으면 이벤트를 쉽게 연결

 

        $('documnet').ready(function() {
            
            // 여러개의 이벤트를 등록할 때 객체 형식으로 정의
            $('h1').on({
                mouseenter:function(){
                    $(this).addClass('h1over'); // style에 .h1over만들어놓음
                },
                mouseleave:function(){
                    $(this).removeClass('h1over');
                },
                click : function(){
                    console.log(event);
                    $(this).html(function(index, html){
                        return html + '*'
                    })
                }
            })
            
            
        });

        $('documnet').ready(function(){
            $('h2').hover(function(){
                $(this).addClass('over');       
            }, function(){
                $(this).removeClass('over');
            })
            
        });

 

이벤트 연결 제거

 

- off ( ) 메서드는 다음 형태로 사용
- 1번 형태는 해당 문서 객체와 관련된 모든 이벤트를 제거
- 2번 형태는 해당 문서 객체의 특정 이벤트와 관련된 모든 이벤트를 제거
- 3번 형태는 특정 이벤트 리스너를 제거

        $('documnet').ready(function() {

            // 여러개의 이벤트를 등록할 때 객체 형식으로 정의
            $('h1').on({
                mouseenter: function() {
                    $(this).addClass('over'); // style에 .h1over만들어놓음
                },
                mouseleave: function() {
                    $(this).removeClass('over');
                },
                click: function() {
                    console.log(event);
                    $(this).html(function(index, html) {
                        return html + '*'
                    });
                    $(this).off('click');
                }
            })
        });


        $('documnet').ready(function() {
            $('h2').hover(function() {
                $(this).addClass('over');
            }, function() {
                $(this).removeClass('over');
                $('h2').off();
            })

        });

처음 한번만 실행되고 두번째부터는 실행되지 않는다.

1) hover는 테두리가 처음 한번만 생기고 다음엔 안생김

2) 눌러도 별표 한개이상 안생김

 

 

매개변수 context

- 특정 부분에 선택자를 적용하고 싶을 때 사용하는 것이 매개변수 context

- 매개변수 context는 selector가 적용하는 범위를 한정

    <script>
        $('documnet').ready(function() {

            $('div').click(function(){

                var header = $('h1', this).text();
                var paragraph = $('p', this).text();

                alert(header + ' : ' + paragraph);


            });
        });
    </script>

</head>

<body>

    <div>
        <h1> header - 1 </h1>
        <p> paragraph - 1 </p>
    </div>
    <div>
        <h1> header - 2 </h1>
        <p> paragraph - 2 </p>
    </div>
    <div>
        <h1> header - 2 </h1>
        <p> paragraph - 2 </p>
    </div>
</body>

 

 

이벤트 강제발생

 

        $(document).ready(function() {

            $('h1').on({
                mouseenter: function() {
                    $(this).addClass('over');
                },
                mouseleave: function() {
                    $(this).removeClass('over');
                },
                click: function(event) {
                    console.log(event);
                    $(this).html(function(index, html) {
                        return html + '+';
                    });
                }
            });

            setInterval(function(){
            	// h1의 마지막에 click 이벤트 강제발생
                $('h1').last().trigger('click');
            }, 1000);           
        });

계속해서 +가 발생한다.

 

 

버블링 막기

 

자바스크립트의 버블링에 대해서 알기쉬운 티스토리

http://programmingsummaries.tistory.com/313

 

 

[JavaScript] JavaScript에서 이벤트 전파를 중단하는 네가지 방법

자바스크립트 이벤트 리스너에서 preventDefault() 와 stopPropagation()  그리고 return false 는 자바스크립트 프로그래밍을 할 때 이벤트 중단을 위해 자주 사용되는 코드들이다. 이벤트 중단 시에 사용되

programmingsummaries.tistory.com

 

 

1) 버블링을 막지 않으면 <a>태그부분을 눌러도 div부분의 이벤트(alert)가 같이 실행된 후 네이버로 이동한다.

    </script>
		$('div').click(function() {

                var header = $('h1', this).text();
                var paragraph = $('p', this).text();

                alert(header + ' : ' + paragraph);
            });


            $('a').click(function(event) {
                //event.preventDefault();
                //return false;
            });

        });

    </script>

</head>

<body>
    <div>
        <h1>Header 1</h1>
        <p>paragraph 1</p>

        <h3>
            <a href="http://www.naver.com">네이버</a>
        </h3>

    </div>

</body>

</html>

 

2) preventDefault ( ) 메서드로 a 태그의 기본 이벤트를 제거하면,

 a 태그의 네이버로 이동하는 이벤트는 작동하지 않아서 네이버로 가지지는 않지만,

여전히 div의 이벤트인 alert는 작동한다.

 

            $('a').click(function(event) {
                event.preventDefault();
                //return false;
            });

 

 

 

 

3) return false;를 해주면 <a>태그 네이버를 눌러도 아무런 일도 일어나지 않는다.

return false

stopPropagation ( ) 메서드와 preventDefault ( ) 메서드를 함께 사용하는 경우가 많으므로, 

jQuery는 간단하게 return false를 사용하면 이 두 가지를 함께 적용하는 것으로 인식

            $('a').click(function(event) {
                //event.preventDefault();
                return false;
            });

 

 

 

 

1) appendTo

 

문서 객체 생성 , 문서 객체 연결

    <script>
        $(document).ready(function() {

            $('input[type=button]').click(function(){
                
                
                $('<h1></h1>').html('<i>새로운 태그 추가</i>').appendTo('div');
                
            });
            
        });
    </script>
</head>

<body>

    <div></div>
    
    <input type="button" value="동적tag추가">

</body></html>

더보기

이런 경우(아래코드)에는 생성 시점이 달라서 글씨색이 변경되지 않고 그냥 나온다.

- 코드가 같은 {} 곳에 삽입되어있다면 버튼을 누르면 원래 글씨색은 검정에서 빨간색으로 바뀌고,

  새로운 태그 추가부터 블루 초록 빨강 이런식으로 나옴

 

    <script>
        $(document).ready(function() {

            $('input[type=button]').click(function() {

                $('<h1></h1>').html('<i>새로운 태그 추가</i>').appendTo('div');

                //            var h1='<h1>안<h1>';
                //            var h2='<h1>녕<h1>';
                //            var h3='<h1>하<h1>';
                //            var h4='<h1>세<h1>';
                //            var h5='<h1>요<h1>';
                //            
                //            $('div').append(h1, h2, h3, h4, h5);

            });

        });

        $(document).ready(function() {
            var colors = ['red', 'blue', 'green'];

            $('h1').css('color', function(index) {
                return colors[index];
            });
        });
        
    </script>

</head>

<body>

    <div>
        <h1>원래있던태그</h1>
    </div>

    <input type="button" value="동적tag추가">

</body></html>

 

 

 

텍스트 노드를 갖지 않는 문서 객체를 생성하는 방법

- img 태그를 생성할 때는 $ ( ) 메서드로 문서 객체를 생성하고 attr ( ) 메서드로 속성을 입력

 

        $(document).ready(function() {

        $('input[type=button]').click(function(){
        
        $('<img>').attr({
        src:'../tae6.jpg',
        height:100
        }).appendTo('div');

        });

        });

 

 

2) append

- append ( ) 메서드의 사용 형태

 

- 여러 개의 문서 객체를 한꺼번에 입력할 수 있음

        $('input[type=button]').click(function(){

            var h1='<h1>안<h1>';
            var h2='<h1>녕<h1>';
            var h3='<h1>하<h1>';
            var h4='<h1>세<h1>';
            var h5='<h1>요<h1>';
            
            $('div').append(h1, h2, h3, h4, h5);
        });

- 배열을 사용한 문서 객체 생성과 추가

    <script>
        $(document).ready(function() {

            $('input[type=button]').click(function() {

                var links = [
                    {name:'네이버', url:'http://www.naver.com'},
                    {name:'다음', url:'http://www.daum.net'},
                    {name:'구글', url:'http://www.google.com'},
                ];
                
                $('h1').append(function(index){
                    var item = links[index];
                    var output = '<a href="'+item.url+'">'+item.name+'</a>';
                    
                    return output;
                    
                });

            });

        });
    </script>

</head>

<body>

    <div>
        <h1> 네이버 </h1>
        <h1> 카카오 </h1>
        <h1> 페이스북 </h1>
    </div>

    <input type="button" value="동적tag추가">

</body></html>

 

3) 문서 객체 이동

    <script>
        $(document).ready(function(){
           
            setInterval(function(){
                // 첫번째 이미지를 마지막으로 보낸다.
                 $('img').first().appendTo('div');
            },2*1000);
            
            
            
        });
    </script>
    <style>
        
        div {
            width: 150px;
            height: 150px;
            
            border: 2px solid black;
            
            overflow: hidden;
        }
        img {
            width: 150px;
            height: 150px;
        }
    </style>

</head>

<body>

    <div>
        <img src="/image/tae1.jpg">
        <img src="/image/tae2.jpg">
        <img src="/image/tae3.png">
        <img src="/image/tae4.jpg">
        <img src="/image/tae5.jpg">
    </div>

</body></html>

 

 

1) 문서 객체의 내부 검사

    <script>
        $(document).ready(function() {
            //html( ) 메서드 - Getter
            console.log('div->', $('div').html());
            //text( ) 메서드 - Getter
            console.log('div->', $('div').text());
        });
    </script>

</head>

<body>

    <div>

        <h1> 네이버 </h1>
        <h1> 카카오 </h1>
        <h1> 페이스북 </h1>

    </div>

 

2) 문서 객체의 내부 추가

            $('button').first().click(function() {
                $('div>h1').html('<h4>html</h4>');
            });

            $('button').first().click(function() {
                $('div>h1').text('<h4>text</h4>');
            });

 

 

 

            $('button').first().click(function() {
                $('div>h1').html(function(index){
                    return '<h'+(index+2)+'>안녕!</h'+(index+2)+'>';            
                });

            $('button').first().click(function() {
                $('div>h1').text(function(index){
                    return '<h'+(index+2)+'>안녕!</h'+(index+2)+'>';            
                });              
            });

 

3) 문서 객체 제거

            $('button').first().click(function() {
                $('div').empty();
            });

            $('button').first().click(function() {
                $('div>h1:first').remove();
            });

addClass() removeClass() / c대문자

문서 객체에 클래스 속성 추가 / 제거

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jquery_DOM / 문서객체 컨트롤</title>


    <!--제이쿼리 라이브러리 로드-->
    <script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>

    <script>
        $(document).ready(function() {

            $('button').first().click(function() {

                $('h1').addClass('float_left');

            });
            $('button').last().click(function() {
                $('h1').removeClass('float_left');
            });



        });
    </script>
    <style>
        h1 {
            border: 5px solid #ddd;
        }

        .float_left {
            float: left;
            widows: 32%;
        }
    </style>
</head>

<body>

    <h1> 네이버 </h1>
    <h1> 카카오 </h1>
    <h1> 페이스북 </h1>

    <button>변경</button><button>초기화</button>
</body></html>

 

 

attr()

문서 객체의 클래스 속성 검사 및 추가 ( 반환 & 설정 / get & set )

 

        $(document).ready(function() {
            $('button').first().click(function() {                
            	$('img').attr('src', '../image/tae2.jpg')
            });
            $('button').last().click(function() {          
                $('img').attr('src', '../image/tae1.jpg')
            });
            
            // 속성값을 반환 : get > attr('속성이름)
            var img_path = $('img').attr('src');
            console.log('img_path >', img_path);
            
            // 속성값을 설정 : set > attr('속성이름', 속성값)
            $('img').attr('width', 300);
            
        });

 

        $(document).ready(function() {
            // 속성값을 설정 : set > attr('속성이름', 함수())
            // 함수의 반환값은 속성에 적용할 데이터를 반환
            $('img').attr('width', function(index) {
                return (index + 1) * 100;
            });

        });

 

 

        $(document).ready(function() {
            // 속성값을 설정 : set > attr({속성이름:속성값 , 속성이름:속성값...})
            $('img').attr({
               width : function(index){
                   return (index+1)*100;
               },
                height:100
                                
            });
            
        });

 

 

 

removeAttr()

 

        $(document).ready(function() {

            $('button').first().click(function() {
                $('img').removeAttr('height');
                

            });
            $('button').last().click(function() {
            
            });
        });

css()

문서 객체의 스타일 검사 및 추가

    <script>
        $(document).ready(function() {

            var colors= ['red', 'blue','green'];
            
            $('h1').css('color',function(index){
                return colors[index];    
            });
            
        });
    </script>
    <style>
        h1 {
            border: 5px solid #ddd;
        }

        .float_left {
            float: left;
            widows: 32%;
        }
    </style>
</head>

<body>    
    <h1> 네이버 </h1>
    <h1> 카카오 </h1>
    <h1> 페이스북 </h1>
</body></html>

 

html = 1 > 2 > 3이라면 

                $('body').html($('body').html()+html); 

 

1) 뒤에 차례로 붙이기

[ body ] +  1 2 3

 

                $('body').html(html+$('body').html());

2) 역순으로 넣기 (위에 생김)

3 2 1  + [ body ]

- $.parseXML( ) 메서드와 each( ) 메서드, find() 메서드

 

        $(document).ready(function() {
            
            // xml 문서 구조의 문자열 
            var xmlStr = '';
            xmlStr += '<links>';
            xmlStr += '     <link>';
            xmlStr += '         <name>네이버</name>';            
            xmlStr += '         <url>http://www.naver.com</url>';            
            xmlStr += '     </link>';
            xmlStr += '     <link>';
            xmlStr += '         <name>구글</name>';            
            xmlStr += '         <url>http://www.google.com</url>';            
            xmlStr += '     </link>';
            xmlStr += '     <link>';
            xmlStr += '         <name>다음</name>';            
            xmlStr += '         <url>http://www.daum.net</url>';            
            xmlStr += '     </link>';
            xmlStr += '</links>';
            
            // 문자열 > xml 문서 객체로 만듦
            var xmlDoc = $.parseXML(xmlStr);
            
            // xml문서 객체 > 제이쿼리 객체로 만듦 > find() 사용 가능
            $(xmlDoc).find('link').each(function(index){
                // <link></link>가 하나의 this가 된다.
                var name = $(this).find('name').text();
                var url = $(this).find('url').text();
                
                var html ='';
                html += '<div class="card">';
                html += '   <h2>'+name+'</h2>';
                html += '   <a href="'+url+'">방문하기</a>';
                html += '</div>';
                
                $('body').html(html+$('body').html());
            });
            
      
        });
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        div.card{
            border : 1px solid #aaa;
            width: 30%;
            float : left;
            margin: 5px;
        }
        
        
        div.card > h2 {
            background-color: palevioletred;            
            text-align: center;
        }
        
        div.card > a{
            display: block;
            text-align: center;
            height: 30px;
            line-height: 30px;
            text-decoration: none;
            color : black;
            background-color: pink;
        }
    </style>

기본 필터 메서드 filter(), filter(function(){})

    <script>
        $(document).ready(function() {

//            $('h3:even').css({
//                background: 'black',
//                color: 'orange'
//            });

            $('h3').filter(':even').css({
                background: 'black',
                color: 'orange'
            })

        });
    </script>


</head>

<body>

    <h3> header3-0 </h3>
    <h3> header3-1 </h3>
    <h3> header3-2 </h3>
    <h3> header3-3 </h3>
    <h3> header3-4 </h3>
    <h3> header3-5 </h3>
    <h3> header3-6 </h3>
    <h3> header3-7 </h3>


</body></html>

 

        $(document).ready(function() {

            $('h3').filter(':even').css({
                background: 'black',
                color: 'orange'
            })

            $('h3').filter(function(index) {
                return index % 3 == 0;
            }).css({
                background: 'black',
                color: 'red'
            });

        });

 

 

end()

	<script>
		$(document).ready(function() {

            //end (), filter를 이용한 선택의 한단계 위로 이동.
            $('h1').css('background-color','orange')
            .filter(':even').css('color','white')
            .end().filter(':odd').css('color','red');
            
        });
    </script>


</head>

<body>

    <h1> header1-0 </h1>
    <h1> header1-1 </h1>
    <h1> header1-2 </h1>
    <h1> header1-3 </h1>
    <h1> header1-4 </h1>
    <h1> header1-5 </h1>
    <h1> header1-6 </h1>
    <h1> header1-7 </h1>

 

특정 위치의 문서 객체 선택 eq(), first(), last()

 

        $(document).ready(function() {
            
            $('h1').eq(0).css('background','orange');
            $('h1').eq(-3).css('background','orange');
            $('h1').last().css('background','orange');

        });

 

add()

- add ( ) 메서드를 사용하면 현재 선택한 문서 객체의 범위를 확장할 수 있음

        $(document).ready(function() {

            $('h1').css('border','5px solid #333')
            .add('h3').css('color','blue');

        });

each$.each( ) 메서드의 콜백 함수

each() > 하나의 행을 다루는 핸들러 / 함수

        $(document).ready(function() {
            // 배열의 반복 처리를 위한 each 메소드
            // $.each(배열의 원본, callbck : 하나의 행을 처리하는 함수)
            
            // 배열 생성
            var links = [
                {name:'네이버', url:'http://www.naver.com'},
                {name:'다음', url:'http://www.daum.net'},
                {name:'구글', url:'http://www.google.com'},
            ];
            
            var output='';
            
            $.each(links, function(index,item){
                console.log(index, item);
                
                output += '<h1><a href="'+item.url+'">'+item.name+'</a></h1>';
            })     
                document.body.innerHTML +=output;
           
            
        });

 

addclass() 메서드

 

        $(document).ready(function() {
            $('h1').addClass('title');

            $('h1').each(function(index, item) {
                if (index % 2 == 0) {
                    $(item).css('color', 'red');
                }
            });

        });
    </script>
    <style>
        .title {
            background-color: beige;
            font-style: italic;
        }
    </style>
</head>

<body>

    <h1> h1 - 1 </h1>
    <h1> h1 - 2 </h1>
    <h1> h1 - 3 </h1>
    <h1> h1 - 4 </h1>
    <h1> h1 - 5 </h1>

        $(document).ready(function() {
//            $('h1').addClass('title');

            $('h1').each(function(index, item) {
                if (index % 2 == 0) {
                    /*$(item).css('color', 'red');*/
                    $(item).addClass('title')
                }
            });

        });
    </script>
    <style>
        .title {
            background-color: beige;
            font-style: italic;
        }
    </style>
</head>

<body>

    <h1> h1 - 1 </h1>
    <h1> h1 - 2 </h1>
    <h1> h1 - 3 </h1>
    <h1> h1 - 4 </h1>
    <h1> h1 - 5 </h1>

minified

 

jQuery Core – All Versions | jQuery CDN

jQuery Core – All Versions jQuery Core & Migrate - Git Builds UNSTABLE, NOT FOR PRODUCTION jQuery Core - All 3.x Versions jQuery Core 3.5.1 - uncompressed, minified, slim, slim minified jQuery Core 3.5.0 - uncompressed, minified, slim, slim minified jQue

code.jquery.com

 

 

***

            $('body').html('abc') 
            // abc만 출력됨(덮어쓰기)
            
            $('body').html(
                $('body').html()+output
            );            
            //document.body.innerHTML +=output;와 같다
           

 

 

 

$(document).ready( )

- jQuery를 사용한 모든 웹 페이지는 다음 코드로 시작

 

$(document).ready( )

- 이벤트 연결

 

        // 제이쿼리 객체를 만들고 객체의 메소드를 사용하는 형태
        // jquery(자바스크립트 객체 또는 선택자) : jquery 객체 생성
        $(document).ready(function(){
            alert('1');
        });
        
        $(document).ready(function(){
            alert('2');
        });
        
        $(document).ready(function(){
            alert('3');
        });
        

 

 

기본 선택자

- jQuery 메서드의 가장 기본적인 형태
- 선택자는 jQuery에서 가장 중요한 역할

 

    <script>
        //선택자로 제이쿼리 객체 생성 : $('선택자')
        $(document).ready(function(){
            console.log('onload=ready()')
            $('*').css('color','red');            
        });
        
                        
    </script>
</head>

<body>
    
    <h1>jquery test</h1>
    <p>제이쿼리 테스트</p>   
    
    
    
    
</body>

</html>

 

 

속성 선택자

		$(document).ready(function(){
            // 속성타입으로 선택
            $('input[type=text]').css('padding',10);
            $('input:text').css('color','pink');
            
            $('input:button').css('background-color', 'black');
        });
        
        //
        
    <input type="text"><br><br>
    <input type="button" value="버튼"><br>

 

필터 선택자

입력 양식 필터 선택자 - 필터 선택자는 기본 선택자 뒤에 사용

<script>
        $(document).ready(function() {
            // select에서 선택한 항목
            var value = $('select>option:selected').val(); // get 기능
            console.log(value);

            setTimeout(function() {
                var value = $('select>option:selected').val();
                console.log(value);
            }, 3 * 1000)
        });
    </script>
</head>

<body>

    <select>
        <option>2021</option>
        <option>2020</option>
    </select>

 

위치 필터 선택자

 <script>
        $(document).ready(function() {
            $('table tr:odd').css('background','pink');
            $('table tr:even').css('background','black');
            
            $('table tr:first').css('background','blue');
            $('table tr:last').css('background','green');            
        });
    </script>
</head>

<body>

    <table border="1" style="width: 400px">
        <tr>
            <td>1</td>
            <td>1</td>
        </tr>
        <tr>
            <td>2</td>
            <td>2</td>
        </tr>
        <tr>
            <td>3</td>
            <td>3</td>
        </tr>
        <tr>
            <td>4</td>
            <td>4</td>
        </tr>
        <tr>
            <td>5</td>
            <td>5</td>
        </tr>
        <tr>
            <td>6</td>
            <td>6</td>
        </tr>
        <tr>
            <td>7</td>
            <td>7</td>
        </tr>
        <tr>
            <td>8</td>
            <td>8</td>
        </tr>
        

    </table>

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Javascript Window Object</title>

    <script>

        window.onload = function() {
            
            // 삭제버튼 : 이벤트 설정
            document.querySelector('input[type=submit]').onclick = function(){
               
                alert('h1');
                
                // 삭제 대상 
                var remove_h1 = document.getElementById('header-1');
                
                // 삭제 대상을 포함하는 문서객체
                var parent = document.body;
                
                parent.removeChild(remove_h1);
                
                
            };
        };
    </script>


</head>

<body>

    <div id="header-1">1</div>
    <div id="header-2">2</div>

    <br>
    
    <input type="submit" value="H1-0 삭제">



</body></html>

문제발생, h1을 누르면 div영역도 같이 눌려진다.

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>이벤트 전달</title>
    
    <style>
    
        div{
            height: 300px;
            background-color: black;
        }
        
        h1{
            background-color: pink;
        }
    </style>
    
    <script>
    
        window.onload = function(){
            
            var div = document.querySelector('div');
            var h1 = document.querySelector('h1');
            
            div.onclick = function(){
                console.log('div 영역에 클릭이벤트 발생!');
            }
            h1.onclick = function(){
                console.log('h1 영역에 클릭이벤트 발생!');
            }
            
            
        };
    </script>
</head>

<body>
    
    <div>
    
        <h1> 클릭하세요 :) </h1>
    </div>
</body>
</html>

 

 

 

이벤트 객체의 stopPropagation() 메서드 사용!

익스플로러는 cancelBubble 속성을 true로 변경하는데 잘안쓰니까 패스..

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>이벤트 전달</title>
    
    <style>
    
        div{
            height: 300px;
            background-color: black;
        }
        
        h1{
            background-color: pink;
        }
    </style>
    
    <script>
    
        window.onload = function(){
            
            var div = document.querySelector('div');
            var h1 = document.querySelector('h1');
            
            div.onclick = function(){
                console.log('div 영역에 클릭이벤트 발생!');
            }
            h1.onclick = function(){
                console.log('h1 영역에 클릭이벤트 발생!');
            }
            
            h1.onclick = function(e){
                
                var event = e || window.event;
                console.log('h1 영역에 클릭이벤트 발생쓰!!!!!')
                
                if(event.stopPropagation){
                    event.stopPropagation();
                }
                
            };
            
        };
    </script>
</head>

<body>
    
    <div>
    
        <h1> 클릭하세요 :) </h1>
    </div>
</body>
</html>

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>유효성 검사</title>
</head>

<body>
    
    <form id="myform">
    
        <h1> 회원가입</h1>
        <hr>
        <table>
            <tr>
                <td><label for="uesrid">아이디(이메일)</label></td>
                <td><input type="text" name="userid" id="userid"></td>
            </tr>
            <tr>
                <td><label for="pw">비밀번호</label></td>
                <td><input type="password" name="pw" id="pw"></td>
            </tr>
            <tr>
                <td><label for="pw-check">비밀번호 번호 확인</label></td>
                <td><input type="password" name="pw-check" id="pw-check"></td>
            </tr>
            <tr>
                <td><label for="username">이름</label></td>
                <td><input type="text" name="username" id="username"></td>
            </tr> 
            <tr>
                <td></td>
                <td><input type="submit" value="회원가입">
                    <input type="reset" value="초기화"></td>
            </tr>
        
        
        </table>
    </form>
</body>
</html>
<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>유효성 검사</title>
    
    <script>
    
        window.onload = function(){
            
            document.querySelector('#myform').onsubmit = function(){               
                var userid = document.querySelector('#userid');
                var pw = document.getElementById('pw');
                var pwcheck = document.getElementById('pw-check');
                var username = document.querySelector('#username');
                
                // 유효성 검사 1: 공백이 없어야 한다.
                if(userid.value.trim().length < 1){
                    alert ('id는 필수 항목입니다.');
                    userid.value='';
                    userid.focus(); //커서를 userid로 이동시키는 함수
                    return false;
                }
                
                if(pw.value.trim()<1){
                    alert('비밀번호는 필수항목입니다.');
                    pw.value='';
                    pw.focus();
                    return false;
                }
                
                // pw == pwcheck 이어야 한다.
                if(pwcheck.value.trim()<1 || pw.value!=pwcheck.value){
                    alert('비밀번호 확인이 일치하지 않습니다.');
                    pwcheck.value='';
                    pwcheck.focus();
                    return false;
                }
                
                 if(username.value.trim()<1){
                    alert('이름 항목은 필수항목입니다.');
                    username.value='';
                    username.focus();
                    return false;
                }
        };
            
        };
    
    </script>
</head>

<body>
    
    <form id="myform" action="http://www.naver.com">
    
        <h1> 회원가입</h1>
        <hr>
        <table>
            <tr>
                <td><label for="uesrid">아이디(이메일)</label></td>
                <td><input type="text" name="userid" id="userid"></td>
            </tr>
            <tr>
                <td><label for="pw">비밀번호</label></td>
                <td><input type="password" name="pw" id="pw"></td>
            </tr>
            <tr>
                <td><label for="pw-check">비밀번호 번호 확인</label></td>
                <td><input type="password" name="pw-check" id="pw-check"></td>
            </tr>
            <tr>
                <td><label for="username">이름</label></td>
                <td><input type="text" name="username" id="username"></td>
            </tr> 
            <tr>
                <td></td>
                <td><input type="submit" value="회원가입">
                    <input type="reset" value="초기화"></td>
            </tr>
        
        
        </table>
    </form>
</body>
</html>

 

다 입력하면 action = > naver로 가짐

 

 

클릭 이벤트 / this 키워드

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>event</title>
</head>

<style>
    h1 {
        border: 1px solid #999;
    }
</style>

<script>
    
    window.onload = function(){
        
        // 캐스팅_변수선언
        var hearder = document.getElementById('header');
        
        // 클릭하면 Click hearder :)♡가 뜨는 onclick 이벤트 연결
        header.onclick = function(){
            alert('Click header :)♡ '+this.innerHTML); 
            // this > 이벤트가 발생한 header를 가리키고 있다 
            // 여기서 this.innerHTML는 C L I C K! 이다          
            
        // 이벤트 제거 > 한번 클릭하고 나면 창이 다시뜨지 않는다.
        header.onclick = null;
            
        }
        
    };
    
</script>

<body>

    <h1 id="header"> C L I C K ! </h1>

</body></html>

 

이벤트 강제실행

 

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>event</title>
</head>

<style>
    h1 {
        border: 1px solid #999;
    }
</style>

<script>
    
    window.onload = function(){
        
    
        
        // 캐스팅
        var btn1 = document.getElementById('btn1'); //버튼id
        var btn2 = document.getElementById('btn2');
        
        var cnt1 = document.getElementById('count-a');
        var cnt2 = document.getElementById('count-b');
        
        // btn 문서객체에 클릭이벤트 적용
        btn1.onclick = function(){
            // 클릭하면 숫자증가 
            cnt1.innerHTML = Number(cnt1.innerHTML)+1;
            // a를 누르면 b 버튼 카운트도 같이 증가하고 싶다면
            //btn2.onclick();
            
        };
        
        btn2.onclick = function(){     //inner나 text나 둘다상관없음
            cnt2.innerHTML = Number(cnt2.textContent)+1;            
        };
        
        
        
    };
    
</script>

<body>
        
    <button id="btn1">Button-A</button>
    <button id="btn2">Button-B</button>
    <h1>Button-A : <span id="count-a">0</span></h1>
    <h1>Button-B : <span id="count-b">0</span></h1>
    

</body></html>

 

인라인 이벤트 모델

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>event</title>
</head>

<style>
    h1 {
        border: 1px solid #999;
    }
</style>

<script>
    
    function clickH1(){
        alert('인라인 방식으로 이벤트 처리');
    }
</script>

<body>
    
    <h1 onclick="clickH1();">인라인 방식의 이벤트 정의</h1>


</body></html>

문서 객체의 스타일 변경

- style 속성 사용
- getElementById ( ) 메서드로 문서 객체를 가져옴
- style 속성에 있는 border, color, fontFamily 속성을 지정
- CSS에 입력하는 것과 같은 형식으로 입력

 

<!DOCTYPE html>
<html lang="">
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {
            
            // 태그이름으로 문서객체 생성 > 배열로 반환
            var divs = document.getElementsByTagName('div'); // div 아래두개모두선택
            divs[0].innerHTML='By tagname - 0 ';
            divs[1].innerHTML='By tagname - 1 ';
            
            // style
            divs[0].style.color = 'pink';       

        };
    </script>

</head>

<body>

    <div id="header-1">1</div>
    <div id="header-2">2</div>

</body></html>


<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Javascript Window Object</title>

    <script>
        window.onload = function() {

            document.getElementById('go_naver_btn').onclick = function() {
                
                var alink = document.querySelector('a');
                alink.style.display='block';
                alink.style.backgroundColor='blue';
                alink.style.fontSize=32;
                alink.style.color='yellow';
                alink.style.fontWeight='bold';
                alink.style.textAlign='center';

            };         


        };
    </script>

</head>

<body>


    <a href="http://www.naver.com">네이버로 이동</a>

</body></html>

 

HTML 태그를 자바스크립트로 가져오는 방법

 

<!DOCTYPE html>
<html lang="">
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {

            //html 문서의 요소를 문서 객체로 만들기
            // id 속성값으로 문서 객체 생성 : 캐스팅
            // document.getElementById('아이디속성값');

            var header1 = document.getElementById('header-1');
            var header2 = document.getElementById('header-2');

            // 문서 객체의 속성 변경
            header1.innerHTML = '<i>문서객체 생성</i>';
            header2.textContent = '<i>문서객체 생성</i>';


        };
    </script>

</head>

<body>

    <div id="header-1">1</div>
    <div id="header-2">2</div>

</body></html>


 

여러 개의 문서 객체 가져오는 방법

- document 객체의 getElementById( )메서드는 한 번에 한 가지 문서 객체만 가져올 수 있음
- 아래 메서드를 이용해서 여러 개의 객체를 가져올 수 있음

 

getElementsByName(name) : 태그의 name 속성이 name과 일치하는 문서 객체를 배열로 가져온다.

getElementsByTagName(tagname) : tagName과 일치하는 문서 객체를 배열로 가져온다.

 

<!DOCTYPE html>
<html lang="">
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {
            
            // 태그이름으로 문서객체 생성 > 배열로 반환
            var divs = document.getElementsByTagName('div'); // div 아래두개모두선택
            divs[0].innerHTML='By tagname - 0 ';
            divs[1].innerHTML='By tagname - 1 ';

        };
    </script>

</head>

<body>

    <div id="header-1">1</div>
    <div id="header-2">2</div>

</body></html>


 

HTML 5에서 추가된 메서드

querySelector / querySelectorAll 예제1)

<!DOCTYPE html>
<html lang="">
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {
			// CSS의 선택자로 선택할수 있는 메소드
			
            
            var div1 = document.querySelector('div'); // 가장 첫번째거 가져옴.
            alert(div1.innerHTML) // 1
            
            var divs = document.querySelectorAll('div');
            alert(divs[0].innerHTML+' : querySelectorAll'); // 1 : que~


        };
    </script>

</head>

<body>

    <div id="header-1">1</div>
    <div id="header-2">2</div>

</body></html>


 

querySelector / querySelectorAll 예제2)

<!DOCTYPE html>
<html lang="">
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {


            var input = document.querySelector('input[type=button]');
            alert(input.value);

            var input2 = document.querySelector('input[type=text]');
            alert(input2.value);

        };
    </script>

</head>

<body>

    <input type="button" value="네이버로 이동" id="go_naver_btn">
    <input type="text" value="텍스트">

</body></html>

 

 

querySelector / querySelectorAll 예제3)

> 유효성 검사

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Javascript Window Object</title>

    <script>

        window.onload = function() {
            document.getElementById('go_naver_btn').onclick = function() {

                var userid = document.querySelector('#userid');

                var uid = userid.value;

                if (uid.length < 1) {
                    alert('아이디는 필수 입력항목입니다.');
                } else {
                    alert('사용자가 입력한 아이디는 ' + userid.value + '입니다.');
                }

            };

        };
    </script>
    <style>

    </style>

</head>

<body>

    <input type="text" value="test" id="userid">
    <br>
    <input type="button" value="확인" id="go_naver_btn">



</body></html>

 

 

 

문서 객체 생성


정적으로 문서 객체를 생성 : 처음 HTML 페이지에 적혀 있는 태그들을 읽으며 생성
- 동적으로 문서 객체를 생성 : 자바스크립트로 원래 HTML 페이지에는 없던 문서 객체를 생성

 

createElement(tagName) > 요소 노드를 생성

createTextNode(text)      > 텍스트 노드 생성

appendchild(node))        > 객체에 노드를 연결

 

텍스트 노드를 갖는 문서 객체

*<h1></h1>이 body에 생성됨 (createElement)

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>
    
    <script>
    
    
        window.onload = function(){
            
            // 태그 요소 생성
            var header = document.createElement('h1');
            
            // 텍스트 요소 생성
            
            // 태그 요소에 텍스트 요소 추가
            
            // 새로운 문서객체를  body 요소에 추가
            document.body.appendChild(header);
        }
    </script>
    
</head>

<body>
    
</body>
</html>

 

 

 

 

*<h1></h1> 사이에 하이! 뽀선뽀선!을 넣어줌 (createtextNode)

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>
    
    <script>
    
    
        window.onload = function(){
            
            // 태그 요소 생성
            var header = document.createElement('h1');
            
            // 텍스트 요소 생성
            var textNode = document.createTextNode('하이! 뽀선뽀선!');
            // 태그 요소에 텍스트 요소 추가
            header.appendChild(textNode);
            
            // 새로운 문서객체를  body 요소에 추가
            document.body.appendChild(header);
        }
    </script>
    
</head>

<body>
    
</body>
</html>

 

 

 

텍스트가 없는 요소 : img

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {


            // 텍스트가 없는 요소 : img
            var img = document.createElement('img');
            document.body.appendChild(img);
        }
    </script>

</head>

<body>

</body>

</html>

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {


            // 텍스트가 없는 요소 : img
            var img = document.createElement('img');
            img.src = 'tae6.jpg';
            img.width = 300; //px
            img.height = 300;
            document.body.appendChild(img);
        }
    </script>

</head>

<body>

</body>

</html>

 

두개 합친 것! TEST

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {
                        
            // 태그 요소 생성
            var header = document.createElement('h1');
            
            // 텍스트 요소 생성
            var textNode = document.createTextNode('하이! 뽀선뽀선!');
            // 태그 요소에 텍스트 요소 추가
            header.appendChild(textNode);
            
            // 새로운 문서객체를  body 요소에 추가
            document.body.appendChild(header);


            // 텍스트가 없는 요소 : img
            var img = document.createElement('img');
            img.src = 'tae6.jpg';
            img.width = 300; //px
            img.height = 300;
            document.body.appendChild(img);
            
            //밑에 있는 h1에 추가한다
            document.getElementById('pposeon').appendChild(img);
        }
    </script>

</head>

<body>
    
    <h1 id="pposeon">새로운 문서객체를 추가합니다.</h1>

</body>

</html>

// 하이 뽀선뽀선은 바디에 추가된것 > document.body.appendChild(header);

 

 

 

텍스트 노드를 갖지 않는 문서 객체 / 속성 지정

 

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>문서객체 동적 생성</title>

    <script>
        window.onload = function() {
            var pposeon = document.getElementById('pposeon');
            console.log('h1#pposeon id->', pposeon.getAttribute('data-brackets-id')); //1087

            var link = document.getElementById('link_naver');

            // text 노드 생성 
            //var str = document.createTextNode('-' + link.getAttribute('href')); // 아래랑 같음
            var str = document.createTextNode('-' + link.href);
            link.appendChild(str);

            
            
          	// 속성 지정
            var img1 = document.createElement('img');
            img1.setAttribute('src', 'tae6.jpg');
            img1.setAttribute('width', 200);
            img1.setAttribute('height', 200);
            document.body.appendChild(img1);
            
            

        };
    </script>

</head>

<body>

    <h1 id="pposeon">새로운 문서객체를 추가합니다.</h1>

    <a href="http://www.naver.com" id="link_naver"> 네이버 </a>

</body></html>

 

 

innerHTML과 textContent의 차이.

            pposeon.innerHTML = '<i>안녕하세요</i>';
            alert(pposeon.innerHTML);
            alert(pposeon.textContent);
            // html 인식이 아닌 순수한 문자로 인식
            pposeon.textContent = '<i>안녕하세요</i>';

window 객체의 로드 완료
- window 객체 로드가 완료되는 때는?

-> HTML 페이지에 존재하는 모든 태그가 화면에 올라가는 순간이 로드가 완료되는 순간

 onload를 사용한 경우

1) [ 1 ] 창뜨고 

2) 변경1 뜨면서 [ 2 ] 창 뜨고

3) 변경2가 출력

// onload가 아래쪽 body를 먼저 실행시켜준다.

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>실행순서</title>

    <script>
    window.onload = function(){
        alert(2);
        var h1 = document.getElementById('h1');
        console.log('h1->', typeof(h1));
        h1.innerHTML = '변경2';
      };
    </script>

</head>

<body>

    <h1 id="h1">h1 태그가 생성 되었습니다.</h1>
    <script>
        alert(1);
        var h1 = document.getElementById('h1');
        console.log('h1!!!!!!->', typeof(h1));
        h1.innerHTML = '변경1';
    </script>

</body></html>


 

onload를 사용하지 않은 경우

1) [ 2 ] 창 뜨고

2) [ 1 ] 창 뜨고

3) 변경1

// 위에서부터 순서대로 실행된다 

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>실행순서</title>

    <script>
//    window.onload = function(){
        alert(2);
        var h1 = document.getElementById('h1');
        console.log('h1->', typeof(h1));
        h1.innerHTML = '변경2';
//      };
    </script>

</head>

<body>

    <h1 id="h1">h1 태그가 생성 되었습니다.</h1>
    <script>
        alert(1);
        var h1 = document.getElementById('h1');
        console.log('h1!!!!!!->', typeof(h1));
        h1.innerHTML = '변경1';
    </script>

</body></html>

onload가 없어서 h1을 불러오지 못해서(?) 에러남!

 

1) 윈도우 객체확인

 

        var output = '';
        for (var key in window) {
            output += '[' + key + '] : ' + window[key] + '<br><br>';

        }

        window.onload = function() {
            document.body.innerHTML = output;
        };
        //console.log(window);

 

2) 네이버 창이 정해진 사이즈로 열리고, 글씨를 클릭하면 닫힌다.

open(URL, name, features, replace)

 

        window.onload = function() {
            //윈도우생성
            window.open();
            window.open('http://naver.com', 'newWin',
                'width=600, height=300', true);
            var child = window.open('', 'child', 'width=300, height=200');

            child.document.write('<h1 onclick="self.close();">From Parent window</h1>');
        };

 

3) 여러가지 객체 확인

        window.onload = function() {
            // 스크린객체
            // f12 누르고 보면 가로세로 길이 이런거나옴
            console.log(screen);
            // 로케이션 객체 확인
            console.log(location);           
            // 네비게이터 객체 확인
            console.log(navigator);
    
        };

 

• JSON 데이터는 이름과 값의 쌍으로 이루어집니다.
• JSON 데이터는 쉼표(,)로 나열됩니다.
• 객체(object)는 중괄호({})로 둘러쌓아 표현합니다.
• 배열(array)은 대괄호([])로 둘러쌓아 표현합니다.

 

<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>json</title>
    
    
    <script>
    
        var book = {
            name:'first java',
            price : 25000,
            publisher : 'FIRST'            
        };
        
        
        // 자바 스크립트의 오브젝트를 > String(JSON규격)
        // JSON.stringify(자바스크립트 오브젝트) : String으로 반환
        
        var jsonStr = JSON.stringify(book);
        
        window.onload = function(){
            document.getElementById('view').innerHTML=jsonStr;
            
            var str= '{"name":"first java","price":25000,"publisher":"FIRST"}';
            
            // json String > 자바 오브젝트
            var obj = JSON.parse(str);
            console.log(typeof(obj));
            console.log(obj);
            
        };
        
    
    </script>
</head>

<body>
    
    
    <h1 id="view"></h1>
    
</body>
</html>
       // 자바스크립트의 객체 생성
        // {}  : 중괄호를 이용해서 쉽게 객체 생성
        var obj = {}; // obj 이름의 객체를 생성
        //console.log('typeof(obj) =>',typeof(obj));

        // 객체의 속성 정의
        // 속성이름:속성값, 속성이름:속성값
        var member = {
            memberId: 'cool',
            memberName: '시원한',
            age: 15,
            chk: false,
            books: ['자바의정석', '퍼스트자바', '웹프로그래밍'],
            hello: function() {
                alert('안녕하세요');
            }
        };


        // 객체에 참조, 호출
        // 객체변수.속성이름
        // 객체변수.메소드이름()
        //console.log('회원의 아이디', member.memberId);
        //member.hello();

        //객체에 속성, 메소드 추가
        member.study = function() {
            alert(this.books[1] + '를 공부합니다.');
        };

        //member.study();

        member.nicName = 'COOL';

        // 속성의 삭제 : delete
        delete member.nicName;
       ///////////////////////////////////////

        // 학생들의 국어 영어 수학 점수를 관리하는 프로그램을 만들자.
        // 데이터는 학생 이름, 국어점수, 영어점수, 수학점수 -> 객체
        // 객체를 저장하는 배열

        // 학생 객체 구조
        var student = {
            name: 'KING',
            kor: 100,
            eng: 100,
            math: 100,
            sum: function() {
                return this.kor + this.eng + this.math;
            },
            avg: function() {
                return this.sum() / 3;
            }
        };

        // 학생들을 저장하는 배열을 생성
        var students = [];
        
        // 학생 데이터를 저장하는 Student 생성자 함수 정의        
        function Student(name, kor, eng, math) {
            this.name = name;
            this.kor = kor;
            this.eng = eng;
            this.math = math;
            };
            
            
        // 생성자 함수의 공통 속성은 prototype 속성으로 관리할수 있다.
        // 공통속성으로 정의하면 불필요한 메모리를 쓰지 않는다.
        // prototype 정의 : sum, avg, toString
        Student.prototype.sum = function() {
            return this.kor + this.eng + this.math;
        };
        
        Student.prototype.avg = function() {
            return this.sum() / 3;
        };
        
        Student.prototype.toString = function() {
            html = '   <tr>';
            html += '       <td>' + this.name + '</td>';
            html += '       <td>' + this.kor + '</td>';
            html += '       <td>' + this.eng + '</td>';
            html += '       <td>' + this.math + '</td>';
            html += '       <td>' + this.sum() + '</td>';
            html += '       <td>' + Math.floor(this.avg()) + '</td>';
            html += '   </tr>';

            return html;
        };             
        

        // 객체 생성
        var st1 = new Student('cool', 10, 20, 30);
        //console.log('typeof(st1)', typeof(st1));
        //console.log('st1', st1);
        
        // 배열에 요소 추가
        students.push(new Student('A01', 80, 80, 80));
        students.push(new Student('A02', 30, 100, 100));
        students.push(new Student('A03', 50, 80, 70));
        students.push(new Student('A04', 60, 60, 60));
        students.push(new Student('A05', 70, 50, 50));
        students.push(new Student('A06', 80, 80, 80));
        students.push(new Student('A07', 90, 90, 90));
        students.push(new Student('A08', 100, 100, 90));
        students.push(new Student('A09', 40, 80, 80));
        students.push(new Student('A10', 80, 80, 70));

        
        
        students.sort(function(left, right){
            return right.sum()-left.sum();
        });
        
        students = students.slice(0,3);
        
        var html = '<table border=1>';
        html += '   <tr>';
        html += '       <th>이름</th>';
        html += '       <th>국어</th>';
        html += '       <th>영어</th>';
        html += '       <th>수학</th>';
        html += '       <th>총점</th>';
        html += '       <th>평균</th>';
        html += '   </tr>';

        for (var i in students) {            
            html += students[i].toString();
        };

        html += '</table>';
        
   

        window.onload = function() {
            document.body.innerHTML = html;
        };
        
        
        
    </script>
</head>

<body>

</body></html>
        // 생성자 함수 
        function Rectangle(w,h){
            //this.width = w;
            //this.height = h;
            var width = w;
            var height = h;
            
            this.getWidth = function(){
                return width;
            }
            this.getHeight = function(){
                return height;
            }
            this.setWidth = function(w){
                width=w;
            }
            this.setHeight = function(h){
                height=h;
            }
        }
        
        var rec = new Rectangle(10,20);
        
        console.log('rec', rec.getWidth());
        console.log('rec', rec.getHeight());
        
        rec.setHeight(100);
        rec.setWidth(200);
        
        console.log('rec', rec.getWidth());
        console.log('rec', rec.getHeight());

        
        var arr = [11,78, 574, 1, 100];
        //arr.sort();
        
        /*arr.sort(function(left, right){
            return left-right;
        });*/
        
        arr.sort(function(left, right){
            return right-left;
        });
        
        
        console.log(arr);
        
        
        
        

- 익명함수 : function ( ) {} 형태는 함수이나 이름이 없음
- 선언적 함수 : 이름이 있는 함수
- 함수 호출 : 뒤에 괄호를 열고 닫음으로 코드를 실행

       // 함수 정의
        /*
            function 함수이름 (매개변수,...){
                // 데이터처리....
                return 데이터;
            }
        */
        
        function fn(){
            alert('이름을 명시적으로 정의한 함수');
        }
        
        // 변수에 함수를 정의하는 방식에서는 익명함수 형태로 정의
        var func = function(){
            alert('변수 func에 정의한 함수');
        }
        
        // 함수 호출
        fn();
        func();
        alert(typeof(fn)+', '+typeof(func));
        
        // 매개변수가 있는 함수        
        function add(num1, num2){
            var result = num1 + num2;
            return result;
        }
        
        alert(add(10,20));
        
        
        function sumAll(){            
            var result = 0;            
            for(var i=0; i< arguments.length; i++){
                result += arguments[i];
            }
            
            return result;
            
        }
        
        alert(sumAll(1,2,3,4,5,6,7,8,9,10));
        
        function callTenTimes(callback){
            for(var i=0; i<10; i++){
                callback();
            }
        }  
        
        function callTimes(callback, num){
            
            for(var i=0; i<num; i++){
                callback();
            }
            
        }
        
        var f1 = function(){
            console.log('callback function call!!');
        }
        
        function f2(){
            console.log('f2 call!!');
        }
        // setInterval() : 특정 간격마다 함수를 실행
        var intervalId = setInterval(function(){
            var html = '<h1>'+new Date()+'</h1>';
            document.body.innerHTML=html;
        }, 1000);
        
        var jsCode = 'var num3=10;';
        jsCode += 'alert(num3);';
        
        
        // setTimeout() : 특정 시간이 지나면 함수를 한번 실행
        setTimeout(function(){
            clearInterval(intervalId);
            alert(jsCode);
            eval(jsCode);
        },10*1000);

 

    
        alert(1);
        alert('"안녕하세요"')
        console.log('1+2=', 1+2);
        console.log(' "김" == "한" ==>', '김'=='한');
        console.log(' "김" > "한" ==>', '김'>'한')
        console.log(' "김" < "한" ==>', '김'<'한')
        
        console.log(' true > fasle ==> ', true>false);
        
        var num = 100;
        console.log('num =>', num);
        
        var number = 1000; // 숫자
        var str = 'String'; // 문자
        var bool = false; // 논리값
        var func = function(){}; // 함수
        var obj = {}; // 객체
        
        console.log('변수 타입 >' , typeof(number));
        console.log('변수 타입 >' , typeof(str));
        console.log('변수 타입 >' , typeof(obj));
        
       if(typeof(number)=='number'){
            alert('변수 number는 number타입입니다');
        }
       
        
        var food = '된찌';
        var food = '김찌';
        
        console.log(food);
        
        /* confirm : 사용자의 의사표현 묻는 함수 
        yes/no > true/false     */
        
       var check = confirm('삭제하시겠습니까?');
        console.log('check=',check);
        
        /*prompt : 사용자의 데이터 입력을 받는 함수*/
        var userData =prompt('숫자를 입력해주세요.', 100);
       
      var age = Number(userData);
        
        console.log('userDate >', userData+
                   ':'+ typeof(userData));
        console.log('age >', age + ':'+ typeof(age));
    
        if(age>19){
            alert('안녕하세요!')
        }else{
            alert('성인만 가능!');
        }*/
        
        
        var str = String(true);
        console.log('str의타입은 ',typeof(str));
        
        
       /* 논리값으로 변환하는 함수 : boolea*/
        console.log(Boolean(0));
        console.log(Boolean(NaN));
        console.log(Boolean(''));
        console.log(Boolean(null));
        console.log(Boolean(undefined));
        
        console.log(0==false); // true
        console.log(undefined==false); // NaN null un~은 false
        
        console.log(!0); //true
        console.log(!!0); //false
        
        console.log('123'== 123); // true
        console.log('123'=== 123); //자료형은 다르므로 false
        
        
        /* || 논리값이 false일때만 실행*/
        (1<0) || console.log('OK');
        (1>0) || console.log('KO') ; // 참이라 실행X
        
        
        
        /* && 논리값이 true일때만 실행*/
        (1<0) && console.log('OK'); // 거짓이라 실행X
        (1>0) && console.log('KO'); 
        
        /*
        자바스크립트의 배열
        대괄호( [ ] )로 생성 가능
        모든 타입이 들어갈 수 있다.*/
        
        var arr=[];
        var arr=[123,'hello',{}, function(){}, true ];
        
        console.log('arr>', typeof(arr));
        console.log('arr =>', arr);
        
        
        /*for 반복문을 이용해서 일괄 처리*/
           for(var i=0; i<arr.length; i++){
               console.log(String(i),arr[i]);
           }
        
        
        /* for in을 이용한 반복문 */
        for ( var i in arr){
            console.log(i, arr[i])
            
        }
        
    </script>
</head>

<body>
    
    <script>
        
        var name1='카카오';
        var name2='네이버';
        
        // alert(2);
        var htmlstr = '';
        htmlstr +='<ul class="no_style">\n';
        htmlstr +='     <li>'+name1+ '</li>\n';
        htmlstr +='     <li>'+name2+'</li>\n';
        htmlstr +='</ul>';
        
        console.log(htmlstr);
        
        /*document.body.innerHTML = '<h1>안녕</h1>';*/
        document.body.innerHTML = htmlstr;
    
    </script>
    
</body>
</html>

<script>
    // alert(3);
    
</script>

+ Recent posts