ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JQuery] DOM
    VScode/JQuery 2022. 9. 9. 14:46

    -DOM은 자바스크립트보다 제이쿼리에서 훨씬 활용도 높음

     

    1. 기본 필터링 메서드

     

    filter()

    -$(selector).filter(selector);

    -$(selector).filter(function(index){});

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('h3').filter(':even').css({backgroundColor:'black',
                                             color:'white'});
                // 선택자의 짝수 번째 css 변경
                // $('h3:even').css({background:'black',color:'white'});
                // 위와 같은 내용
            });
            $(function(){
                $('h3').filter(function(index){return index%3==0}).css(
                               {backgroundColor:'blue',color:'white'});
                // filter 내의 익명함수가 전체 index를 대상으로 하여 
                // 3으로 나눈 나머지가 0인 인덱스에만 true를 리턴해 줌. 
                // filter true가 리턴 된 인덱스에 대해서만 
                // 지정된 css를 적용함
    
                // 인덱스 3과 4만 골라내고 싶으면 
                // 익명함수 안에 return index==3 ||index==4;
                // filter 메서드의 괄호 안에는 
                // 적용될 인덱스를 저장할 키워드 또는 
                // 익명함수로 골라 넣을 수 있게 코딩하면 됨
            });
        </script>
    </head>
    <body>
        <h3>Header - 0</h3>
        <h3>Header - 1</h3>
        <h3>Header - 2</h3>
        <h3>Header - 3</h3>
        <h3>Header - 4</h3>
        <h3>Header - 5</h3>
    </body>
    </html>
     
     

    2. 문서 객체 탐색 chaining과 종료

    -chaining을 사용해 한 줄로 서로 다른 문서 객체에 스타일 적용 가능

    -관련 셀렉터들로 필터링한 후 chaining과 filter를 사용함.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('h3').css('background','orange').filter(':even').css(
                                                        'color','red');
    // 전혀 관련없는 대상을 체이닝하지는 않음
    // 잘못된 사용: $('h3').css('background','orange').$('h1').css();
    
    // 문서 객체의 css 변경을 마친 경우 리턴되는 값이 
    // 다시 문서객체($('h3'))이므로 위와 같이 또 다른 탐색이나 
    // css 내용을 이어서 적용시킬 수 있음
    
    // 필터링 된 선택자로 css를 변경한 후에 리턴된 선택자는 
    // 앞서 필터링한 결과를 그대로 유지함. 
    // 따라서 다른 채이닝을 이어서 사용하면 
    // 계속 필터링된 결과에 적용되게 됨
            });
        </script>
    </head>
    <body>
        <h3>Header - 0</h3>
        <h3>Header - 1</h3>
        <h3>Header - 2</h3>
        <h3>Header - 3</h3>
        <h3>Header - 4</h3>
        <h3>Header - 5</h3>
    </body>
    </html>
     
     

    위의 체이닝 방식으로 실행하기 곤란한 상황일 때

    *위 코드에서 script만 변경

     1) 따로따로 지정

    // 전체 배경 오렌지, 짝수 번째 글자색 흰색, 홀수 번째 글자색 빨강
    $(function(){
        $('h3').css('background','orange');
        $('h3:even').css('color','white');
        $('h3:odd').css('color','red');
    });

     2) 체이닝 이용

    $(function(){
        $('h3').css('background','orange').filter(':even').css('color',
                          'white').filter(':odd').css('color','red'); 
    // $('h3').css('background','orange') 이 문장이 실행되면 
    // 리턴 문서객체가 $('h3')이지만 
    // .filter(':even').css('color','white') 여기까지 실행되어 
    // 리턴된 문서객체는 짝수번째의 h3들임. 
    // 따라서 마지막 필터링 .filter(':odd')는 
    // 리턴된 짝수번째들을 대상으로 홀수번째를 골라냄
    });
    .filter(':odd')는 리턴된 짝수번째들을 대상으로 홀수번째를 골라냄. 그래서 Header -2 만 해당됨

     3) end()

    -문서 객체 선택을 필터링 이전 한 단계 뒤로 돌리는 함수

    $(function(){
        // end()를 이용하여 짝수번째 필터링을 제거 후 
        // 다시 홀수번째 필터링을 적용해야 의도한 필터링이 진행됨
        $('h3').css('background','silver').filter(':even').css('color',
                      'red').end().filter(':odd').css('color','blue');
    });
     

     

    3. 문서 객체 추가 선택

    -add(): 기존 문서 객체를 포함하여 추가로 문서 객체를 선택

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('h1').css('background','gray').add('h2').css('color',
                                                                'red');
                // h1에 배경 gray를 적용 후 h2도 추가해서 
                // 글자색 빨강으로 적용
                // $('h1').css('background','gray');
                // $('h1','h2').css('color','red');
            });
        </script>
    </head>
    <body>
        <h1>Header - 0</h1>
        <h2>Header - 1</h2>
        <h1>Header - 2</h1>
        <h2>Header - 3</h2>
        <h1>Header - 4</h1>
    </body>
    </html>
     

     

    4. 문서 객체의 특징 판별

    -$(this).index(): 현재 객체의 인덱스값

    -$(this).is(선택자): 종속선택자 같은 this 내부에서 선택자로 추가 필터링한 객체

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                // $('h1').each(function(index,item){})의 사용 방식에서
                // this를 사용하면서 index 값이나 item 변수를 
                // fuction() 안에서 생략하여 사용이 가능함. 
                // 다만 이 경우 현재 this의 인덱스를 알아내려면
                // 별도의 함수가 필요함
                $('h1').each(function(){
                    if($(this).is('.select')){
                        $(this).css('color','red');
                        // $(this).innerHTML=$(this).index();
                    }
    // this 객체에 class 속성으로 select 값이 존재한다면
    // 제이쿼리 일반적 선택자로 표현한다면 
    // $('h1.select').css('color','red')
                });
            });
        </script>
    </head>
    <body>
        <h1 class="select">Header - 0</h1>
        <h1>Header - 1</h1>
        <h1 class="select">Header - 2</h1>
    </body>
    </html>
     
     

     

    5. 문서 객체의 클래스 속성 추가

    -addClass()

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>addClass</title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            // ex1. 매개변수에 문자열(클래스 이름) 입력
            $(function(){$('h1').addClass('item_1');}); 
            // 전체 h1 태그에 하나의 클래스 적용 
            // <h1>Header-0</h1> 
            // -> <h1 class="item_1">Header-0</h1>
    
            // ex2. 매개변수에 클래스이름으로 된 
            // 문자열을 리턴하는 익명 함수 입력
            $(function(){
                $('h1').addClass(function(index){return 'item_'
                                                 +(index+1);});
            });
            // 각각의 h1에 다른 클래스 적용. 
            // 인덱스값(0,1,2)을 전달인수로 전달받은 익명함수의 리턴값
            // ('item_1','item_2','item_3')이 addClass에 적용됨
            // 익명함수의 위치가 addClass 메서드 안쪽에 위치하기 때문에 
            // 익명함수의 리턴값은 addClass에 적용될 class 이름들임
        </script>
    </head>
    <body>
        <h1>Header-0</h1>
        <h1>Header-1</h1>
        <h1>Header-2</h1>
    </body>
    </html>
     

     

    6. 문서 객체의 클래스 속성 제거

    -removeClass()

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('h1').removeClass(
                    function(index){
                        if(index==0)
                        return 'item_'+(index+1);});
            }); 
    // 문자 연산으로 만들어진 클래스 이름으로 각 h1 태그의 클래스를 제거함
    // $('h1').removeClass('item_1'); 
    // -> 모든 h1에서 item_1이라는 클래스는 모두 삭제됨
    // removeClass 메서드에 전달인수로 
    // function(index){return 'item_'+(index+1);}를 넣었다면 
    // 인덱스별로 문자연산에 의해 생성된 
    // 클래스이름('item_1','item_2','item_3')들을 해당 태그에서 삭제함
    // 위 예제는 if문에 의해 h1의 0번째 인덱스에 적용된 
    // 클래스 값만 적용된 곳에서만 제거함
        </script>
    </head>
    <body>
        <h1 class='item_1'>Koala.jpg</h1>
        <img src="images/Koala.jpg" width="150"/>
        <h1 class='item_2'>Koala.jpg</h1>
        <img src="images/Penguins.jpg" width="150"/>
        <h1 class='item_3'>Koala.jpg</h1>
        <img src="images/Tulips.jpg" width="150"/>
    </body>
    </html>
     

     

    7. 문서 객체의 속성 검사

    -attr()

    -속성과 관련된 모든 기능 수행.

    -값을 얻는 동작에 인덱스가 사용되지 않았다면 첫번째 문서객체(인덱스 0번)이 사용됨.

    -검사라는 표현보다 조회하여 얻어내는 동작이 더 어울리는 표현임

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                var src=$('img').attr('src'); 
               // img 태그에서 src 속성값을 추출하여 src 변수에 저장
                var header1=document.createElement('h1'); 
               // h1태그 생성
                var textNode=document.createTextNode(src); 
               // 문자열 객체 생성
                header1.appendChild(textNode); 
               // 태그에 문자열을 삽입
                document.body.appendChild(header1); 
               // 태그를 body에 추가
                var w=$('img').attr('width');
                header1=document.createElement('h1');
                textNode=document.createTextNode(w);
                header1.appendChild(textNode);
                document.body.appendChild(header1);
            }); 
    // 현재 예제는 each를 사용하지 않아서 맨위의 태그만 적용하고 
    // 한번만 출력함
        </script>
    </head>
    <body>
        <h1 class='item_1'>Koala.jpg</h1>
        <img src="images/Koala.jpg" width="150"/>
        <h1 class='item_2'>Koala.jpg</h1>
        <img src="images/Penguins.jpg" width="150"/>
        <h1 class='item_3'>Koala.jpg</h1>
        <img src="images/Tulips.jpg" width="150"/>
    </body>
    </html>
     
     
    8. 문서 객체의 속성 추가

    -attr() 메서드 사용

    1) $(selector).attr(name,value);

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('img').attr('width','300');
    // 속성의 적용에 인덱스 적용이 안되어 있다면 
    // 모든 동일한 문서객체에 적용됨
    // <img src=""> -> <img src="" width="300">
            }); // img 태그 전체에 같은 속성 적용
        </script>
    </head>
    <body>
        <h1 class='item_1'>Koala.jpg</h1>
        <img src="images/Koala.jpg" width="150"/>
        <h1 class='item_2'>Koala.jpg</h1>
        <img src="images/Penguins.jpg" width="150"/>
        <h1 class='item_3'>Koala.jpg</h1>
        <img src="images/Tulips.jpg" width="150"/>
    </body>
    </html>
     
     

    *위 코드에서 script 내용만 변경

    2) $(selector).attr(name,function(index){});

    -익명함수를 이용한 개별 속성값의 추가

    -언제든 익명함수를 이용해서 인덱스별로 다른 값이 필요할 땐, 필요한 위치에 index를 매개변수로 하는 익명함수를 구성해주면 됨. (인덱스별 다른 값이 필요한 곳에 그 값을 리턴해주는 익명함수 구성)

    $(function(){
        $('img').attr('width',function(index){return (index+1)*100;});
    }); // 각 img마다 다른 속성값을 적용
     

    3) $(selector).attr(object);

    -익명함수이용 & 객체를 활용한 속성 추가

    $(function(){
        $('img').attr({'width':function(index){return (index+1)*100;}, 
        'height':200});
    }); 
    // 함수를 이용하여 개별값으로 width 값을 추가하고, 
    // 일괄적으로 height 값을 추가함
     

    4) removeAttr(name)

    -문서 객체의 속성을 제거해주는 메서드

    $(function(){
        $('img').removeAttr('width');
    }); 
    // 100*200 200*200 300*300인 이미지에서 width를 제거.
    // 모두 height 200인 이미지로 변환됨 
    // 가로세로 비율은 원본이미지 비율이 적용
     
     

     

    5. 문서 객체의 스타일 검사

    -css(): 스타일과 관련된 모든 기능을 수행

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                var color=$('h1:eq(1)').css('background-color');
                var header1=document.createElement('h1');
                var textNode=document.createTextNode(color);
                header1.appendChild(textNode);
                document.body.appendChild(header1);
            });
        </script>
    </head>
    <body>
        <h1 class="item_1">Header-0</h1>
        <h1 class="item_2">Header-1</h1>
        <h1 class="item_3">Header-2</h1>
    </body>
    </html>

     

    6. 문서 객체의 스타일 추가

    1) $(selector).css(name,value);

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('h1').css('color','red');
            });
        </script>
    </head>
    <body>
        <h1>Header-0</h1>
        <h1>Header-1</h1>
        <h1>Header-2</h1>
    </body>
    </html>
     

    2) $(selector).css(name,function(index){});

    // .선택자로 선택한 문서 객체에 개별적으로 스타일 속성을 적용하고 싶을 때
    // 사용하는 방법
    $(function(){
        var color=['red','green','blue'];
        $('h1').css('color',function(index){return color[index]});
    });
     

    3) $(selector).css(object);

    $(function(){
        var color=['red','green','blue'];
        $('h1').css(
            {
            'color':function(index){return color[index]},
            'background':'yellow'
            }
        );
    });
     

     

    7. 문서 객체의 내부 검사

    -기존 자바스크립트에서 문서 객체의 innerHTML 속성과 관련된 jQuery 메서드

    1) html()

    -문서 객체 내부의 글자와 관련된 모든 기능을 수행

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                var html=$('h1').html();
                var header1=document.createElement('h1');
                var textNode=document.createTextNode(html);
                header1.appendChild(textNode);
                document.body.appendChild(header1);
            });
        </script>
    </head>
    <body>
        <h1>Header-0</h1>
        <h1>Header-1</h1>
        <h1>Header-2</h1>
    </body>
    </html>
     

    2) text()

    -문서 객체 내부의 글자와 관련된 모든 기능을 수행

    -선택자로 선택한 모든 문서 객체의 글자를 가져와 출력

    $(function(){
        var text=$('h1').text();
        var header1=document.createElement('h1');
        var textNode=document.createTextNode(text);
        header1.appendChild(textNode);
        document.body.appendChild(header1);
    });

     

    8. 문서 객체의 내부 추가

     

    -$(selector).html(value); : HTML 태그를 인식해 문자열 삽입

    -$(selector).text(value); : HTML 태그를 인식하지 않음

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('.useHtml').html('<h1>$().html()</h1>');
            }); // 태그 인식
            $(function(){
                $('.useText').text('<h1>$().text()</h1>');
            }); // 태그 미인식
        </script>
    </head>
    <body>
        <div class="useHtml"></div>
        <div class="useHtml"></div>
        <div class="useHtml"></div>
        <div class="useText"></div>
        <div class="useText"></div>
        <div class="useText"></div>
    </body>
    </html>
     

     

    -$(selector).html(function(index,html){});

    -$(selector).text(function(index,html){});

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
            $('h2').html(function(index,html){
                return '#'+html+'#';
            }); 
    // 익명함수의 매개변수로 사용이 되는 html 
    // 또는 text는 현재 선택자태그가 갖고 있던 원래 내용임
            $('h3').text(function(index,text){
                return '#'+text+'#';
            });
            // 원래 내용에 #을 양옆에 붙여서 다시 원래 태그에 넣는 예
            }); 
        </script>
    </head>
    <body>
        <h2>Header-0</h2>
        <h2>Header-1</h2>
        <h2>Header-2</h2>
        <h3>Header-3</h3>
        <h3>Header-4</h3>
        <h3>Header-5</h3>
    </body>
    </html>
     

     

    9. 문서 객체의 내부 제거

    1) remove(): 특정 문서 객체를 제거

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
            $(function(){
                $('h1').first().remove();
            }); // h1 첫번째 태그 자체가 사라져서 안보이는 상태
        </script>
    </head>
    <body>
        <div style="border: 1px solid black; height:100px;">
            <h1>Header-0</h1>
            <h1>Header-1</h1>
        </div>
    </body>
    </html>
     

     

    2) empty(): 특정 문서 객체의 후손을 모두 제거

    $(function(){
        $('div').empty();
    });
    // div 태그 내의 모든 자식 구성요소를 제거 현재는 h1 태그들이 사라짐
    // 자식 구성요소가 제거되어 div는 존재하지만
    // 표시할 내용이 없어 안 나오는 것처럼 보이는 상태

     

    10. 문서 객체의 생성

    -document.createElement(), document.createTextNode() 얘네들은 자바스크립트에서 사용하던 문서 객체 생성함수

    -제이쿼리에서 문서객체를 생성

    -$(): 문서객체생성

    -$() 함수의 매개변수에 HTML태그 자체를 문자열로 넣기만 하면 해당태그의 문서객체가 생성됨

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="script/jquery-3.6.0.js"></script>
        <script type="text/javascript">
    // -생성한 문서 객체를 body 태그에 추가하는 방법
            $(function(){
                $('<h1></h1>').html('hello#1').appendTo('body');
            });
    // -$() 메서드의 내부에 HTML 태그를 바로 넣어 body 태그에 추가하는 방법
            $(function(){
                $('<h1>hello#2</h1>').appendTo('body');
            });
    // -텍스트 노드를 갖지 않는 문서 객체를 생성하는 법
            $(function(){
                $('<img/>').attr(
               {src:'images/Koala.jpg',width:'200'}).appendTo('body');
            });
            $(function(){
                $('<img/>').attr(
               'src','images/Penguins.jpg').appendTo('body');
            });
        </script>
    </head>
    </html>

     

    11. 문서 객체의 삽입

    -$(a).appendTo(b): a를 b의 뒷부분(자식요소)에 추가

    -$(a).prependTo(b): a를 b의 앞부분(자식요소)에 추가

    -$(a).insertAfter(b): a를 b의 뒷(형제요소)에 추가

    -$(a).insertBefore(b): a를 b의 앞(형제요소)에 추가

    -$(a).append(b): b를 a의 뒷 부분에 추가

    -$(a).prepend(b): b를 a의 앞 부분에 추가

    -$(a).after(b): b를 a의 뒤에 추가

    -$(a).before(b): b를 a의 앞에 추가

     

    'VScode > JQuery' 카테고리의 다른 글

    [JQuery] button, effect  (0) 2022.09.09
    [JQuery] event  (0) 2022.09.09
    [JQuery] 속성/필터선택자, 배열  (0) 2022.09.09
    [JQuery] 인접관계선택자  (0) 2022.09.09
    [JQuery] selector  (0) 2022.09.09

    댓글

Designed by Tistory.