본문 바로가기

블록체인_9기/💛 JAVASCRIPT

14강_230317_javascript(onclick, 생성자함수, for~in, BOM, DOM, getElementById, querySelector, innerHTML)

728x90

 

 

 

 


onclick

 

  • 클릭 이벤트 태그이다. 
  • 해당 태그를 클릭했을 때 일어나는 이벤트이다.
<button onclick="btnFn()">글자 입력!</button>
    <!--button 태그에 btnFn 함수를 클릭이벤트로 전달해서 클릭할 때마다 함수가 실행된다.-->

 

 

 


생성자 함수

 

  • 객체를 함수로 만들 때 많이 사용한다.
  • 객체를 생성할 때 사용하는 함수
  • 문법
function createObj(_name, _atk, _def, _speed){          // createObj가 생성자 함수다.
    this.name = _name;
    this.dtk = _atk;
    this.def = _def;
    this.speed = _speed;
}
  • 생성자 함수를 가지고 객체를 생성하는 방법
    • new 키워드 사용.
      • 동적할당이 가능하게 한다.
      • 새로운 객체를 생성하기 위한 메모리 공간을 동적으로 사용할 수 있도록 할당해준다.
      • new 키워드 사용 시 빈 객체를 만들어주고 생성자 함수를 실행시켜서 this가 빈 객체를 참조한다.
      • 키 값을 추가해주고 객체를 만들어준다.
let temp = {
    name: "이름";
    age: "나이";
    
}
// 한 사람을 temp라는 객체로 만들어 놓고 해당 사람의 정보를 키와 값으로 만들어서 하나의 오브젝트화 시킨다. (물건도 마찬가지)

 

let obj = new createObj("고블린", 100, 100, 10);
console.log(obj);
//결과: createObj > def: 100, dtk: 100, name: "고블린", speed: 10
let obj2 = new createObj("트롤", 200, 100, 10);
console.log(obj2);
//결과: createObj > def: 100, dtk: 200, name: "트롤", speed: 10
//객체를 편하게 동적으로 할당할 수 있다.

//접근 방법
obj.name		// obj객체의 name값인 고블린이 출력된다.
  • 객체의 값에 접근하는 방법
let obj_name = "고블린";
let obj_atk = 100;

//obj._name: 객체의 값에 접근하는 방법
console.log(obj.name);				//값: 고블린
//obj["name"] : 객체의 값에 접근하는 방법
console.log(obj["name"]);			//값: 고블린

 

 

 


for ~ in 반복문

 

  • 자동완성 했을 때 object라고 적혀있는 변수에 우리가 보고싶은 객체를 넣어준다.
  • 객체의 속성들을 반복하여 작업을 수행할 수 있다.
  • 모든 객체에서 사용이 가능하다.
const obj = {
    name: 'curryyou',
    job: 'engineer'
}

for (const key in obj){
    console.log(`${key} : ${obj[key]}`);
    
    // name : curryyou
	// job : engineer
}

console.log(key);		//key: 객체안에 있는 키값이 key 변수에 순서대로 담겨 콘솔로 노출된다.

console.log(obj);		//obj: 객체가 키 값의 수 만큼 노출된다.

 

 

 


BOM, DOM

 

DOM(Document Object Model)

  • 문서 객체 모델
    • 문서를 객체의 모양으로 만든 것
    • 문서의 접근을 가능하게 해준다. 
  • 페이지에 있는 태그들을 객체로 표현한 것이다.
  • 문서에 대한 모든 내용을 담고있는 객체. 도큐먼트에 관련 된 내용 모두를 객체화하여 관리 가능하다.
    • 자바스크립트로 객체화된 모델을 이용하여 동적 HTML을 제어할 수 있다.
    • elementds에 대한 접근을 통해 HTML의 내용을 변경할 수 있다.
    • CSS(style)의 내용을 변경할 수 있다.
  • 문서 즉 열려진 페이지에 대한 정보를 따로 객체화 시켜서 관리한다.

document

  • 객체에서 태그를 선택하는 방법이다. 객체를 이용해서 찾고싶은 태그를 자바스크립트로 가져와서 사용할 수 있다.

BOM(Brouser Object Model)

  • 브라우저 객체
    • 브라우저의 기능들을 객체로 사용할 수 있게 해준 것이다.
  • 브라우저에 대한 모든 내용을 담고있는 객체. 브라우저에 관련 된 내용 모두
  • 뒤로가기, 북마크, 즐겨찾기, 히스토리, URL정보 등..
  • 브라우저가 가지고 있는 정보를 따로 객체화 시켜서 관리함

onload 메소드

  • 브라우저의 랜딩이 끝나고 보여줄 준비가 되었을 때 실행되는 함수
  • 문서 랜더링을 끝내고 실행되는 함수이다.

 

 


태그 선택자

ID

getElementById

  • 메소드로 태그의 아이디를 찾아서 태그를 가져올 수 있다.
  • 아이디 값이 있는 태그는 그냥 변수처럼 사용해도 된다.
let div2 = document.getElementById("div1");
//HTML에서 div1이라는 ID값을 가진 태그를 접근하거나 조작할 수 있다.

let div3 = div1;
//아이디 값이 있는 태그는 그냥 변수처럼 사용해도 된다.

 

querySelector

  • 만능이다. 이 선택자만 사용할 정도이다.
  • 선택자를 받아서 선택자와 일치하는 첫 번째 엘리먼트 요소를 반환한다. 일치하는 요소만을 반환할 수 있으므로, 일치하는 요소가 없을 경우 null값을 반환한다.
let div4 = document.querySelector('#div1')
//아이디(#) div1을 찾아줘
구분 getElementById querySelector
차이점 기호(#)없이 아이디명 입력 css 선택자를 입력한다.
id가 명시되어 있는 요소에서만 사용이 가능하다.
공통점 요소를 찾아서 반환해준다.
반환된 요소는 dom 본 객체이다. 따라서 조작할 수 있는 대상이다.

 

CLASS

querySelector

  • id는 지정되는 이름이 중복될 수 없으므로 변수처럼 사용할 수 있지만, class의 경우에는 중복으로 선언이 가능하므로 변수처럼 사용이 불가하다.
  • 문서를 읽다가 첫 번째로 발견한 태그 하나만을 가져온다.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="class_div">나는 div 1번!</div>
    <div class="class_div">나는 div 2번!</div>
    <div class="class_div">나는 div 3번!</div>
    <div class="class_div">나는 div 4번!</div>
</body>
<script>
    let div = document.querySelector('.class_div');
    
    console.log(div);
    //결과: <div class="class_div">나는 div 1번!</div>
</script>
</html>

 

querySelectorAll

  • 해당하는 전채 태그들을 가져온다.
  • 배열의 형태로도 가져올 수 있다.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="class_div">나는 div 1번!</div>
    <div class="class_div">나는 div 2번!</div>
    <div class="class_div">나는 div 3번!</div>
    <div class="class_div">나는 div 4번!</div>
</body>
<script>
    let div = document.querySelectorAll('.class_div');
    
    console.log(div);
    /*결과
    NodeList(4)
    0: div.class_div
    1: div.class_div
    2: div.class_div
    3: div.class_div
    length: 4
    [[prototype]]: NodeList
    */

   console.log(div[2]);
   //결과: <div class="class_div">나는 div 3번!</div>

</script>
</html>

 

 

 


innerHTML

 

JS에서 태그에 텍스트 넣기

  • querySelector로 가져온 도큐먼트 오브젝트의 내용이나 내부 HTML코드를 자바스크립트에서 변경할 수 있다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="div1"></div>
    <div id="div1"></div>
    <div class="class_div"></div>
    <div class="class_div"></div>
    <div class="class_div"></div>
    <div class="class_div"></div>
</body>
<script>
    div1.innerHTML = "<div>나는 div태그야</div>";
    div1.innerHTML = "<ul><li>나는 ul 태그임</li></ul>";
    console.log(div1.innerHTML);
    // 브라우저에서 읽어서 해석하기 때문에 div, ul 등이 해석된다.


    let div2 = document.querySelector('.class_div');
    div2.innerHTML = "나는 class_div를 가진 첫 번째 태그야";
    //결과: HTML의 class_div의 첫 번째 영역에서 해당 텍스트 노출
    
    let div3 = document.querySelectorAll('.class_div');
    div3[2].innerHTML = "나는 class_div를 가진 세 번째 태그야";
    //결과: HTML의 class_div의 세 번째 영역에서 해당 텍스트 노출
    
</script>
</html>

 

++ JS에서 버튼에 기능넣기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="div1"></div>
    <div id="div1"></div>
    <div class="class_div">1 나는 div 태그</div>
    <div class="class_div">2 나는 div 태그</div>
    <div class="class_div">3 나는 div 태그</div>
    <div class="class_div">4 나는 div 태그</div>
    <button onclick="btn()">텍스트 통일</button>
</body>
<script>
    function btn(){
    //class_div클래스를 가지고 있는 태그들을 div 변수에 담는다.
        let div = document.querySelectorAll('.class_div');
        //그 배열들을 forEach로 순회하면서 아이템을 매개변수로 받는다.
        div.forEach(function(i){
            i.innerHTML = "이 문자로 통일! 버튼눌렀지?";
        });
    }
    
</script>
</html>
Document
1 나는 div 태그
2 나는 div 태그
3 나는 div 태그
4 나는 div 태그

 

 


👩‍🏫총괄예시_input으로 정보 입력받아 리스트 제작

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>세번째</title>
    <link rel="stylesheet" href="./index3.css">
</head>
    <style>
      .buttondiv{
    border: 1px solid black;
    width: 100px;
    height: 50px;
    background-color: antiquewhite;
    border-radius: 12px;
    box-shadow: 1px 1px 1px black;
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    }
    </style>
<body>
    <label for="">이름</label>
    <input type="text">
    <label for="">나이</label>
    <input type="text">
    <label for="">내용</label>
    <input type="text">

    <ul id="talbles">
        <li></li>
    </ul>

    <div class="buttondiv" onclick="divBtn()">버튼</div>
    
</body>
<script>

    //생성자 함수 생성
let objArr = [];



function create(name, age, content){        //객체를 만들 수 있다.
    this.name = name;
    this.age = age;
    this.content = content;
}


function divBtn(){              // 버튼 누르면 실행시킬 기능
    console.log("나 눌렸어");     
    addArr();
    //화면을 업데이트 하기 위해 만든 함수
    dro();
}


function addArr(){      //객체를 배열에 추가하는 기능
    //new 키워드로 빈 객체를 만들고 함수에서 this로 그 객체를 참조해서
    //name 키에는 값을 매개변수로 "이름"을
    //age 키에는 값을 매개변수로 10을
    //content 키에는 값을 매개변수로 "나 컨텐츠"를 전달해서 빈 객체에 키 값을 추가해준다.
    //obj라는 변수에 만들어진 객체를 넣어준다.
    
    //input 태그명을 querySelectorAll 메소드 매개변수로 전달해서 
    //input 태그들을 배열로 가져와서 inputs 변수에 담아놓고
    let inputs = document.querySelectorAll("input");
    console.log(inputs);
    //input 태그는 value라는 키 값이 있다.
    //input에 입력한 값이 value키에 값으로 담긴다.
    console.log(inputs[0].value);
    console.log(inputs[1].value);
    console.log(inputs[2].value);

    let obj = new create(inputs[0].value, inputs[1].value, inputs[2].value);
    objArr.push(obj);
    console.log(objArr);
    //객체와 배열은 래퍼런스 타입이기 때문에 값이 아니라 키 값의 주소를 들고 있다.
    //일반변수(원시타입)는 값을 가리키는 주소를 가리키지만 obj의 경우는 값을 
    //주소를 들고 있는 개념. 주소를 console에 찍기 때문에 주소를 바라보면 마지막으로 변한 값을 확인 할 수 있다.
    //주소는 값을 가리키는 친구. 
}


//무언가를 그려주는 함수
function dro(){
    let text = "";      // 렌더링 하기 전에 문자열 초기화
    objArr.forEach(function(i){
        // +=: 원래 있는 값에 추가를 시켜준다. 값을 덧붙인다.
        // 예. +=2 / 원래 있는 값에 2씩 증가
        text += `<li>이름: ${i.name} 나이: ${i.age} 내용: ${i.content}</li>`
    });
    console.log(text);
    //text 지역변수는 여기서 사용하고 끝
    document.querySelector('#talbles').innerHTML = text;
}

</script>
</html>
세번째
버튼

 

 

 

 

 

728x90