틱택토용으로 3x3 테이블은 한번에 만드는 코드는 table>(tr>td*3)*3 이다 그러면 아래와 같이 자동으로 아래 코드가 생성된다 <table> <tr> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> </tr> </table> 위 코드만 치면 테이블이 모습을 나타내지 않기에 style을 넣어줘야한다. <style> td{ border: 1px solid black; width: 80px; height: 80px; } </style>
이것을 그대로 JS로 구현할 수 있다.
1 2 3 4 5 6 7 8 9 10 11
var 바디 = document.body; var 테이블 = document.createElement('table'); for (let i=1; i<4; i+=1){ var 행 = document.createElement('tr'); for(let j=1; j<4; j+=1){ var 열 = document.createElement('td'); 행.appendChild(열); } 테이블.appendChild(행); } 바디.appendChild(테이블);
직장생활팁 : 실무에서는 무조건 html로 작성해야한다. 그게 더 효율적임. js로 나타낼 수 있다는 걸 알기만 하면 됨.
2. JS에서 HTML 태크 만들기
1
<div>태그만들기</div>
을 js에서 만들려면 아래와 같이 만들면 된다.
1 2 3
var div태그 = document.createElement('div'); //div태그를 만드는 것 div태그.textContent = '태그만들기'; // 만든 태그에 내용을 적는 것 document.body.append(div태그); // 만든 태그를 body에 표현하는 것. 이걸 꼭 해야함.
3가지가 세트라고 생각하면 됨. 3종세트!
3. 자식태그만들기
1 2 3
<div>태그만들기 <button>버튼</button> </div>
을 js에서 만들려면 방법2가지가 있다.
1 2 3 4 5 6 7 8 9
방법 1 : append 쓰기
var div태그 = document.createElement('div'); div태그.textContent = '태그만들기'; document.body.append(div태그);
var 버튼태그 = document.createElement('button'); 버튼태그.textContent = '등록'; div태그.append(버튼태그); //div태그(부모태그)안에 자식태그로 넣는 것.
1 2 3 4 5 6 7 8 9
방법 2 : appendChild 쓰기
var div태그 = document.createElement('div'); div태그.textContent = '태그만들기'; document.body.append(div태그);
var 버튼태그 = document.createElement('button'); 버튼태그.textContent = '등록'; div태그.appendChild(버튼태그); //div태그(부모태그)안에 자식태그로 넣는 것.
둘 다 잘 작동한다
그렇다면 둘의 차이점은 무엇일까?
4. .append와 .appendChild의 차이점
1 2 3
<div>태그만들기 <buttonid='비교해보자'>등록</button> </div>
기존 js
1 2 3 4 5 6 7 8
var div태그 = document.createElement('div'); div태그.textContent = '태그만들기'; document.body.append(div태그);
var 버튼태그 = document.createElement('button'); 버튼태그.textContent = '등록'; 버튼태그.id = '비교해보자' div태그.append(버튼태그); //div태그(부모태그)안에 자식태그로 넣는 것.
위와 같이 이미 만들어져있는 HTML에서 ‘버튼’뒤에 string을 추가하고 싶다.
이때 2가지 비교해보자.
1 2 3 4
방법 1 : append 쓰기
기존 js의 아래부분에 추가한다 document.getElementById('비교해보자').append(" 이건 어팬드");
버튼안에 ‘버튼 이건 어팬드’라고 출력되며 잘 작동한다
두번째 appendChild쓰면 어떨까?
1 2 3 4 5
방법 2 : appendChild 쓰기
기존 js의 아래부분에 추가한다 document.getElementById('비교해보자').appendChild(" 이건 어팬드차일드"); //TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
타입에러가 난다.
왜일까?
appendChild는 element가 필요하기 때문.
따라서 아래와 같이 적어야한다.
1 2 3 4 5 6 7 8
방법 2-1 : appendChild 쓰기
기존 js의 아래부분에 추가한다 var 어팬드차일드 = document.createElement('text'); 또는 var 어팬드차일드 = document.createElement('span'); 어팬드차일드.textContent = ' 이건 어팬드차일드' document.getElementById('비교해보자').appendChild(어팬드차일드);
버튼안에 ‘버튼 이건 어팬드차일드’라고 출력되며 잘 작동한다
만약 버튼 안의 text를 아예 바꾸고 싶다면 appendChild와 innerHTML를 세트로 사용하면 된다!
1 2 3 4 5 6 7
방법 2-2 : appendChild + innerHTML 세트로 쓰기
//이 방법은 기존js에서 수정이 필요하다 //div태그.append(버튼태그);에서 appendChild로 수정이 필요하다
var 바디 = document.body; var 테이블 = document.createElement('table'); var 행들 = []; var 열들 = []; for (let i=1; i<4; i+=1){ var 행 = document.createElement('tr'); 행들.push(행); 열들.push([]); //빈 배열 3개를 만듬 즉, 행 3개를 만듬 console.log(행들, 열들); for(let j=1; j<4; j+=1){ var 열 = document.createElement('td'); 행.appendChild(열); } 테이블.appendChild(행); } 바디.appendChild(테이블);
콘솔로그를 확인하면
빈 배열 3개가 생겼으므로 그 배열에 2차원 배열을 넣어야한다.
두번째 스탭은
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
//틱택토게임STEP1. JS로 3X3테이블만들기
var 바디 = document.body; var 테이블 = document.createElement('table'); var 열들 =[]; for (let i=1; i<4; i+=1){ var 행 = document.createElement('tr'); 열들.push([]); //빈 배열 3개를 만듬 즉, 행 3개를 만듬 for(let j=1; j<4; j+=1){ var 열 = document.createElement('td'); 열들[i-1].push(열); //왼쪽상단제일첫번째칸에 열을 넣는 것. 행.appendChild(열); } 테이블.appendChild(행); } 바디.appendChild(테이블); console.log('행들' , 행들, '열들', 열들);