별의 공부 블로그 🧑🏻‍💻
728x90
728x170

* 문서 객체 모델(DOM)

- (X)HTML 문서의 구조를 가리켜 문서 객체 모델(DOM: Document Object Model)이라고 함.

- (X)HTML 각 태그마다 기능과 속성이 있음.

- (X)HTML 태그는 각각의 기능(Method)과 속성(Properties)을 갖고 있는 문서 객체임.

- 자바스크립트의 문서 객체 모델(DOM)은 IE 8 이하 버전과 그 외 파이어폭스, 크롬, 사파리 등의 브라우저 간에 호환성이 떨어진다는 단점이 있음.

- 하지만 제이쿼리는 이런 호환성이 떨어지는 단점들을 모두 해결함.

 

[선택자]

 

- (X)HTML에서 사용하는 스타일(CSS)과 자바스크립트 내에서 사용하는 스타일은 모두 (X)HTML의 선택한 요소에 디자인 속성을 바꿀 때 사용함.

- 하지만 (X)HTML에서 사용하는 스타일은 사이트 방문자가 지정한 요소에 어떠한 동작을 취했을 때 지정한 요소에 스타일을 적용시킬 수 없음.

- 그래서 (X)HTML 내에서 작성된 스타일은 '정적'이라고 표현하고, 자바스크립트 내에서 작성한 스타일은 '동적'이라고 표현함.

- 선택자에는 크게 직접 문서에서 요소를 선택해 오는 직접 선택자(id, class, 폼 명(Form Name), 요소 명(Element Name) 선택자를 포함)가 있고, 이 선택자를 사용해 선택해 온 문서 객체를 기준으로 가까이에 있는 요소를 선택하는 인접 관계 선택자(parentNode, childNodes, firstChild, children, previousSibling, nextSibling 선택자를 포함)가 있음.

- 쉽게 말하면, 먼 거리에 있는 요소를 선택해 오는 원거리 선택자(직접 선택자)가 있고, 선택한 요소를 기준으로 가까운 거리에 있는 요소를 선택하는 근거리 선택자(인접 관계 선택자)가 있음.

 

 

[인접 요소 관계 파악하기]

 

- 인점 관계 선택자를 사용하기 위해서는 반드시 인접 요소의 관계를 잘 파악하고 있어야 함.

- 그래야 이미 선택한 문서 객체를 기준으로 인접한 문서 객체를 정확히 선택할 수 있음.

 

 

[선택자 종류]

 

- 원거리에 있는 요소를 선택할 때는 직접 선택자를 사용하고, 직접 선택자를 사용해 선택한 요소를 기준해서 근접해 있는 요소를 선택해 올 때는 인접 관계 선택자를 사용하면 됨.

- 예를 들어, 먼 거리의 목적지(선택할 문서 객쳬: 요소)에 떠날 때에는 비행기(직접 선택자)를 타고, 비행기를 타고 내린 지점부터 가까운 거리의 목적지를 이동할 때는 지하철(인접 관계 선택자)을 타고 이동하는 것과 같음.

- 선택자의 종류

 

 구분

종류 

설명 

직접 선택자 

 document.getElementById("아이디 명")

 아이디를 이용해 요소를 선택해 옴.

 document.getElemetsByTagName("요소(태그)명")

 요소의 이름을 이용해 요소를 선택해 옴..

 document.formName.inputName

 폼 요소에 name 속성을 이용해 요소를 선택함.

 인접 관계 선택자

 parentNode

 선택한 요소의 부모 요소를 선택해 옴.

 childNodes

 선택한 요소의 모든 자식 요소를 선택해 옴. 선택한 모든 요소가 배열 객체로 저장됨.

 children

 선택한 요소의 자식 요소인 태그만 선택해 옴. 선택한 모든 요소가 배열 객체로 저장됨.

 firstChild

 선택한 요소의 첫 번째 자식 요소만 선택해 옴.

 previousSibling

 선택한 요소의 이전에 오는 형제 요소만 선택해 옴.

 nextSibling

 선택한 요소의 다음에 오는 형제 요소만 선택해 옴.

- parentNode, firstChild, previousSibling, nextSibling는 공백 문자 인식 호환성에 문제가 있음.

 

 

[선택자 적용 위치와 방법]

 

- 직접 선택자와 인접 관계 선택자를 사용할 때는 <head> 태그 영역에 자바스크립트를 선언하게 되면, (X)HTML을 읽어오는(loading) 것보다 스크립트의 선택자가 먼저 실행되어 문서객체를 선택할 수 없게 됨.

- 스크립트에 선택문을 사용할 경우에는 <body> 태그 영역에 문단 태그 작성을 마친 후 마지막 부분에 작성하거나, 아니면 window.onload=function() { ... }를 이용하여 선택문을 작성해야 함.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!--선택자 사용시 잘못된 적용 위치-->
 
<html>
<head> 
    자바스크립트 선언 <!--HTML 문단 태그가 로딩되기 전에 실행됨-->
</head>
<body> 
    HTML 문단 태그 작성
</body>
</html>
 
 
<!--선택자 사용시 올바른 적용 위치 1-->
 
<html>
<head> 
</head>
<body> 
    HTML 문단 태그 작성
    자바스크립트 선언 <!--HTML 문단 태그가 로딩된 후에 실행됨-->
</body>
</html>
 
 
<!--선택자 사용시 올바른 적용 위치 2-->
 
<html>
<head> 
<script type="text/javascript">
window.onload=function(){
    스크립트 실행문        // HTML 문단 태그가 로딩된 후에 실행 됨.
}
</script>
</head>
<body> 
    HTML 문단 태그 작성
</body>
</html>
cs

 

 

[직접 선택자를 사용한 문서 객체 CSS 적용법]

 

- 직접 선택자로서 문서 객체의 스타일(CSS)를 적용할 때는 기본적으로 다음과 같은 방법을 사용함.

- 기본형

 

document.직접 선택자(선택 메서드).style.속성=값;

 

- 적용 예)

 

 <h1 id="title">웹표준</h1>

 

 document,getElementById("title").style.color="blue";

 

 <p>내용1</p>   index 0

 <p>내용2</p>   index 1

 <p>내용3</p>   index 2

 <p>내용4</p>   index 3

 

 var obj=document.getElementByTagName("p")[3].style.color="blue";

 

 <div id="box">

    <p>내용1</p>     Index 0

    <p>내용2</p>     Index 1

    <p>내용3</p>     Index 2

 </div>

 

 var obj=document,getElementById("box");

 obj.getElementByTagName("p")[1].style.color="#f00";

 

- 자바스크립트에서 스타일(CSS) 속성을 작성할 때 주의해야 할 점은, 배경색이나 글자 크기 드의 경우 속성을 사용할 때 하이픈('-')문자가 포함되어 있는데, 자바스크립트에서 하이폰 문자를 사용하면 산술 연산자로 인식된다는 것. 따라서 아래와 같이 작성해야 함.

 

 (X)HTML에서 CSS 사용 시

자바스크립트에서 CSS 사용 시 

 background-color

 backgroundColor

 font-size

 fontSize

 

 

[인접 관계 선택자로 문서 객체에 스타일 적용하기]

 

- 직접 선택자를 사용하여 원거리의 요소까지 선택한 후, 인접 관계 선택자를 사용해 앞에서 선택한 요소를 기준으로 근거리에 있는 요소를 선택함.

- 그리고 이어서 마침표(.)로 구분하여 style과 속성을 작성하고 대입 연산자를 사용하여 속성값을 입력함.

- 기본형

 

 document.직접 선택자(선택 메서드).인접 관계 선택자.style.속성=값;

 

- 사용 예제)

 

 <h1 id="title"><a href="#">웹표준</a></h1>

 document.getElementById("title").children[0].style.backgroundColor="#ff0";

 

- DOM에 적용하는 인접 관계 선택자는 IE 8 이하 버전과 그 의 브라우저와의 호환성이 떨어짐.

-> 이유? 공백 문자의 인식 여부 차이 때문. (파이어폭스/크롬/사파리 등의 브라우저 - 코드에 공백이 있거나 줄 바꿈이 들어가면 그 것을 한 칸의 공백 문자로 인식.)

 

 파이어폭스, 크롬, 사파리 등 브라우저

IE 8 이하 버전 브라우저 

 <div id="wrap">    줄 바꿈(공백 문자 생성됨)

     <p>내용1</p>  줄 바꿈(공백 문자 생성됨)

     <p>내용2</p>  줄 바꿈(공백 문자 생성됨)

     <p>내용3</p>  줄 바꿈(공백 문자 생성됨)

     <p>내용4</p>  줄 바꿈(공백 문자 생성됨)

 </div>

 <div id="wrap">    줄 바뀌어도 공백 문자 생성 안 됨.

     <p>내용1</p>    

     <p>내용2</p>  

     <p>내용3</p>  

     <p>내용4</p>  

 </div>

 

* 노드 타입으로 인접 관계 선택자 문제 해결하기

 

- 호환성 문제는 노드 타입(nodeType)을 이용하면 해결할 수 있음.

 

[노드 타입]

 

- HTML 노드에는 (X)HTML 태그를 연결하는 요소(Element) 노드와 텍스트를 연결하는 텍스트(Text) 노드, 그리고 (X)HTML 태그에 속성을 연결해 주는 속성(Attribute) 노드가 있음.

- 선택자로 선택한 요소가 어떤 노드인가에 따라 노드 타입 값이 다음과 같이 표기됨.

- 노드 타입의 종류

 

 종류

타입 값 

 요소(Element) 노드

 1

 속성(Attribute) 노드

 2

 텍스트(Text) 노드

 3

 

- 다음과 같이 인접 관계 선택자 호환성 문제를 해결할 수 있음.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<head>
<body>
<div id="wrap">
    <p>내용1</p>
    <p>내용2</p>
    <p>내용3</p>
    <p>내용4</p>
</div>    
<script type="text/javascript">
//<![CDATA[
    document.getElementById("wrap").children[0].style.color="red";
 
    var p=document.getElementsByTagName("p")[1];
    var nextObj=p.nextSibling;
    while(nextObj.nodeType != 1) {
        nextObj=nextObj.nextSibling;
    }
    nextObj.style.backgroundColor="yellow";
//]]>
</script>
</body>
</head>
cs

 

 

[요소의 속성값 변경, 생성 및 불러오는 방법]

 

- 문서 객체의 속성 메서드

 

 종류

풀이 

 요소 선택.속성명

 요소의 지정한 속성값을 불러옴.

 요소 선택.속성명="새 값"

 요소의 지정한 속성값을 새 값으로 변경 또는 생성함.

 요소 선택.getAttribute("속성");

 요소의 지정한 속상값을 불러옴.

 요소 선택.setAttribute("속성","새 값");

 요소의 지정한 속성값을 새 값으로 변경 또는 생성함.

 

- 예)

 

 

 // 속성값 불러오기

 <h1><img src="images/log.gif" id="top_log" alt="이지" /></h1>

 

 document.getElementById("top_log").src;

 document.getElementById("top_log").getAttrivute("src");

 

 // 속성 변경 적용

 <h1><img src="images/log.gif" id="top_log" alt="이지" /></h1>

 

 document.getElementById("top_log").src="images/symbol.jpg";

 document.getElementById("top_log").setAttrivute("src","images/symbol.jpg");

 

 

- 문서 객체의 하위 요소(innerHTML) 속성

 

 종류

풀이 

 요소 선택.innerHTML

 선택한 요소의 모든 하위 요소를 문자 데이터로 변환함.

 요소 선택.innerHTML=새 요소;

 선택한 요소의 전체 하위 요소를 새 요소로 변경 또는 새롭게 생성함.

 

 

[문서 객체 이벤트 핸들러 적용하기]

 

- 방문자가 사이트에서 행하는 모든 행위를 '이벤트'라고 하고, 이런 행위를 취했을 때 자바스크립트 코드가 실행되는 것을 '이벤트 핸들러'라고 함.

- 이벤트 종류

 

 종류

풀이 

 onclick

 선택한 요소를 마우스로 클릭했을 때 이벤트가 발생함.

 onmouseover

 선택한 요소에 마우스를 올렸을 때 이벤트가 발생함.

 onmouseout  선택한 요소에 마우스가 벗어났을 때 이벤트가 발생함.

 submit

 선택한 폼에 전송이 일어났을 때 이벤트가 발생함.

 

- 문서 객체에 이벤트 핸들러를 적용하는 기본형은 다음과 같음.

 

 요소 선택.이벤트 종류=function() {

      일련의 실행문;

 }

 

- 예)

 <a href="#" id="btn1">버튼1</a>

 

document.getElementById("btn1").onclick=function(){

alert("welcome!!");

}

 

 

[폼 요소 선택자]

 

- 폼 요소 선택 방식

 

구분 

 종류

 설명

 입력 요소 선택자

 document.getElementById("아이디 명")

 폼 요소를 아이디로 선택할 때 사용함.

 document.폼 이름.입력 요소 이름

 폼 요소를 이름으로 선택할 때 사용함.

 select option 선택자

 document.폼 이름.입력 요소 이름.options[index]

 <select>에 <option>을 선택할 때 사용함.

 var i=document.폼 이름.입력 요소 이름.selectedIndex;

 document.폼 이름.입력 요소 이름.options[i];

 <select>에 선택된 <option>을 선택할 때 사용함.

 

- 폼 요소 속성 종류

 

구분 

 속성

 설명

 전체

 value

 입력 요소의 value 속성을 변경하거나, 값을 가져옴.

 disabled

 입력 요소의 disabled 속성을 변경하거나, 현재 상태의 값을 가져옴.

 defaultValue

 입력 요소 초기에 입력된 value의 값을 가져옴.

 선택 박스

 selected

 <select> 태그에 <option> 선택된 상태의 값을 가져옴. 선택한 <option>태그가 선택되어 있을 경우에는 true 반환, 선택되어 있지 않을 경우 false 반환.

 체크 박스

라디오 버튼

 checked

 체크 박스 또는 라디오 버튼 태그의 체크 상태 값을을 반환하거나 또는 체크 여부를 제어할 수 있음. 체크가 되어 있으면 true 반환, 체크가 해제되어 있을 경우 false 반환.

 

 

 

내용 출처 : Do It! 자바스크립트+제이쿼리 입문 (정인용 지음, 이지스퍼블리싱)

728x90
그리드형(광고전용)

'Programming > JavaScript' 카테고리의 다른 글

[JavaScript] 키 코드(Key Code) 정리 (키보드 이벤트)  (0) 2022.06.16
이벤트 객체 (Event Object)  (0) 2017.05.21
이벤트 (Event)  (0) 2017.05.21
함수 (Function)  (0) 2017.05.20
브라우저 객체 모델(BOM)  (0) 2017.05.20
객체 / 내장객체  (0) 2017.05.20
자바스크립트 기초 문법  (0) 2017.05.20
쿠키(Cookie)  (0) 2017.05.18
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️


📖 Contents 📖