1차 미니 프로젝트 서서히 시작

수업과 병행하며 주간 과제로 점차 준비

(4월 말 쯤에 미니프로젝트 본격적으로 시작 / 기간은 대략 2~3주)

 

오늘의 수업.

jQuery 계속해서 학습

 

 

●  ID, Class, Tag, 체크박스에서 체크된 것만 찾기

<script>
    function findElementById() {
        var jq_p1 = $("#p1");
        console.log("찾은 엘리먼트 수: ", jq_p1.length);
        // jq_p1 객체는 배열이 아니지만 배열처럼 사용가능하다.
        // jQuery 내부에 배열이 있다는 것을 알아두자.
        console.log("내부 배열의 0인덱스 저장된 엘리먼트: ", jq_p1[0])
    }
    function findElementByClass() {
        var jq_class1 = $(".class1");  // jquery리 객체를 반환
        console.log("찾은 엘리먼트 수: ", jq_class1.length);
        console.log("내부 배열의 0인덱스 저장된 엘리먼트: ", jq_class1[0]);  // 타입은 다르지만 사용 방법은 같다..
        for(var el of jq_class1){
            console.log(el);
        }
    }
    function findElementByTag() {
        jq_p = $("p");
        console.log("찾은 엘리먼트 수: ", jq_p.length);
        for(var el of jq_p){
            console.log(el);
        }
    }
    function findElementByChecked() {
        var jq_checked = $("[name=skill]:checked");
        for(var el of jq_checked){
            console.log(el);
        }
    }
</script>

<!-- body 태그 내부 -->
<!-- 버튼을 이용하여 상태 변화 시키기 -->
<button onclick="findElementById()" class="btn btn-info btn-sm">ID로 찾기</button>
<button onclick="findElementByClass()" class="btn btn-info btn-sm">Class로 찾기</button>
<button onclick="findElementByTag()" class="btn btn-info btn-sm">Tag로 찾기</button>
<button onclick="findElementByChecked()" class="btn btn-info btn-sm">체크된 것만 찾기</button>
<hr/>

<div class="d-flex"> <!-- display box model에서 학습했었다. display:flex; = 행 방향으로 배치 -->
    <!-- p태그는 원래 블록요소인데, display:flex가 적용되어 한 행에 모두 표현된다. -->
    <p id="p1" class="border border-danger bg-success" style="width: 100px; height: 100px;"></p>
    <p class="class1 border border-dark bg-danger" style="width: 100px; height: 100px;"></p>
    <p class="class1 border border-danger bg-info" style="width: 100px; height: 100px;"></p>
</div>
<hr/>

<!-- <div class="d-flex align-items-center justify-content-center" style="height:300px;"> -->
<div class="d-flex align-items-center">
    <div class="me-3"><input type="checkbox" name="skill" value="java"/>java</div>
    <div class="me-3"><input type="checkbox" name="skill" value="javascript"/>javascript</div> 
    <div class="me-3"><input type="checkbox" name="skill" value="vue"/>vue</div> 
</div>

 

 

● 엘리먼트 변경 및 추가 / 삭제

<script>
    function changeContent(){
        // 기존 내용을 대체  // jqeury는 .innerHTML을 사용하지 못함. 항상 메소드로 사용한다.
        // jQuery 리퍼런스 도큐먼트 살펴보자.
        $("#div1").html("<img src='/htmlcssjs/resources/image/ul/king1.jpg' width='150'/>");
    }
    function appendContent(){
        // 기존 내용 뒤에 추가
        // jQuery 리퍼런스 도큐먼트 add
        $("#div1").append("<img src='/htmlcssjs/resources/image/ul/king2.jpg' width='150'/>");
    }
    function deleteContent(){
        // 맨 뒤에 있는 엘리먼트 삭제
        $("#div1").find("img:last-Child").remove();
        // 기존 내용을 모두 삭제
        // $("#div1").html("");
        //$("#div1").empty();
        // $("#div1").remove();를 실행하게 되면 "#div1"이 것 자체를 지워버리겠다는 의미이다.
    }
    function changeSize(){
        $("#img1").css("width", "50px");
        $("#img1").css("height", "50px");
        $("#img1").css("border-radius", "25px");
        $("#img1").css("border-width", "2px");
        $("#img1").css("border-color", "red");
        $("#img1").css("border-style", "solid");
    }
    function chageAttribute(){
        $("#img2").attr("src", "/htmlcssjs/resources/image/ul/king6.jpg")
    }
</script>

<!-- body 태그 내부 -->
<button onclick="changeContent()" class="btn btn-warning btn-sm">변경</button>
<button onclick="appendContent()" class="btn btn-warning btn-sm">추가</button>
<button onclick="deleteContent()" class="btn btn-warning btn-sm">삭제</button>
<hr/>
<div id="div1"></div>

<!-- 스타일 변경 -->
<button onclick="changeSize()" class="btn btn-primary btn-sm">크기 변경</button>
<hr/>
<div id="div2">
    <img id="img1" src="/htmlcssjs/resources/image/ul/king3.jpg" width="200" />
    <img class="rounded-circle" src="/htmlcssjs/resources/image/ul/king4.jpg"
            width="200" height="200"/>
</div>

<!-- 속성값 변경 -->
<button onclick="chageAttribute()" class="btn btn-primary btn-sm">속성값 변경</button>
<hr/>
<div id="div3">
    <img id="img2" 
        src="/htmlcssjs/resources/image/ul/king5.jpg"
        class="rounded-circle"
        width="200" height="200"/>
</div>

 

 

jQuery ready 이벤트 처리

<script>
    console.log("해석 전: ", $("img").length);

    function loadCompleted() {
        console.log("모든 자원이 다운로드 완료됨");
        console.log("모든 자원이 다운로드 완료된 후: ", $("img").length)
    }

    // documnet 자체를 jquery 객체로 변환하여 해석(ready)이 끝나면 실행
    $(document).ready(function() {
        console.log("HTML 해석이 완료됨 (1)");
        console.log("해석 후: ", $("img").length);
    });

    $(function() {
        console.log("HTML 해석이 완료됨 (2)");
        console.log("해석 후: ", $("img").length);
    });

    $(() => {
        console.log("HTML 해석이 완료됨 (3)");
        console.log("해석 후: ", $("img").length);
    });
</script>

<body onload="loadCompleted()">
    <div class="card">
      <div class="card-header">jQuery ready 이벤트 처리</div>
      <div class="card-body">
        <!-- <button class="" onclick="">이미지 다운로드</button> -->
        <img src="/htmlcssjs/resources/image/ul/king1.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king2.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king3.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king4.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king5.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king6.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king7.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king8.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king9.jpg" width="150" height="150" class="me-2 mb-2">
        <img src="/htmlcssjs/resources/image/ul/king4.jpg" width="150" height="150" class="me-2 mb-2">
      </div> 
    </div>
</body>

 

★ 동기적 반응

요청에 의한 다운로드를 기다리고 나서 그 다음 작업을 수행하는 것.

 

★ 비동기적 반응

요청에 의한 다운로드를 다시 요청하고, 그 다음 요청을 계속적으로 수행하는 것. HTML 문서구조를 파악하면서 다운로드는 따로 진행한다는 것이다.

 

→ 웹 이미지나 다운로드할 파일이 많을 경우 비동기적으로 구성해야 한다.

 

● ready 이벤트와 load 이벤트

ready : 해석

load : 모든 자원 적재 완료

→ 우리가 여태 했던 $(img)같은 코드는 다운로드를 받기 전에는 사용하지 못한다.

ex) console.log($("img").length);  →  최소한 해석 후 사용을 해야한다.

 


※ 정리

HTML 문서 구조의 해석과 로드 과정의 흐름
1. 순차적으로 문서의 구조를 위에서 부터 아래로 해석한다. (비동기적일 때)
2. 기타 시각적 자료(이미지) 등이 많다면 로드가 길어짐.
3. 이렇게 해석 후 실행할 것, 로드가 완료된 후 실행할 것들을 컨트롤 할 수도 있다. 따라서 이해하는 것이 관건이다.

 


# AJAX 는 스프링 이 후로 배울 것이다.
Asynchronous JavaScript and XML

 


## 오늘의 과제 (쇼핑몰) ##
프로젝트 홈페이지 구성하기

프로젝트 주제 선정.
 ??? 쇼핑몰 → 어떤 아이템을 다룰 것인가?

1) 주제 선정

2) 개발 범위 정하기 → *쇼핑몰 홈페이지 [*로그인, *회원가입, *상품상세 페이지, *마이페이지, *장바구니, 게시판]
상품 상세 페이지 → [*장바구니 넣기, *바로 구매하기]
마이페이지 → [내 정보, 현재 잔액, ... ]
*게시판 → 구매 후기, 리뷰 (쓰기, 수정, 보기, 삭제, 목록)
*관리자 페이지 → [*상품 등록, *상품 조회, *상품 수정]

3) 디자인 (설계)

4) 기능 구현

 

ex)
@ 프로젝트 명
teamname_mini_web
ㄴ src

팀 소스 관리 (수업 내일)
ㄴ git / github

ppt로 프로젝트의 대략전인 구성 표현
벤치마킹 사이트 찾기

'JAVA' 카테고리의 다른 글

30일차 2024 - 4 - 8  (0) 2024.04.08
29일차 2024 - 4 - 5 (Git과 GitHub)  (0) 2024.04.05
27일차 2024 - 4 - 3  (0) 2024.04.03
26일차 2024 - 4 - 2  (0) 2024.04.02
25일차 2024 - 4 - 1  (0) 2024.04.01

+ Recent posts