🍁콘텐츠 조작
- 1. 태그 검색 (BOM, DOM)
- 2.1 속성 조작 (BOM, DOM)
- 2.2 이벤트 조작 (BOM, DOM)
- 3. 콘텐츠 조작 (DOM)
BOM와 DOM 모두 태그를 조작할 수 있는 기능을 가지고 있다.
하지만 콘텐츠 조작은 BOM에서는 못 하며, DOM에서만 할 수 있다.
대부분의 프로퍼티는 읽기, 쓰기 작업을 모두 지원한다.
읽기 작업
alert(div1.innerText);
alert(div1.innerHTML);
alert(div1.textContent);
쓰기 작업
div1.innerText = 'Isaac';
div1.innerHTML = 'Sopia';
div1.textContent = 'Happy Day';
Content Property
Content의 시작 태그와 끝 태그 사이의 내용물(PCDATA, Element)을 조작한다.
innerText
시작 태그와 끝 태그 사이의 문자열을 읽기/쓰기 작업을 하는 프로퍼티이다.
문자열만 인식하며, 비표준(MS) 방식이다.
div1.innerText = 'I<b>s</b>aac';
innerHTML
시작 태그와 끝 태그 사이의 문자열을 읽기/쓰기 작업을 하는 프로퍼티이다.
문자열과 태그를 모두 인식한다.
div1.innerHTML = 'I<b>s</b>aac';
textContent
시작 태그와 끝 태그 사이의 문자열을 읽기/쓰기 작업을 하는 프로퍼티이다.
문자열만 인식하며, 표준 방식이다.
div1.textContent = 'I<b>s</b>aac';
outerText
JavaScript에서는 거의 사용하지 않는다.
outerHTML
JavaScript에서는 거의 사용하지 않는다.
🍁동적으로 태그 생성하기
텍스트 박스 생성
div1.innerHTML = '<input type="text">';
동적으로 태그를 추가하여 텍스트 박스를 생성할 수 있다.
for (var i=0; i<10; i++) {
div1.innerHTML += '<input type="text">';
}
이미지 추가
div1.innerHTML += '<img src="../asset/images/dog01.jpg">';
콘텐츠 삭제
document.getElementById('btn2').onclick = m2;
function m2() {
document.getElementById('div1').innerHTML = '';
}
빈 문자열로 채워 콘텐츠를 삭제할 수 있다.
테이블 생성하기
<!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>
fieldset {
border: 1px solid #777;
width: 200px;
}
fieldset > label {
display: block;
margin-bottom: 5px;
padding: 5px;
}
#tbl1 {
border: 1px solid gray;
border-collapse: collapse;
margin-top: 20px;
}
#tbl1 td {
border: 1px solid gray;
width: 50px;
height: 50px;
}
#btn1 {
margin-top: 5px;
}
</style>
</head>
<body>
<h1>테이블 생성하기</h1>
<fieldset>
<legend>행x열</legend>
<label>행: <select id="selrow"></select></label>
<label>열: <select id="selcolumn"></select></label>
<input type="button" value="생성하기" id="btn1">
</fieldset>
<table id="tbl1"></table>
</body>
</html>
<script>
var selrow = document.getElementById('selrow');
var selcolumn = document.getElementById('selcolumn');
var btn1 = document.getElementById('btn1');
var tbl1 = document.getElementById('tbl1');
//select box 초기화
for (var i=1; i<=10; i++) {
//var op = new Option();
//op.value = i;
//op.text = i;
//var op = new Option(i, i);
selrow.options.add(new Option(i, i));
selcolumn.options.add(new Option(i, i));
}
selrow.selectedIndex = 4; //행을 5로 시작
selcolumn.selectedIndex = 4; //열을 5로 시작
btn1.onclick = m1;
function m1() {
//<tr>, <td> 동적 생성하기
var temp = ''; //누적 변수
for (var i=0; i<selrow.value; i++) { //행
temp += '<tr>';
for (var j=0; j<selcolumn.value; j++) { //열
temp += '<td>';
temp += i + ',' + j;
temp += '</td>';
}//for j
temp += '</tr>';
}//for i
tbl1.innerHTML = temp;
}
</script>
🍂테이블 조작하기
<!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>
#tbl1 {
border: 1px solid gray;
border-collapse: collapse;
}
#tbl1 td {
border: 1px solid gray;
width: 126px;
height: 126px;
}
</style>
</head>
<body>
<table id="tbl1">
<!-- tr*5>td*5 -->
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</body>
</html>
event.target.bgColor = 'tomato';
#tbl1 td img {
display: block;
}
스타일을 변경하여 인라인 태그를 블럭 태그로 만들어 사진 아래에 생기는 공백을 없애 주었다.
마우스 오른쪽 contextmenu 제거
<body oncontextmenu="return false;">
메뉴가 뜨기 바로 직전에 실행되는 contextmenu 속성을 false로 지정해 주었다.
이제 마우스 오른쪽 클릭을 해도 contextmenu가 동작하지 않는다.
<!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>
#tbl1 {
border: 1px solid gray;
border-collapse: collapse;
}
#tbl1 td {
border: 1px solid gray;
width: 126px;
height: 126px;
}
#tbl1 td img {
display: block;
}
</style>
</head>
<body oncontextmenu="return false;">
<table id="tbl1">
<!-- tr*5>td*5 -->
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<script>
//<td> x 25 이벤트 추가
var list = document.getElementsByTagName('td');
for (var i=0; i<list.length; i++){
// list[i].onclick = m1;
list[i].onmousedown = m1;
}
function m1() {
//어떤 td를 클릭했는지 확인
//event.target.innerText = 'click';
//event.target.bgColor = 'tomato';
//event.target.innerHTML = '<img src="../asset/images/rect_icon01.png">';
var n = 0;
if (event.buttons == 1) {
n = 1;
} else if (event.buttons == 2) {
n = 2;
} else if (event.buttons == 4) {
n = 4;
}
event.target.innerHTML = '<img src="../asset/images/rect_icon0' + n + '.png">';
}
</script>
</body>
</html>
클릭한 이미지 복제
<!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>
#sample {
border: 1px solid black;
background-color: #EEE;
padding: 20px;
width: 800px;
text-align: center;
}
#sample .pic {
width: 150px;
border-radius: 10px;
opacity: .3;
cursor: pointer;
}
#sample .pic:hover {
opacity: 1;
}
</style>
</head>
<body>
<div id="sample">
<img src="../asset/images/cat01.jpg" class="pic">
<img src="../asset/images/cat02.jpg" class="pic">
<img src="../asset/images/cat03.jpg" class="pic">
<img src="../asset/images/cat04.jpg" class="pic">
<img src="../asset/images/cat05.jpg" class="pic">
<img src="../asset/images/dog01.jpg" class="pic">
<img src="../asset/images/dog02.jpg" class="pic">
<img src="../asset/images/dog03.jpg" class="pic">
<img src="../asset/images/dog04.jpg" class="pic">
<img src="../asset/images/dog05.jpg" class="pic">
</div>
<hr>
<input type="button" value="삭제하기" id="btn1">
<hr>
<div id="output"></div>
<script>
var pic = document.getElementsByClassName('pic');
for (var i=0; i<pic.length; i++) {
pic[i].onclick = m1;
}
function m1() {
//클릭한 <img> 태그 확인
//alert(event.target.src);
//클릭한 썸네일을 하단 output에 동적으로 출력
var url = event.target.src;
var filename = url.substring(url.lastIndexOf('/') + 1);
// alert(filename);
document.getElementById('output').innerHTML = '<img src="../asset/images/' + filename + '">';
}
document.getElementById('btn1').onclick = m2;
function m2() {
if ( document.getElementById('output').innerHTML != '') {
if (confirm('정말 삭제하시겠습니까?')) {
document.getElementById('output').innerHTML = '';
}
}
}
</script>
</body>
</html>
사진을 클릭하면 클릭한 썸네일을 하단 output에 동적으로 출력하고, 삭제 버튼을 클릭하면 확인 메시지를 선택하여 사진을 삭제한다.