JavaScript

부트캠프34일차(JS[요소조회출력, 문자열,Math, 조건문])

동곤일상 2025. 3. 20. 17:50
반응형

1) 요소출력

1-1) id속성값 이용

1-2)태그이름 이용

1-3)name속성 이용

1-4)class속성값 이용

1-5)선택자를 이용

1-6) 정리

2)문자열

2-1)기본메서드

2-2)문자열관련 HTML(비권장)

 

3)Math

3-1)숫자관련메서드

3-2)문자열 숫자간의 산술,형변환

3-3) 예제

 

4)조건문 반복문

4-1) 조건문

4-2) 반복문

4-3) 예제

 

5) 최종예제


1) 요소출력

1-1) id속성값 이용해 조회

 overflow : auto; --> 영역의 범위이상이 되면 
            내부에서 태그를 만듬(벗어나지않음)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .area{
            border: 1px solid black;
            width: 300px;
            height: 100px;
            overflow: auto; 
            /*
            영역의 범위이상이 되면 
            내부에서 태그를 만듬(벗어나지않음)
            */
        }
    </style>
</head>
<body>
    <h1>HTML 요소에 접근하기(태그객체 조회)</h1>
    <h3>아이디 속성을 이용해 조회하기</h3>
    <div class="area" id="area1" style="background-color: rgb(153, 209, 49);"></div>
 
    <button onclick="accessId()">아이디로 접근</button>
</body>
<script src="ex05_요소.js"></script>
</html>

 

JS코드

function accessId(){
    //divEl : <div id="area1"..></div>태그 객체 요소(Element) 
    const divEl = document.getElementById('area1');
    divEl.innerHTML += "아이디로 접근완료<br>"
    divEl.style.color = "white";
    divEl.style.fontWeight = "bold";

    //함수 작동(버튼 클릭) 시 style적용

    //현재배경색이 red--> yellow -->red-->,....
    if( divEl.style.backgroundColor== "red"){
        divEl.style.backgroundColor = "yellow";
        divEl.style.color= "black";
    }
    else if(divEl.style.backgroundColor =="yellow" ){
        divEl.style.backgroundColor ="red"; 
    }

    //divEl태그의 크기변경
    divEl.style.width="200px";
    divEl.style.height="200px";

}

 


1-2) 태그(요소)이름으로 조회

JS코드에서는 태그를 이용한 조회도 가능하다

document.getElementsByTagName('태그명')

 <h3>태그 이름을 이용해 조회하기 : document.getElementsByTagName</h3>
    <ul>
        <li>목록1</li><li>목록2</li><li>목록3</li><li>목록4</li>
        <li>목록5</li>
    </ul>
    <button onclick="accessTagName();">태그로 접근</button>
    <script src="ex05_요소.js"></script>

 

JS코드

function accessTagName(){
    const liEl = document.getElementsByTagName("li");
    liEl[0].innerHTML = "Hello";
    //li태그는 여러개이므로 배열로 조회 될것임
    //innerHTML 이라는 속성이 존재하지않음
    //배열에 값을 넣듯  인덱스번호로 넣어야함

    //타입과 갯수 확인
    console.log(liEl, typeof(liEl));
    console.log("li요소의 갯수 ",liEl.length);

    let blueColor = 30;
    for(let i=0 ; i<liEl.length ; i++){
        liEl[i].innerHTML = "안녕하세요";
        liEl[i].style.backgroundColor = 
            "rgb(200,125,"+blueColor+")";
        blueColor+=60;
        //루프를돌수록 글씨가 진해짐(blue색상)
    }
 
}

 


1-3) name속성으로 접근

document.getElementsByName('name명')

- 현재페이지에서 name속성값을 가진 모든요소조회(배열)

<h3>name속성값 이용해 조회하기 : document.getElementsByName</h3>
    <form action="">
        <fieldset>
            <legend>취미</legend>
            <input type="checkbox" id="game" name="hobby" value="game">
            <label for="game">게임</label>
            <input type="checkbox" id="movie" name="hobby" value="movie">
            <label for="movie">영화</label>
            <input type="checkbox" id="reading" name="hobby" value="reading">
            <label for="reading">독서</label>
            <input type="checkbox" id="sports" name="hobby" value="sports">
            <label for="sports">운동</label>
            <!--
            label은 for 과 id가 일치할 시
            태그내에 문장을 누르면 check해줌
            -->
        </fieldset>
    </form>
    <br>
    <button onclick="accessName();">name으로 접근</button>
    <div class="area" id="area3"></div>

JS

function accessName(){
    //getElementsByName('속성값')
    //현재페이지에서 name속성값을 가진 모든요소조회(배열)
    const hobby=document.getElementsByName('hobby');//배열
    const divEl = document.getElementById('area3');//요소객체
    let ho =" "; //문장을 쌓아둘 변수

    for(let i = 0; i<hobby.length; i++){
        //hobby[i].checked : checkbox선택 여부
        if(hobby[i].checked){
           ho += hobby[i].value + "<br>"
        }
    }
    //쌓아둔 문장을 innerHTML로 넣는다
    divEl.innerHTML = ho; 
}

 


1-4) class속성값 이용해 조회하기 : 

 

document.getElementsByClassName('class명')

 

# 단점 : 클래스명이 포함된 객체의

              하위객체까지 가져오게 됨

<h3>class속성값 이용해 조회하기 : document.getElementsByClassName</h3>
<div class="test"></div>
    <p class="test"></p>
    <ul class="test">
        <!--조회 시 ul태그 전체의 객체를 보내게 됨-->
        <li></li>
    </ul>
    <pre class="test test1"></pre>
    <!--class속성은 " "로 구분하기때문에 
     class명에 test가 포함되면 조회가능-->
    <button onclick="accessClass();">Class로 접근</button>
<br><hr>
function  accessClass(){
    const arr = document.getElementsByClassName("test");
    for(let i=0 ; i<arr.length ; i++){
        console.log(arr[i]);
    }
}

ul만 가져오는것이 아닌 태그내부의 li까지 가져옴

 


1-5) 선택자를 이용해 접근( 가장많이사용)

document.querySelector("선택자");

 

<h3>선택자를 이용해 요소 조회해보기 : document.querySelector</h3>
<div id="test1">테스트입니다</div>
<div class="test">
    <h2>안녕</h2>
    <h2>잘가렴</h2>
    <span>lfjsofjwofwf</span>
</div>
<span> zzzzzz</span>
<h2>BYE</h2>
<button onclick="accessSelector();">클릭</button>

 

function accessSelector(){
    const divEl = document.querySelector("#test1");
    const divEl2 = document.querySelector(".test>h2");//하위 1개만
    const divEl3 = document.querySelectorAll(".test>h2");//배열객체로전달
    console.log("테스트1 "+divEl.innerHTML);
    console.log("테스트2 "+divEl2.innerHTML);
    for(let i =0 ; i<divEl3.length ; i++){
        console.log("테스트3 "+divEl3[i].innerHTML);
    }
    
}


1-6) 정리

 

 Dom(Document Object Model ): 문서객체모델
    - HTML 문서의 태그들을 객체로 처리하는 방식
    - 객체조회방식
        1)document.getElementById("id속성값") : 요소리턴       
        2)document.getElementByName("name속성값") : 배열리턴
        3)document.getElementByTagName("Tag명") : 배열리턴
        4)document.getElementByClassName("class속성값") : 배열리턴
        5)document.querySelector("선택자") : 요소리턴
        6)document.querySelectorAll("선택자") : 배열리턴   

   
    -조회 할 태그가 반드시 스크립트 실행 전에 먼저인식되어야함
    (함수내에서의 DOM처리는 가능)

 


2) 문자열

 

2-1) 기본메서드

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .area{
        width: 500px;
        border: 1px solid black;
        overflow: auto;
    }
    .big{height: 500px;}
    .small{height: 250px;}
    </style>
    
</head>
<body>
    <h3>문자열과 관련된 기본메서드</h3>
    <button onclick="stringTest();">문자열처리 메서드</button>
    <div class="area big" id="area1"></div>

    <script src="ex06.js"></script>
</body>

 

알아야하는것

문자열과 함수를 같이 사용 시

백틱(`) 을 사용해보자  작은따옴표(')와 다름

 

JS

function stringTest(){
    const divEl = document.querySelector("#area1");
    let str1 = "Hello World";
    divEl.innerHTML = "str1 : "+str1+"<br>";
    divEl.innerHTML+=`toUpperCase(): ${str1.toUpperCase()}<br>`;
    //' 가 아니라 백틱(`) 로 사용(~쪽 버튼에있음)
    divEl.innerHTML += `toLowerCase() : ${str1.toLowerCase()}<br>`

    for(let i=0 ; i<str1.length ; i++){
        divEl.innerHTML+= `${i}번쨰 인덱스 : ${str1.charAt(i)}<br>`
    }

    //indexof : 문자의 위치리턴
    divEl.innerHTML += "<h3>indexOf</h3>"
    divEl.innerHTML += `문자열의 길이 : ${str1.length}<br>`
    divEl.innerHTML += `앞에서부터 첫 l의위치 : ${str1.indexOf('l')}<br>`
    divEl.innerHTML += `뒤에서부터 첫 l의위치 : ${str1.lastIndexOf('l')}<br>`
    divEl.innerHTML += `a문자의 위치 : ${str1.indexOf('a')}<br>`
    
    //부분문자열 : substring(시작인덱스,종료인덱스-1)
    //              substr(시작인덱스,글자수)
    divEl.innerHTML += "<h3>부분문자열</h3>"
    divEl.innerHTML +=`substring(시작인덱스) : ${str1.substring(6)}<br>`
    divEl.innerHTML +=`substring(시작인덱스,끝) : ${str1.substring(6,9)}<br>`
    divEl.innerHTML +=`substr(시작인덱스) : ${str1.substr(6)}<br>`
    divEl.innerHTML +=`substr(시작,글자수) : ${str1.substr(1,4)}<br>`

    //startsWith , endsWith
    divEl.innerHTML += "<h3>startsWith , endsWith</h3>"
    divEl.innerHTML +=`startsWith('H')로 시작? : ${str1.startsWith('H')}<br>`
    divEl.innerHTML +=`endsWith('d'')로 끝? : ${str1.endsWith('d')}<br>`

    //문자의 치환
    divEl.innerHTML += "<h3>replace(치환)</h3>"
    let str2 = "JavaJavaJavaJavaJavaJava"
    divEl.innerHTML += "str2원본 : "+str2+"<br>";
    divEl.innerHTML += `replace(원본,치환):${str2.replace('Java','자바')}<br>`;
    divEl.innerHTML += `replaceAll(원본,치환):${str2.replaceAll('Java','자바')}<br>`;

    //문자열의 분리
    divEl.innerHTML += "<h3>문자열의 분리</h3>"
    let str3 = "사과 바나나 복숭아 키위"
    let fruits = str3.split(" "); //배열 (" "을 기준으로 나눔)
    divEl.innerHTML += `fruits의자료형  ${typeof(fruits)}<br>`
    divEl.innerHTML += `fruits의 크기 ${str3.length}<br>`

    for(let i =0 ; i< fruits.length ; i++){
        divEl.innerHTML += fruits[i]+"<br>"
    }
     divEl.innerHTML += `배열요소를 하나의 문자열로 : ${fruits.join("-")}<br>`



}


2-2)  문자열과 관련된 HTML 메서드 (비권장)

<body>
    <h3>문자열관련 html메소드</h3>
    <button onclick="stringHtmlTest();">문자열html코드</button>
    <div id="area2" class="area small"></div>
    <script src="ex06_htmlString.js"></script>
</body>
function stringHtmlTest(){
    const divEl = document.querySelector("#area2");
    let str = "javascript"
    divEl.innerHTML = `str : ${str}<br>`
    divEl.innerHTML+= `bold() : ${str.bold}<br>`
    divEl.innerHTML += `italics() : ${str.italics()}<br>`
    divEl.innerHTML += `sub(),sup() : ${str.sub()},${str.sup()}<br>`
    divEl.innerHTML += `link() : ${str.link("http://www.naver.com") }<br>`

    //이와같은 방식을 더 추천함
    divEl.innerHTML += `link() : ${`<a href="http://www.naver.com" target="_blank">${str}</a>`}<br>`

}

CSS와 역할이겹치므로 권장은 하지않는다

 


3) Math

3-1) 숫자관련 메서드

<body>
    <h3>숫자 (수학)관련 메서드</h3>
    <button onclick="mathTest();">수학관련 메서드</button>
    <div id="area1" class="area small"></div>
    <script src="ex07_Math.js"></script>
    
</body>

 

JS

function mathTest(){

    const divEl = document.querySelector("#area1");
    divEl.innerHTML += `<h3>Math</h3>`
    divEl.innerHTML += `절대값 : ${Math.abs(-123)}<br>`
    divEl.innerHTML += `랜덤값 : ${Math.random()}<br>`
    divEl.innerHTML += `랜덤값(1~10정수) : ${parseInt(Math.random()*10)+1}<br>`
    divEl.innerHTML += `반올림 : ${Math.round(123.533)}<br>`
    divEl.innerHTML += 
        `반올림(위치지정 불가능) : ${Math.round(123.563,2)}<br>`;
    divEl.innerHTML += `버림 : ${Math.floor(123.631)}<br>`
    divEl.innerHTML += `올림 : ${Math.ceil(123.001)}<br>`
}

제한이 많다 int형으로 바꾸는것도 잘 안됨 


3-2) 문자열과 숫자간의 산술 , 형변환

 

<body>
    <h3>문자열과 숫자간의 산술연산 / 형변환</h3>
    <button onclick="arithmetic();">산술연산</button>
    <div id="area2" class="area small"></div>

    <script src="ex07_Math.js"></script>
    
</body>
function arithmetic(){
    const divEl = document.querySelector("#area2")
    divEl.innerHTML = `test1:${7+7}<br>`//14
    divEl.innerHTML += `test2:${7+"7"}<br>`//77
    divEl.innerHTML += `test3:${"7"+7}<br>`//77
    divEl.innerHTML += `test4:${"7"+7+7}<br>`//777
    divEl.innerHTML += `test5:${"7" - 7}<br>`//0
    divEl.innerHTML += `test6:${"7" / 14}<br>`//0.5
    divEl.innerHTML += `test7:${"7" * "7"}<br>`//14

        //문자열과 숫자간 : 덧셈 외의 산술연산은 가능
        //문자열이 자동형변환된 후 산술연산 진행
        //덧셈연산(+) : 문자열 연결결


        //형변환 함수
        //숫자 <= Number(문자열) : 숫자형이아닌경우 NaN 리턴
        //정수형숫자 <= parseInt(문자열) : 숫자만 찾아 리턴
        //실수형숫자 <= parseFloat(문자열) : 숫자만찾아리턴

   divEl.innerHTML += `test8 : ${7+ Number("7")}<br>`
   divEl.innerHTML += `test9 : ${7+ parseInt("7")}<br>`
   divEl.innerHTML += `test10 : ${7+ parseFloat("7")}<br>`
   divEl.innerHTML += `test11 : ${7+ parseFloat("7.5")}<br>`
   divEl.innerHTML += `test12 : ${7+ "1.234원"}<br>`//71.234 원
   divEl.innerHTML += `test13 : ${7+ Number("1.234원")}<br>`//NaN
   divEl.innerHTML += `test14 : ${7+ parseInt("1.234원")}<br>`//8
   divEl.innerHTML += `test15 : ${7+ parseFloat("1.234원")}<br>`//8.234

//eval 함수 : 사용하지 않는것을 권장함
// 문자열을 수식으로 인식. 결과 리턴
   let str = "100 + 20 * 3";
   divEl.innerHTML+= `test16: ${eval(str)}<br>`
}

 


3-3) 예제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .area{
        width: 500px;
        border: 1px solid black;
        overflow: auto;
    }
    .big{height: 500px;}
    .small{height: 250px;}
    </style>
</head>
<body>
    <p>0~9사이의 임의의 수 2개선택 해 연산의결과를 출력 <br>
        연산의종류는 +,-,*,/,% 중 한개를 임의의 선택 <br>
        결과값을 prompt 창을 이용해 입력받고 ,<br>
        정답인경우 : 정답 <br>
        정답이 아닌경우 : 틀렸습니다 .정답:0 입력값:1 <br>
    </p>
    <h3>임의의 수의 연산</h3>
    <button onclick="start();">계산</button>


    <script src="ex07_exam.js"></script>
</body>
</html>
function start(){
    let num1 = parseInt(Math.random()*10);
    let num2 = parseInt(Math.random()*10);

    let op = ['+','-','/','*','%'];
    let  a = op[Math.floor(Math.random()*op.length)];

    let str = num1 + a +num2;
    
    let result  = prompt(`결과값을 입력해주세요${str} `);
    let result2 = eval(str)

    if(result == result2){
        document.writeln("<div style=color:blue>정답</div>")
    }
    else{
        document.writeln("<div style=color:red> 오답</div>")
        document.writeln(`입력값 : ${result} 정답은 ${result2}`)

    }
}

36입력 시
틀린값 입력 시


4) 조건문 반복문

4-1) 조건문

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>
        <div>국어점수 <span id="kor">81</span>점</div>
        <div>영어점수 <span id="eng">93</span>점</div>
        <div>수학점수 <span id="math">100</span>점</div>
    </div>
    <div>
        <div>평균점수<span id="average"></span>점</div>
        <div>학점<span id="grade"></span>학점</div>
    </div>
    <script src="ex08_조건.js"></script>
    
</body>
</html>

 

JS

let kor = document.querySelector("#kor").textContent;
let eng = document.querySelector("#eng").textContent;
let math =document.querySelector("#math").textContent;
let average = (Number(kor)+Number(eng)+Number(math))/3; //text이므로 number로 형변환시도
document.querySelector("#average").textContent = average;
let grade;
// if(average>=90){grade = 'A';}
// else if(average>=70){grade = 'B';}
// else if(average>=70){grade = 'c';}
// else{grade = 'F';}

switch(true){//js 에서는 case구문에 비교연산이 가능함함
    case average>=90 : grade = 'A'; break;
    case average>=80 : grade = 'B'; break;
    case average>=70 : grade = 'C';break;
    case average>=60 : grade = 'D'; break;
    default : grade = 'F';
}
document.querySelector("#grade").textContent = grade;


4-2) 반복문

    <h3>반복문 연습</h3>
    while : <div id="box1"></div>
    for : <div id="box2"></div>
    do-while : <div id="box3"></div>


    <script src="ex08_조건반복.js"></script>
let n = 1;
while(n<=5){
    document.querySelector("#box1").innerHTML += (n + "&nbsp;&nbsp;");
    n++;
}

for(n = 1 ; n<=5 ; n++){
    document.querySelector("#box2").innerHTML += (n + "&nbsp;&nbsp;");
}

n=1
do{
    document.querySelector("#box3").innerHTML += (n + "&nbsp;&nbsp;");
    n++;
}
while(n<=5);

 


4-3 예제)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>&lt; select name = 'month'&gt;<br>
        &lt; option value =  '1'&gt;1월&lt;/option&gt;<br>
        &lt; option value =  '2'&gt;2월&lt;/option&gt;<br>
        ...
        &lt; option value =  '12'&gt;12월&lt;/option&gt;<br>
        &lt;/select&gt;<br>
        위와 같은 select 태그를 구현해 box1에 저장하자
    </p>
    <div id="box1"></div>
    <script src="ex08_exam.js"></script>
</body>
</html>
let query = "<select name='month'>"
for(i=1 ; i<=12 ; i++){
    query+= `<option value='${i}'>${i}월</option>`
}query += `</select>`

document.querySelector("#box1").innerHTML = query;
//한번에 쿼리문을 전달


예제2)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>
        nums 폴더의 이미지를 num0.jpg~num9.jpg 이미지를 화면에출력하기<br>
        slect태그를 구현해 box1에 출력
    </p>
    <div id="box1"></div>
    <div id="box2"></div>
    <img src="./nums/num0.jpg"> <!--테스트용-->
    <script src="ex08_exam2.js"></script>
    
</body>
</html>
let box = `<table><tr>`
for(i=0 ; i<10 ; i++){
    box+=`<td><img src="./nums/num${i}.jpg"></td>`
}box+=`</tr></table>`

document.querySelector("#box1").innerHTML = box;



let box2='<h1>방법2</h1>';
for(i=0 ; i<10 ; i++){
    box2+=`<img src="./nums/num${i}.jpg"><br>`
}
document.querySelector("#box2").innerHTML = box2;


예제3)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box1 > table{ /*box1의자식인 table에 style을 적용*/
            font-size: 50px;
            background-color: rgba(149, 147, 147, 0.801);
        }
    </style>
</head>
<body>
    <p>3행3열짜리 테이블 생성 , 내용은 1~9 까지의 값을 넣어서
        box1 태그에 출력
    </p>
    <div class= bo id="box1"></div>
    <script src="ex08_exam3.js"></script>
    
</body>
</html>
let box = '<table border=1><tr>';
for(i=1; i<10; i++){
    box+=`<td>${i}</td>`;//${}을 이용해 i값을요소에넣기
    if(i%3 ==0){//3열 마다 행을 바꿔줌
         box+=`</tr><tr>`
        } 
}
box+='</tr></table>';
//다 작성된 table태그를 한번에 
//querySelector를 이용해 div태그에 넣자
document.querySelector("#box1").innerHTML = box;

주의점 : 쿼리를 넣을 때 작은따옴표(') 대신에

백 (`) 안에 ${}  이용해 쿼리를 넣자 물론 편한대로하면 되긴한다


5) Date

 

let box1 = document.querySelector("#box1");

let now = new Date();
box1.innerHTML += now+"<br>";

let date1 = new Date(2025,(3-1),10,15,20);
//2025-03-10 15:20 의미 (입력값+1month 의 날짜가 들어감)
box1.innerHTML += date1+"<br>";

let date2 = new Date(2025,(3-1),10);
//2025-03-10 의미 (1달뒤에 날짜가 들어감)
box1.innerHTML += date2+"<br>";

let date3 = new Date("2025-03-20 15:20");//문자열로하면 1달차이가나지않음
box1.innerHTML += date3+"<br>";

//-------------------------------보기좋게 넣기-----------------------

let year = now.getFullYear();//2025
let month = now.getMonth()+1; //getMonth는 현재 달의 -1이 반환될것임
let day = now.getDate();//20
let weekNo = now.getDay();// 0:일 ~ 6:토
let hours = now.getHours();
let minute = now.getMinutes();
let second = now.getSeconds();
box1.innerHTML += 
`${year}-${month}-${day} (${weekNo}) ${hours}:${minute}:${second}<br>`;


//UTC 타임기준
 year = now.getUTCFullYear();
month = now.getUTCMonth()+1; //getMonth는 현재 달의 -1이 반환될것임
 day = now.getUTCDate();//20
 weekNo = now.getUTCDay();
hours = now.getUTCHours();//UTC기준은 우리나라보다 9시간이 느림
minute = now.getUTCMinutes();
second = now.getUTCSeconds();

box1.innerHTML += 
`${year}-${month}-${day} (${weekNo}) ${hours}:${minute}:${second}<br>`;


//------------------------------------예제------------------------------

// 3월30일의 요일출력해보기
// getDay()의 반환값 -> 0:일 ~ 6:토
date = new Date(2025,2,30);
let arr= ['일','월','화','수','목','금','토']
weekName = arr[date.getDay()];
box1.innerHTML += `2025-03-30 ${weekName}요일<br>`
//오늘의 요일 출력하기

 

 


5) 최종예제

20250320test.pdf
0.12MB

 

 

1번)

이건 짧을 것 같아서 internal방식으로진행함

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="money"></div>
    
    <script>
        let total = 0 ;
        let a  = ''; //저축문장을 넣어둘 변수

        while(total < 100){ //저축금액이 100보다 적을동안만 반복
        let money = parseInt(Math.random()*10)+1;
        total += money;
       if(money>5){
        a += `저축을 많이하셨습니다 ${money}원 /잔액${total}<br>`;
       }   
        else{
            a += `저축을 적게하셨습니다 ${money}원 /잔액${total}<br>`;
        }
    }
    document.querySelector("#money").innerHTML += a;
    document.querySelector("#money").innerHTML += total+"저축 만료"
    
    
    </script>
</body>
</html>

 

 


 

2번)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>행 열 갯수 입력받아  테이블 생성</h1>
    <caption>행 : </caption>
    <input type="number" id="row"><br>
    <caption>열 : </caption>
    <input type="number" id="cols"><br>
    <button onclick="createTable();">테이블생성</button>
    <div id="box"></div>

    <script src="test2.js"></script>
</body>
</html>

 

JS코드

function createTable(){
    let row = document.querySelector("#row").value;
    let cols = document.querySelector("#cols").value;

    let qu = `<table border=1><tr>`

    for(i=1 ; i<=(row*cols) ; i++){
        qu+=`<td>${i}</td>`;
        if(i % cols ==0){
            qu+=`</tr><tr>`
        }
    }
    qu+=`</tr></table>`

    document.querySelector("#box").innerHTML += qu;
}

행*열  만큼의 for문을 돌린다

그 후  i % cols 가 0 이 된다면

cols의 길이를 다 채웠다는 뜻이므로 

해당행을 끝내고

다음 행으로 넘어간다 </tr><tr>

 


3번)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .area{
            width: 100px;
            height: 100px;
            border: 1px solid rgb(85, 49, 49);
        }
        .size{
            width: 100px;
            height: 100px;
            border: 1px solid red
        }
    </style>
</head>
<body>
    <h1>문제1 색상 선택 후  변경버튼 클릭하면 색상이변경되도록</h1>
    <div class="area" id="di"></div>
    <input type="color" id="color">
    <button onclick="colorChange();">변경</button>

    <br><hr><br>

    <h1>버튼에따른 크기조절이 가능하게 해보세요</h1>
    <div class="size" id="si"></div>
    <button onclick="sizeChange(50);">50x50</button>
    <button onclick="sizeChange(100);">100(원본)</button>
    <button onclick="sizeChange(200);">200x200</button>
    <script src="test3.js"></script>
    
</body>
</html>

 

JS코드

function colorChange(){
    const di = document.getElementById("di");
    let color = document.querySelector("#color").value;

    di.innerHTML = `${color}색`
    di.style.backgroundColor = color;
}
function sizeChange(num){
    const si = document.getElementById("si");
    si.style.width = num+"px";
    si.style.height = num+"px";
}

색깔을 선택하는 태그를 조회 시

value를 조회 해

document.querySelector("#color").value;

 

#xx xx xx의 (16진수RGB)형태로 가져오게 됨

 

div 태그의 style.backgroundColor를 해당 value로 변경해주면 됨

 di.style.backgroundColor = color;

 

문제2)

크기변경의 부분은 버튼을 만든 후

각각 onClick 시 다른매개변수를전달

 si.style.width = "@@@px";
    si.style.height = "@@@px";

와 같은 방식으로 div 의크기를 바꿔줄 수 있음


예제4)

Tag , name 으로 접근 시 배열이 반환됨을 잊지말자

document.getElementsByTagName('태그명') : 배열이 반환

document.getElementsByName('name 속성명') :  배열이반환

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
#area {
	width: 400px;
	height: 150px;
	background: #ffff99;
	border: 1px solid #6666ff;
}
</style>
</head>
<body>

	<h2>HTML 태그에 접근 테스트</h2>
	단, 구매자는 태그 이름으로 접근, 상품명은 아이디로 접근, 구매가격은 name값으로 접근할 것 <br><br>
	
	구매자 : <input type="text" placeholder="구매자의 이름을 입력하세요.">
	<br><br>

	상품명 : <input type="text" id="pname" placeholder="구매 상품명을 입력하세요">
	<br><br>

	가격 : <input type="text" name="price" placeholder="구매 가격을 입력하세요.">
	<br><br>

	<button onclick="printValue();">입력값 출력하기</button>
	<br><br>

	<div id="area"></div>
    <script src="test4.js"></script>
	

</body>
</html>

 

JS코드

function printValue(){
    let buyer = document.getElementsByTagName("input");
    let product = document.getElementById("pname").value;
    let price = document.getElementsByName("price");

    //tag , name 으로 조회하는것들을
    //배열형태로 조회함
    let area = document.querySelector("#area");
    area.innerHTML= `구입자 : ${buyer[0].value}님 <br>
    구입상품 : ${product} <br>
    구매가격 : ${price[0].value}`
}

배열이므로 [0] 과 같이 인덱스요소를 지정한 후 값을 조회하자

 


예제5)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	div {
		border: 1px solid red;
		height: 150px;
	}
</style>
</head>
<body>
	
	<h1>기본 문법 문제</h1>

	문제1. 다음 보기에 있는 텍스트 필드에 작성한 문자열의 길이를 알아올 수 있도록 구현하시오
	
	<fieldset>
    	<legend>보기</legend>
    	<input type="text" placeholder="글자를 작성해보세요" size="100" id="text1">
	</fieldset>
	<br>

	<div id="result1"></div>
	<button onclick="stringLength();"> 확인하기</button>
	
	<br><br>

	문제2. 다음 보기에 있는 문자열을 ,(콤마) 를 기준으로 잘라내어 하나하나 출력하시오 
	<fieldset>
    	<legend>보기</legend>
      	<label id="la1">콜라,사이다,햄버거,피자,한약</label>
	</fieldset>
	<br>

	<div id="result2"> </div>
	<button onclick="stringSplit();"> 확인하기</button>
	
    <script src="test5.js"></script>

</body>
</html>

 

JS코드

function stringLength(){
    let text1 = document.querySelector("#text1").value;
    //어차피 text형태이므로 String이 반환될것이다.
    let result1 = document.querySelector("#result1");
    result1.innerHTML += `<h4>보기의 문자열의
     길이는${text1.length}</h4>`
     //String.length : 문자열길이반환
}

function stringSplit(){
    let la1 =document.querySelector("#la1").textContent; //text조회(Object??)
    let result2 = document.querySelector("#result2");
    let arr = la1.split(",");//,을 기준으로 배열을 만듬
    console.log(arr , typeof(arr))
     for(i=0 ; i<arr.length ; i++){
         result2.innerHTML+= `${i+1} . ${arr[i]}<br>`
     }
}

 

 

내가만든 추가예제

 

<body>
    <h2> 문제 3 다음보기에있는 문자열을보기좋게 리스트로 정렬해보자</h2>
	<fieldset>
    	<legend>보기</legend>
      	<label id="la2">콜라,사이다,햄버거,피자,한약,삼겹살,목살</label>
	</fieldset>
	<button onclick="list();">리스트로만들기</button>
	<div id="result3"></div>

    <script src="test5.js"></script>

</body>
function list(){
    let la2 = document.querySelector("#la2").textContent;
    //text로 읽어와야 split으로 나눌 수 있음
    let arr= la2.split(",");
    let query = '<ul type="square">';
    console.log(arr , typeof(arr));
    for(i=0 ; i<arr.length ; i++){
        query += `<li>${arr[i]}</li>`;
    }
    query+=`</ul>`;
    document.querySelector("#result3").innerHTML +=query;
}