SlideShare a Scribd company logo
1 of 12
www.javaspecialist.co.kr
www.javaspecialist.co.kr
Selector API와 DOM 조작
HTML5의 추가된 Selector API는 DOM조작을 더욱 쉽게 한다.
1
www.javaspecialist.co.kr
1. Selector API
함수 설명 비고
getElementById( )
특정 id 속성값에 해당하는 요소를 반환
<div id ="foo">
getElementById("foo");
HTML5 이전에 사
용
getElementsByName( )
특정 name 속성값에 해당하는 요소를 반환
<input type="text" name="foo">
getElementsByName("foo");
getElementsByTagName( )
특정 태그 이름과 일치하는 모든 요소를 반환
<input type="text">
getElementsByTagName("input");
getElementsByTagNameNS()
태그의 name 속성의 값과 일치하는 모든 요소를 반환
<input type="text" name="emai");
getElementsByTagNameNS("email");
querySelector()
페이지내에서 특정 선택자 규칙과 일치하는 첫 번째 요소를 반환
<input class="error">
querySelector("input.error");
HTML5에 추가됨
CSS 선택자에 대한
이해가 필요함querySelectorAll()
특정 선택자 규칙 또는 여러 규칙과 일치하는 모든 요소를 반환
<div id="results"><table><tr><td>…
querySelectorAll("#results td")
• DOM Tree에서 요소를 빠르고 쉽게 찾아낼 수 있다.
• 기존 자바스크립트 라이브러리(jQuery 등)들이 지원하던DOM Selector의 네이티브 구현이다.
• getElementByClassName도 추가적으로 사용할 수 있게 되었다.
• 검색 조건에는 우리가 일반적으로 많이 사용하는 CSS 선택 문법을 그대로 사용할 수 있으며, 쉼표(',')로 구분하여 하나 이
상의 검색 조건을 추가할 수 있다.
2
www.javaspecialist.co.kr
2. Selector API 사용 예
• // 클래스 이름이 'warning', 또는 'note'인 단락 요소(<p>)를 모두 찾음
• var special = document.querySelectorAll("p.warning, p.note");
• // id 가 'main', 'basic', 'exclamation'인 요소들 중 첫 번째 발견된 요소를 찾음
• var el = document.querySelector("#main, #basic, #exclamation");
• // HTML 문서의 <body>에 속한 <style> 요소들 중
• // 'type' 속성이 없거나, 'text/css'인 첫 번째 발견된 요소를 찾음
• var style = document.body.querySelector("style[type='text/css'], style:not([type])");
• // id 가 'fruits'인 요소의 <input> 요소(체크박스)들 중 선택된(checked) 요소를 찾음
• var list = document.querySelectorAll("#fruits input:checked");
• // 또는
• var list = document.getElementByID('fruits').querySelectorAll("input:checked");
• //또는
• var fruits = document.getElementById("fruits");
• var list = fruits.querySelectorAll("input:checked"); //이 부분의 실행 횟수가 많을 때 권장함
3
www.javaspecialist.co.kr
3. HTML 파싱과 자바스크립트 코드 실행
• Selector API를 이용해 DOM 트리로부터 HTML DOM 객체를 가져오기 위해서는 자바스크립
트 코드이 실행이 HTML 문서가 파싱된 다음 실행되어야 함
• HTML 문서가 파싱되기 전에 자바스크립트 코드가 실행되면 Selector API로 HTML DOM 객
체를 DOM Tree 에서 찾지 못함
– 이 때 Selector API는 null을 반환함
• 자바스크립트 코드가 HTML 파싱이 완료된 다음 실행되게 하기 위해서 다음 3가지 방법 중
하나를 사용할 수 있음
– 1. HTML 문서 본문의 맨 아래 <script>코드를 이용하여 자바스크립트 코드를 작성함
• 권하고 싶지 않음
– 2. <script>요소를 이용해 자바스크립트 코드를 <head>요소에 포함시킴
• 이때 onload 이벤트를 이용하여 페이지가 로드된 다음 자바스크립트 코드가 실행되도록
함
– 3. 자바스크립트 코드를 외부 파일로 작성했을 경우 defer 속성을 부여함
• <script src="xxx.js" defer></script>
4
www.javaspecialist.co.kr
4. 본문의 맨 아래에 자바스크립트 코드 삽입
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Emp 목록</title>
</head>
<body>
<!-- 여기서부터 본문의 내용이다. -->
<div>
<!-- 이곳에 본문, 즉 HTML 문서의 본문이 작성된다. -->
</div>
<!-- 여기까지 본문의 내용이다. -->
<script>
var nameList = document.querySelectorAll("table tr > td:nth-child(2)");
var salList = document.querySelectorAll("table tr > td:nth-child(6)");
// 생략…
</script>
</body>
</html>
5
www.javaspecialist.co.kr
5. head 안에 삽입 후 onload 이벤트 처리
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Emp 목록</title>
<link rel="stylesheet" href="./default.css" type="text/css" >
<script>
window.onload = function() {
var nameList = document.querySelectorAll("table tr > td:nth-child(2)");
var salList = document.querySelectorAll("table tr > td:nth-child(6)");
//생략…
}
</script>
</head>
<body>
</body>
</html>
6
www.javaspecialist.co.kr
6. 외부 파일로 작성 및 defer 속성 이용
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Emp 목록</title>
<link rel="stylesheet" href="./default.css" type="text/css" >
<script src="sample.js" defer></script>
</head>
<body>
</body>
</html>
-------------------------------
sample.js 파일
(function(){
var nameList = document.querySelectorAll("table tr > td:nth-child(2)");
var salList = document.querySelectorAll("table tr > td:nth-child(6)");
//생략…
})();
7
www.javaspecialist.co.kr
• HTML 태그를 포함한 요소를 추가할 경우
– 태그를 포함한 컨텐츠를 갖게 함
– 링크 또는 이미지 등을 동적으로 추가하거나 제
거해야 할 경우 사용
• 방법
– innerHTML 속성을 이용
• HTMLElement 객체의 속성
• 직접 태그를 문자열 리터럴로 입력
– appendChild()/removeChild() 등 메서드를 이용
• Node 객체(document, element 객체, attribut
e 객체, Text, comment)의 속성
• createElement()로 요소를 생성한다.
• Element 객체의 setAttribute() 메서드로 속성
의 값을 지정한다.
• appendChild()로 다른 요소의 자식 요소로 추
가한다.
• 예)
– <div id="content"></div>에 <img
src="sample.png">를 포함하여 동적으로 이미
지가 보여지게 해야 할 경우
– 오른쪽 예에서 주석처리된 부분은 바로 윗 라인
과 동일한 기능을 함
1. <!DOCTYPE HTML>
2. <html>
3. <head>
4. <meta charset="euc-kr">
5. <title>컨텐츠 제어</title>
6. <script>
7. window.onload = function() {
8. var contentArea = document.getElementById("content
");
9.
10. var showBtn = document.getElementById("show");
11. var hideBtn = document.getElementById("hide");
12.
13. var imgElem = document.createElement("img");
14. imgElem.setAttribute("src", "victory.png");
15.
16. showBtn.onclick = function() {
17. contentArea.innerHTML = "<img src='victory.png
'>";
18. //contentArea.appendChild(imgElem);
19. }
20.
21. hideBtn.onclick = function() {
22. contentArea.innerHTML = "";
23. //contentArea.removeChild(imgElem);
24. }
25. }
26. </script>
27. </head>
28.
29. <body>
30. <input type="button" id="show" value="Show">
31. <input type="button" id="hide" value="Hide">
32. <div id="content"></div>
33. </body>
34. </html>
7. HTML 요소의 컨텐츠 제어 (1/2) (SelectorAPI/appendChild.html)
www.javaspecialist.co.kr
• 단순 텍스트(CDATA)의 데이터를 조회하거나
변경할 경우
– 태그가 포함되지 않는 텍스트(Char Data)를
포함하도록 함
– 요소의 텍스트 컨텐츠를 변경하거나 조회함
• 방법
– textContent 속성
• Node 객체(document, element 객체, attri
bute 객체, Text, comment)의 속성
• 폼 요소가 아닐 경우
– value 속성
• Text객체의 속성
• input 엘리먼트 등 폼 요소일 경우
• 예)
– <div id="content"></div>에 입력 필드에 입력
한 내용을 보여지게 하거나 입력필드에 값을
지정한다.
1. <!DOCTYPE HTML>
2. <html>
3. <head>
4. <meta charset="euc-kr">
5. <title>텍스트 컨텐츠 제어</title>
6. <script>
7. window.onload = function() {
8. var contentArea =
document.getElementById("content");
9.
10. var getBtn = document.getElementById("get");
11. var setBtn = document.getElementById("set");
12.
13. var textField =
document.querySelector("[type=text]");
14.
15. getBtn.onclick = function() {
16. contentArea.textContent = textField.value;
17. textField.value = "";
18. }
19.
20. setBtn.onclick = function() {
21. textField.value = "Some Value";
22. }
23. }
24. </script>
25. </head>
26.
27. <body>
28. <input type="text">
29. <input type="button" id="get" value="Get">
30. <input type="button" id="set" value="Set">
31. <div id="content"></div>
32. </body>
33. </html>
7. HTML 요소의 컨텐츠 제어 (2/2) (SelectorAPI/textContent.html)
www.javaspecialist.co.kr
Lab - HTML 문서 파싱하기
• 다음 HTML 문서가 로드되면 HTML 문서를 파싱하여 모든사원의 이름과 연봉(급여*12 + 커
미션)을 브라우저 콘솔에 출력하고, 표 아래에 총 급여액을 출력하는 프로그램을 작성세요.
– 외부 파일로 작성되어야 한다.
– 제공되는 HTML 소스코드의 표 아래에 <div id="total_sal"></div>를 추가하고 이곳에 총 급
여액을 출력하라.
– document.querySelectorAll()
– document.querySelector()
– 배열의 길이는 .length
• nameList.length
– 요소의 내용 텍스트는
• DOM객체.textContent
– 요소의 내용 HTML은
• DOM객체.innerHTML
– window.parseFloat("문자열");
– for 문 이용해서 반복 처리
– (function() {
//코드 작성
})();
10
www.javaspecialist.co.kr
Lab - Solution (SelectorAPI/Lab/end/emp.js)
1. (function(){
2. var nameList=document.querySelectorAll("table tr > td:nth-child(2)");
3. var salList=document.querySelectorAll("table tr > td:nth-child(6)");
4. var commList=document.querySelectorAll("table tr > td:nth-child(7)");
5. var name,sal,comm;
6. var annualSal;
7. var totalSal=0;
8.
9. for(var i=0;i<nameList.length;i++){
10. name=nameList[i].textContent;
11. sal=parseFloat(salList[i].textContent);
12. comm=parseFloat(commList[i].textContent);
13. annualSal=sal*12+comm;console.log("%s님의 연봉은 %f입니다...",name,annualSal);
14. totalSal+=annualSal}document.querySelector("#total_sal").textContent=totalSal
15. }
16.)();
11
www.javaspecialist.co.kr
Lab - Solution (SelectorAPI/Lab/end/EmpList.html)
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <meta charset="EUC-KR">
5. <title>Emp 목록</title>
6. <link rel="stylesheet" href="./default.css" type="text/css" >
7. <script src="emp.js" defer></script>
8. </head>
9. <body>
10. <div>
11. <table>
12. <!-- 생략 -->
13. </table>
14. <div id="total_sal"></div>
15. </div>
16. <!-- 여기까지 본문의 내용입니다. -->
17. </body>
18. </html>
12

More Related Content

What's hot

자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
 
JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPMyungjin Lee
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿Myungjin Lee
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storageJinKyoungHeo
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본Myungjin Lee
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device accessJinKyoungHeo
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summaryHoChul Shin
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장JeongBong Kim
 
Web Components & Polymer
Web Components & PolymerWeb Components & Polymer
Web Components & PolymerJae Sung Park
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
Json view 예제 설명
Json view 예제 설명Json view 예제 설명
Json view 예제 설명Hyung Eun Jin
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍Myungjin Lee
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기Han Jung Hyun
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flaskJiho Lee
 
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Jeado Ko
 

What's hot (20)

자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSP
 
Html5
Html5 Html5
Html5
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device access
 
Node.js DBMS short summary
Node.js DBMS short summaryNode.js DBMS short summary
Node.js DBMS short summary
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
 
Jquery핵심노토
Jquery핵심노토Jquery핵심노토
Jquery핵심노토
 
Web Components & Polymer
Web Components & PolymerWeb Components & Polymer
Web Components & Polymer
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
Json view 예제 설명
Json view 예제 설명Json view 예제 설명
Json view 예제 설명
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flask
 
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션
 

Viewers also liked

HTML&CSS 태그, 속성, 셀렉터
HTML&CSS 태그, 속성, 셀렉터HTML&CSS 태그, 속성, 셀렉터
HTML&CSS 태그, 속성, 셀렉터Booseol Shin
 
[WEB UI BASIC] CSS_1
[WEB UI BASIC] CSS_1[WEB UI BASIC] CSS_1
[WEB UI BASIC] CSS_1Jae Woo Woo
 
3주 CSS Basic
3주 CSS Basic3주 CSS Basic
3주 CSS Basic지수 윤
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차Michael Yang
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차Michael Yang
 
CSS 선택자와 디버그
CSS 선택자와 디버그CSS 선택자와 디버그
CSS 선택자와 디버그성일 한
 
HTML & CSS Workshop Notes
HTML & CSS Workshop NotesHTML & CSS Workshop Notes
HTML & CSS Workshop NotesPamela Fox
 

Viewers also liked (8)

HTML&CSS 태그, 속성, 셀렉터
HTML&CSS 태그, 속성, 셀렉터HTML&CSS 태그, 속성, 셀렉터
HTML&CSS 태그, 속성, 셀렉터
 
[WEB UI BASIC] CSS_1
[WEB UI BASIC] CSS_1[WEB UI BASIC] CSS_1
[WEB UI BASIC] CSS_1
 
3주 CSS Basic
3주 CSS Basic3주 CSS Basic
3주 CSS Basic
 
CSS Layout
CSS LayoutCSS Layout
CSS Layout
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 10일차
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 8일차
 
CSS 선택자와 디버그
CSS 선택자와 디버그CSS 선택자와 디버그
CSS 선택자와 디버그
 
HTML & CSS Workshop Notes
HTML & CSS Workshop NotesHTML & CSS Workshop Notes
HTML & CSS Workshop Notes
 

Similar to 3-2. selector api

알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web AnimationsChang W. Doh
 
Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thChang W. Doh
 
First Step In Ajax Korean
First Step In Ajax KoreanFirst Step In Ajax Korean
First Step In Ajax KoreanTerry Cho
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지yongwoo Jeon
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationHyuncheol Jeon
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개beom kyun choi
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장홍준 김
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3uEngine Solutions
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
Code_The_Web_150524_HTML_CSS
Code_The_Web_150524_HTML_CSSCode_The_Web_150524_HTML_CSS
Code_The_Web_150524_HTML_CSSChangwhan Yea
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design patternSukjin Yun
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsEunYoung Kim
 

Similar to 3-2. selector api (20)

알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 
Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30th
 
First Step In Ajax Korean
First Step In Ajax KoreanFirst Step In Ajax Korean
First Step In Ajax Korean
 
Hacosa js study 6th
Hacosa js study 6thHacosa js study 6th
Hacosa js study 6th
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
Html5&css 3장
Html5&css 3장Html5&css 3장
Html5&css 3장
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
Code_The_Web_150524_HTML_CSS
Code_The_Web_150524_HTML_CSSCode_The_Web_150524_HTML_CSS
Code_The_Web_150524_HTML_CSS
 
Code_The_Web_1
Code_The_Web_1Code_The_Web_1
Code_The_Web_1
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
Hibernate 기초
Hibernate 기초Hibernate 기초
Hibernate 기초
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 

3-2. selector api

  • 1. www.javaspecialist.co.kr www.javaspecialist.co.kr Selector API와 DOM 조작 HTML5의 추가된 Selector API는 DOM조작을 더욱 쉽게 한다. 1
  • 2. www.javaspecialist.co.kr 1. Selector API 함수 설명 비고 getElementById( ) 특정 id 속성값에 해당하는 요소를 반환 <div id ="foo"> getElementById("foo"); HTML5 이전에 사 용 getElementsByName( ) 특정 name 속성값에 해당하는 요소를 반환 <input type="text" name="foo"> getElementsByName("foo"); getElementsByTagName( ) 특정 태그 이름과 일치하는 모든 요소를 반환 <input type="text"> getElementsByTagName("input"); getElementsByTagNameNS() 태그의 name 속성의 값과 일치하는 모든 요소를 반환 <input type="text" name="emai"); getElementsByTagNameNS("email"); querySelector() 페이지내에서 특정 선택자 규칙과 일치하는 첫 번째 요소를 반환 <input class="error"> querySelector("input.error"); HTML5에 추가됨 CSS 선택자에 대한 이해가 필요함querySelectorAll() 특정 선택자 규칙 또는 여러 규칙과 일치하는 모든 요소를 반환 <div id="results"><table><tr><td>… querySelectorAll("#results td") • DOM Tree에서 요소를 빠르고 쉽게 찾아낼 수 있다. • 기존 자바스크립트 라이브러리(jQuery 등)들이 지원하던DOM Selector의 네이티브 구현이다. • getElementByClassName도 추가적으로 사용할 수 있게 되었다. • 검색 조건에는 우리가 일반적으로 많이 사용하는 CSS 선택 문법을 그대로 사용할 수 있으며, 쉼표(',')로 구분하여 하나 이 상의 검색 조건을 추가할 수 있다. 2
  • 3. www.javaspecialist.co.kr 2. Selector API 사용 예 • // 클래스 이름이 'warning', 또는 'note'인 단락 요소(<p>)를 모두 찾음 • var special = document.querySelectorAll("p.warning, p.note"); • // id 가 'main', 'basic', 'exclamation'인 요소들 중 첫 번째 발견된 요소를 찾음 • var el = document.querySelector("#main, #basic, #exclamation"); • // HTML 문서의 <body>에 속한 <style> 요소들 중 • // 'type' 속성이 없거나, 'text/css'인 첫 번째 발견된 요소를 찾음 • var style = document.body.querySelector("style[type='text/css'], style:not([type])"); • // id 가 'fruits'인 요소의 <input> 요소(체크박스)들 중 선택된(checked) 요소를 찾음 • var list = document.querySelectorAll("#fruits input:checked"); • // 또는 • var list = document.getElementByID('fruits').querySelectorAll("input:checked"); • //또는 • var fruits = document.getElementById("fruits"); • var list = fruits.querySelectorAll("input:checked"); //이 부분의 실행 횟수가 많을 때 권장함 3
  • 4. www.javaspecialist.co.kr 3. HTML 파싱과 자바스크립트 코드 실행 • Selector API를 이용해 DOM 트리로부터 HTML DOM 객체를 가져오기 위해서는 자바스크립 트 코드이 실행이 HTML 문서가 파싱된 다음 실행되어야 함 • HTML 문서가 파싱되기 전에 자바스크립트 코드가 실행되면 Selector API로 HTML DOM 객 체를 DOM Tree 에서 찾지 못함 – 이 때 Selector API는 null을 반환함 • 자바스크립트 코드가 HTML 파싱이 완료된 다음 실행되게 하기 위해서 다음 3가지 방법 중 하나를 사용할 수 있음 – 1. HTML 문서 본문의 맨 아래 <script>코드를 이용하여 자바스크립트 코드를 작성함 • 권하고 싶지 않음 – 2. <script>요소를 이용해 자바스크립트 코드를 <head>요소에 포함시킴 • 이때 onload 이벤트를 이용하여 페이지가 로드된 다음 자바스크립트 코드가 실행되도록 함 – 3. 자바스크립트 코드를 외부 파일로 작성했을 경우 defer 속성을 부여함 • <script src="xxx.js" defer></script> 4
  • 5. www.javaspecialist.co.kr 4. 본문의 맨 아래에 자바스크립트 코드 삽입 <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Emp 목록</title> </head> <body> <!-- 여기서부터 본문의 내용이다. --> <div> <!-- 이곳에 본문, 즉 HTML 문서의 본문이 작성된다. --> </div> <!-- 여기까지 본문의 내용이다. --> <script> var nameList = document.querySelectorAll("table tr > td:nth-child(2)"); var salList = document.querySelectorAll("table tr > td:nth-child(6)"); // 생략… </script> </body> </html> 5
  • 6. www.javaspecialist.co.kr 5. head 안에 삽입 후 onload 이벤트 처리 <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Emp 목록</title> <link rel="stylesheet" href="./default.css" type="text/css" > <script> window.onload = function() { var nameList = document.querySelectorAll("table tr > td:nth-child(2)"); var salList = document.querySelectorAll("table tr > td:nth-child(6)"); //생략… } </script> </head> <body> </body> </html> 6
  • 7. www.javaspecialist.co.kr 6. 외부 파일로 작성 및 defer 속성 이용 <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Emp 목록</title> <link rel="stylesheet" href="./default.css" type="text/css" > <script src="sample.js" defer></script> </head> <body> </body> </html> ------------------------------- sample.js 파일 (function(){ var nameList = document.querySelectorAll("table tr > td:nth-child(2)"); var salList = document.querySelectorAll("table tr > td:nth-child(6)"); //생략… })(); 7
  • 8. www.javaspecialist.co.kr • HTML 태그를 포함한 요소를 추가할 경우 – 태그를 포함한 컨텐츠를 갖게 함 – 링크 또는 이미지 등을 동적으로 추가하거나 제 거해야 할 경우 사용 • 방법 – innerHTML 속성을 이용 • HTMLElement 객체의 속성 • 직접 태그를 문자열 리터럴로 입력 – appendChild()/removeChild() 등 메서드를 이용 • Node 객체(document, element 객체, attribut e 객체, Text, comment)의 속성 • createElement()로 요소를 생성한다. • Element 객체의 setAttribute() 메서드로 속성 의 값을 지정한다. • appendChild()로 다른 요소의 자식 요소로 추 가한다. • 예) – <div id="content"></div>에 <img src="sample.png">를 포함하여 동적으로 이미 지가 보여지게 해야 할 경우 – 오른쪽 예에서 주석처리된 부분은 바로 윗 라인 과 동일한 기능을 함 1. <!DOCTYPE HTML> 2. <html> 3. <head> 4. <meta charset="euc-kr"> 5. <title>컨텐츠 제어</title> 6. <script> 7. window.onload = function() { 8. var contentArea = document.getElementById("content "); 9. 10. var showBtn = document.getElementById("show"); 11. var hideBtn = document.getElementById("hide"); 12. 13. var imgElem = document.createElement("img"); 14. imgElem.setAttribute("src", "victory.png"); 15. 16. showBtn.onclick = function() { 17. contentArea.innerHTML = "<img src='victory.png '>"; 18. //contentArea.appendChild(imgElem); 19. } 20. 21. hideBtn.onclick = function() { 22. contentArea.innerHTML = ""; 23. //contentArea.removeChild(imgElem); 24. } 25. } 26. </script> 27. </head> 28. 29. <body> 30. <input type="button" id="show" value="Show"> 31. <input type="button" id="hide" value="Hide"> 32. <div id="content"></div> 33. </body> 34. </html> 7. HTML 요소의 컨텐츠 제어 (1/2) (SelectorAPI/appendChild.html)
  • 9. www.javaspecialist.co.kr • 단순 텍스트(CDATA)의 데이터를 조회하거나 변경할 경우 – 태그가 포함되지 않는 텍스트(Char Data)를 포함하도록 함 – 요소의 텍스트 컨텐츠를 변경하거나 조회함 • 방법 – textContent 속성 • Node 객체(document, element 객체, attri bute 객체, Text, comment)의 속성 • 폼 요소가 아닐 경우 – value 속성 • Text객체의 속성 • input 엘리먼트 등 폼 요소일 경우 • 예) – <div id="content"></div>에 입력 필드에 입력 한 내용을 보여지게 하거나 입력필드에 값을 지정한다. 1. <!DOCTYPE HTML> 2. <html> 3. <head> 4. <meta charset="euc-kr"> 5. <title>텍스트 컨텐츠 제어</title> 6. <script> 7. window.onload = function() { 8. var contentArea = document.getElementById("content"); 9. 10. var getBtn = document.getElementById("get"); 11. var setBtn = document.getElementById("set"); 12. 13. var textField = document.querySelector("[type=text]"); 14. 15. getBtn.onclick = function() { 16. contentArea.textContent = textField.value; 17. textField.value = ""; 18. } 19. 20. setBtn.onclick = function() { 21. textField.value = "Some Value"; 22. } 23. } 24. </script> 25. </head> 26. 27. <body> 28. <input type="text"> 29. <input type="button" id="get" value="Get"> 30. <input type="button" id="set" value="Set"> 31. <div id="content"></div> 32. </body> 33. </html> 7. HTML 요소의 컨텐츠 제어 (2/2) (SelectorAPI/textContent.html)
  • 10. www.javaspecialist.co.kr Lab - HTML 문서 파싱하기 • 다음 HTML 문서가 로드되면 HTML 문서를 파싱하여 모든사원의 이름과 연봉(급여*12 + 커 미션)을 브라우저 콘솔에 출력하고, 표 아래에 총 급여액을 출력하는 프로그램을 작성세요. – 외부 파일로 작성되어야 한다. – 제공되는 HTML 소스코드의 표 아래에 <div id="total_sal"></div>를 추가하고 이곳에 총 급 여액을 출력하라. – document.querySelectorAll() – document.querySelector() – 배열의 길이는 .length • nameList.length – 요소의 내용 텍스트는 • DOM객체.textContent – 요소의 내용 HTML은 • DOM객체.innerHTML – window.parseFloat("문자열"); – for 문 이용해서 반복 처리 – (function() { //코드 작성 })(); 10
  • 11. www.javaspecialist.co.kr Lab - Solution (SelectorAPI/Lab/end/emp.js) 1. (function(){ 2. var nameList=document.querySelectorAll("table tr > td:nth-child(2)"); 3. var salList=document.querySelectorAll("table tr > td:nth-child(6)"); 4. var commList=document.querySelectorAll("table tr > td:nth-child(7)"); 5. var name,sal,comm; 6. var annualSal; 7. var totalSal=0; 8. 9. for(var i=0;i<nameList.length;i++){ 10. name=nameList[i].textContent; 11. sal=parseFloat(salList[i].textContent); 12. comm=parseFloat(commList[i].textContent); 13. annualSal=sal*12+comm;console.log("%s님의 연봉은 %f입니다...",name,annualSal); 14. totalSal+=annualSal}document.querySelector("#total_sal").textContent=totalSal 15. } 16.)(); 11
  • 12. www.javaspecialist.co.kr Lab - Solution (SelectorAPI/Lab/end/EmpList.html) 1. <!DOCTYPE html> 2. <html> 3. <head> 4. <meta charset="EUC-KR"> 5. <title>Emp 목록</title> 6. <link rel="stylesheet" href="./default.css" type="text/css" > 7. <script src="emp.js" defer></script> 8. </head> 9. <body> 10. <div> 11. <table> 12. <!-- 생략 --> 13. </table> 14. <div id="total_sal"></div> 15. </div> 16. <!-- 여기까지 본문의 내용입니다. --> 17. </body> 18. </html> 12

Editor's Notes

  1. setAttribute() 메서드는 Element객체의 메서드임(Element, Text, Comment, CDATASection, ProcessingInstruction, EntityReference 에서 사용)