BOM :
Browser Object Model :
브라우저의 객체를 지칭하는 용어 (window 객체)
DOM : Document Object Model :
Html 문서의 객체를 지칭하는 용어 (body 안에 입력된 태그 객체)
윈도우 종류와 브라우저 화면 배율 등에 따라 달라짐
window.innerHeight : 툴바를 제외한 높이
window.innerWidth : 스크롤바를 포함한 너비
window 메서드 종류
window.open('url','window name','option(size,scroll...)');
window.close(); 창닫기
alert(); / prompt(); input 포함 / confirm(); 확인/취소
setInterval(function,millsecond);
일정 간격 지속적으로 실행문을 실행시킬 때 사용
setInterval(callback function, interval duration);
duration 간격으로 function을 호출
clearInterval(객체); : 삭제가능
setTimeout(function, millsecond);
일정 시간 동안 실행문을 실행시킬 때 사용
setTimeout(callback function, duration); duration(millsecond):
시간 후에 function이 실행
setTimeout을 할당한 객체는 clearTimeout(할당한 객체)로 취소가능
millisecond = 1/1000 => 1초 1000
location : location 객체는 브러우저의 주소표시줄 입력에 관련된 객체
window.location / window 생략가능
location.href = 'url' : 해당 url로 이동 / history객체 저장
location.replace('url') : 해당 url로 이동 / history객체 저장하지 않고 이동
location.assign('url') : 해당 url로 이동 / history객체 저장
location.reload() : 현재 페이지에서 새로고침
history객체 : 브라우저가 저장하고 있는 방문 페이지의 기록을 관리하는 객체
history.back() : 이전페이지로 이동
history.forword() : 다음 방문한 페이지로 이동
history.go(n) : n번째 페이지로 이동 -2(이전 2단계)
브라우저 별로 각자의 저장소를 가지고 있고, (브라우저의 기반)
접근방어를 해놓은 브라우저에서는 작동하지 않음.
DOM : Document Object Model html문서 객체 모델
html 하위 태그는 각각의 기능(method), 속성(properties) 을 가지고 있는 문서 객체
element 가져오기 : byId, byClassName, byTagName
document.getElementByid('idName') : 단일 엘리먼트 리턴
document.getElementByClassName('className') : 복수 엘리먼트 리턴 => HTML Collection 타입으로 리턴
document.getElementByTagName('TagName') : 복수 엘리먼트 리턴 => HTML Collection 타입으로 리턴
배열처럼 리턴 index를 사용하여 선택
querySelector(), querySelectorAll() node(관리객체)로 리턴하는 메서드
getElementBy** : HTMLCollection 타입으로 리턴 .value, .name, .id 속성으로 접근 가능
querySelector : nodeList 형태로 리턴 [0] index 번호로만 접근이 가능
더 구체적으로 엘리먼트에 접근하고 싶다면 querySelector
빠르고 편리하게 자원을 지원받으려면 getElementBy**
element 속성은 크게 두가지로 구분
태그의 속성 / css(style) 속성
태그의 속성은 태그가 가지고 있는 속성이기 때문에 속성명을 그대로 사용 li.id, input.value, a.href img.src
class는 여러개의 값을 갖는 속성 / 이런 특징을 가지는 속성들은 별도의 속성명을 사용
object.classList : 모든 클래스를 나열
css관련 속성은 style. 을 통해 프로퍼티에 접근 가능
css 속성 중 - font-size => -를 지우고 첫글자를 대문자로 변경 fontSize
<img src="../image/서브이미지1.jpg" alt="옷" id="imgTag" class="a b c d"></a>
<script>
const imgTag = document.getElementById('imgTag');
console.log(imgTag)
console.log(imgTag.src);
console.log(imgTag.alt);
console.log(imgTag.classList);
console.log(imgTag.id);
</script>
element CSS 적용
tagName.style.css 속성 접근가능.
css 속성 중 - => -를 지우고 첫글자를 대문자로 font-size => fontSize
element.setAttribute(name, value);
ex)
<h1 id="h1">색상변경</h1>
<input type="color" id="colorValue">
<button type="button" id="changeBtn">변경</button>
<script>
document.getElementById('changeBtn').addEventListener('click' ,() => {
const h1 = document.getElementById('h1');
let colorValue = document.getElementById('colorValue').value;
h1.style.color = colorValue;
})
</script>
tag classList 속성
class의 속성이 여러개 값이 올 수 있으므로 list 형태로 리턴
리턴 타입 DOMTokenList 객체로 별도의 메서드를 제공
add(), contains(), toggle(), remove()....
<script>
const ul = document.getElementById('ul');
console.log(ul);
console.log(ul.classList);
ul.classList.add('ul2');
console.log(ul.classList);
// iter 있는지 체크 (true / false)
ul.classList.contains('iter');
console.log(ul.classList.contains('iter'));
// toggle : 있으면 삭제, 없으면 추가
ul.classList.toggle('iter');
console.log(ul.classList);
console.log(ul.classList.contains('iter'));
// replace : 변경
ul.classList.replace('list', 'list2');
console.log(ul.classList);
// remove : 삭제
ul.classList.remove('list2');
console.log(ul.classList);
</script>
문제1) li 추가해보기
<body>
<button type="button" id="btn1">li 한번에 추가</button>
<button type="button" id="btn2">li 하나씩 추가</button>
<button type="button" id="btn3">li 하나씩 추가</button>
<button type="button" id="btn4">li 하나씩 추가</button>
<ul id="ul"></ul>
<hr>
<ol id="ol"></ol>
<hr>
<ul id="ul2"></ul>
<hr>
<ol id="ol2"></ol>
<hr>
<script>
const datas = ['HTML','CSS','JavaScript','SQL'];
let ul = document.getElementById('ul');
let ol = document.getElementById('ol');
let index = 0;
document.getElementById('btn1').addEventListener('click', () => {
let str = '';
for(let i=0; i<datas.length; i++){
str += `<li>${datas[i]}</li>`;
}
ul.innerHTML = str;
})
document.getElementById('btn2').addEventListener('click', () => {
if (index < datas.length) {
ol.innerHTML += `<li>${datas[index]}</li>`;
index++;
}
})
// CreateElement : element 생성
// appendChild : 자식으로 추가
let i = 0;
document.getElementById('btn3').addEventListener('click', () => {
datas.forEach((e)=>{
let li = document.createElement('li'); // <li></li>
li.innerText = e
document.getElementById('ul2').appendChild(li); // ul의 자식으로 추가 ul.innerHTML = li
})
})
document.getElementById('btn4').addEventListener('click', () => {
if (i < datas.length) {
let li = document.createElement('li');
li.innerText = datas[i];
i++;
document.getElementById('ol2').appendChild(li);
}
})
</script>
</body>
문제2) 여행 준비물 점검목록 만들기
짝수, 홀수번째로 색이 달라져야하며
X버튼을 누르면 li가 하나삭제되어야함.
CSS
<style>
body{
text-align: center;
display: flex;
justify-content: center;
}
h2{
font-weight: 700;
font-size: 30px;
}
form{
background-color: rgb(178, 178, 255);
height: 100px;
width: 800px;
}
#item{
height: 40px;
margin-top: 25px;
width: 400px;
padding-left: 20px;
font-size: 20px;
}
#itemList li:nth-of-type(even){
background-color: #99c3f7;
}
#itemList li:nth-of-type(odd){
background-color: rgb(252, 192, 242);
}
#itemList li{
list-style: circle;
height: 40px;
line-height: 40px;
font-weight: 700;
list-style: none;
}
#itemList li button{
border: none;
cursor: pointer;
float: right;
margin: 13px 5px 5px 5px
}
#itemList li:nth-of-type(even) button{
background-color: #99c3f7;
}
#itemList li:nth-of-type(odd) button{
background-color: rgb(252, 192, 242);
}
#itemList li button:hover{
background-color: rgba(58, 58, 58, 0.541);
}
#add{
height: 46px;
box-shadow: 3px 3px 3px black;
}
#itemList{
padding: 0px;
margin: 0px;
}
</style>
HTML,JS
<body>
<div id="wapper">
<h2>여행 준비물 점검 목록</h2>
<form action="">
<input type="text" id="item" autofocus="true">
<button type="button" id="add">추가</button>
</form>
<div>
<ul id="itemList"></ul>
</div>
</div>
<script>
let item = document.getElementById('item');
let itemList = document.getElementById('itemList');
document.getElementById('add').addEventListener('click', () => {
let li = document.createElement('li');
li.innerHTML = `${item.value}<button class='del'>X</button>`;
// itemList.innerHTML += `<li>${item.value}<button class='del'>X</button></li>`;
itemList.appendChild(li);
item.value = '';
})
itemList.addEventListener('click', (event) => {
if (event.target.classList.contains('del')) { // del 클래스 확인
itemList.removeChild(event.target.parentElement);
}
})
</script>
</body>
'화면 수업 정리' 카테고리의 다른 글
HTML,CSS,JS 16일차 (0) | 2024.08.16 |
---|---|
HTML,CSS,JS 14일차 (0) | 2024.08.13 |
HTML,CSS,JS 13일차 (0) | 2024.08.12 |
HTML,CSS,JS 12일차 (0) | 2024.08.09 |
HTML,CSS,JS 11일차 (0) | 2024.08.08 |