안녕세계

[SK고용디딤돌] 자바스크립트 (7/7) - 2주차 본문

[SK고용디딤돌] 자바스크립트 (7/7) - 2주차

Junhong Kim 2016. 7. 13. 17:55
728x90
반응형

/** 복습 **/

 

- 금요일까지 해야 할일 -

① 납기와 품질중 어떠한것이 더 중요한가? pt.12 금요일까지 제출~

② 시험공부 : Scope chain , Prototype Chian (자바스크립트의 상속 메커니즘),  Closure 중심으로

    ㄴ 상속을 직접 제어할 수 있어야 함. 내가 원하는거 내 마음대로 할 수 있도록

    ㄴ JS에서 inherits는 어렵다.

    ㄴ 10문제 -> 50분 (20점짜리가있음..)

 

Document Object Model : 브라우저가 읽어들이면 파싱을하는데 DOM 객체 트리가 구성됨 객체트리가 구성되면 Documnet 객체 , 그밑에 HTML , 그밑에 Head, body.. head 바디 


DOM을 통해 문서 순회/조작 가능

Node.childNodes = > [NodeList] array like list 이다.

Node.nextSibling / Node.previousSibling 동일 레벨 노드 접근


appendChild : LastChild 뒤에 붙입니다.

removeChild :  자식노드 객체를 제거합니다.

insertBefore : 노드 객체를 앞에 추가합니다.


QuerySelector -> 태그 이름



event 객체에는 발생한 사실을 설명, 이벤트를 제어할 수 있음, 처리 또는 무시하기 가능.

노드 이벤트는 외부자원이 필요하다고 하면 발생하는 이벤트


event 핸들러는 특정이벤트를 처리하기 위한 콜백, 콜백이 콜백은 event 핸들러는아니다


onEvent Property에 이벤트 헨들러를 등록. 이 이벤트 핸들러는 이벤트 콜백이다. 여기에는 이벤트 객체가 전달된다.


수평/수직/사선이동 Translation -> 직선으로 움직이는 것

회전 rotation

확대/축소 scale


물체는 가만있고 좌표만 움직임 -> 메트릭스 연산이 필요 -> 새로운 좌표계의 값이 만들어짐 -> 이용해서 애니메이션을 구현


Screen X, y : 물리적인 화면

Client X,y : 윈도우를 클라이언트라고 말함., 클라이언트 영역


instanceof event 컨트롤키가 트루냐 물어볼 수았떠,


이벤트 핸들러는 어디서 이벤트가 발생했는지 볼 수 있다.


이벤트 스코프가 존재히자민 실체객체는  프로토객체..


/** 8장 웹 브라우저와 자바스크립트 **/


이벤트 핸들링 레벨2

- 레벨1에는 한개의 HTML 요소에 둘이상의 이벤트 처리가 안된다는 문제점이 있음

- 레벨2 이벤트 리스너는 한개의 HTML 요소에서 복수의 이벤트와 연관을 맺을 수 있도록 하는 기능을 제공하며 설정했던 이벤트 리스너를 쉽게 제거할 수도 있음

- 이벤트 리스너를 사용하는 경우에는 크로스 브라우징을 고려한 코드를 작성해야함 

 

 

if (window.addEventListener) {

// 표준 브라우저일 때 코드, IE 9 이상

// element.addEventListener(이벤트명, function(event) { ... }, false);

} else {

// IE 6,7,8

// element.attachEvent(on이벤트, function(event) { ... });

}


var element = documnet.QuerySelector("셀렉터")

 

 


● HTML Element

1) Block Element

 <div> </div>

2) Inline Element

 <span> </span>

 

[08-03.html]

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form>
<input type="button" id="btnClick" value="눌러주세요" />
<input type="button" id="btnCancel" value="취소" />
</form>
<div id="result">
</div>
<script src="08-03.js"></script>
</body>
</html>

[08-03.js]

function addListener(element, eventStr, handler) {
if(window.addEventListener) {
element.addEventListener(eventStr, handler, false);
} else {
element.attachEvent("on" + eventStr, handler);
}
}

function removeListener(element, eventStr, handler) {
if(window.removeEventListener) {
element.removeEventListener(eventStr, handler, false);
} else {
element.detachEvent("on" + eventStr, handler);
}
}

function btnClickHandler(evt) {
//var result = document.querySelector("#result");
var textNode = document.createTextNode("클릭 이벤트 처리를 합니다");
result.appendChild(textNode);
}

// 초기화작업 첫번째 작업 . 객체 참조
addListener(window, "load", function(evt) {
var btnClick = document.querySelector("#btnClick");
var btnCancel = document.querySelector("#btnCancel"); // id이기 때문에 맨앞에 샾
var result = document.querySelector("#result");

// 크로싱 브라우징 문제 때문에 addListener에 해줌
addListener(btnClick, "click", btnClickHandler);
addListener(btnCancel, "click", function(evt) {
result.innerHTML = "클릭 이벤트 처리가 불가능 합니다";
removeListener(btnClick, "click", btnClickHandler);
});
});

HTML Tag는 id로 참조할 수 있다. -> parsing 일어남 -> DOM 객체 생성(자바스크립트 객체임)

파싱되면 global scope가 생성되는데 이것이 window 이를 통해 자바스크립트 조작

 

 Window (scope 체인의 루트였는데 얘가 Documnet를 갖고잇고 얘는 DOM의 꼭대기임)

Document

   HTML

Head, body

 

var element = document.querySelector("#a");

 

 

img = Element 타입

src = attr(attribute) 타입

그림표시 = text 타입

"01.jpg" = text 타입

 

파싱의 결과 최상위는 Document

 

 

DOM 이벤트 전파


 

● 이벤트 버블링 억제

event.stopPropagation()을 이용해 btnC가 눌렀을때 이벤트가 상위 div로 올라가는 것을 막아줘야 한다.

 

e.stop.Propagation()

window.event.cancelBubble = true

 

<div id="outer" class="class1"> 과 outer.className = "class1"은 동일한 것이다

 

[08-04.html]

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.class1 {
background-color: #adff2f;
}
.class2 {
background-color: #dda0dd;
}
</style>
<script src="08-common.js"></script>
</head>
<body>
<div id="outer">
외부 영역을
<div id="inner">
내부영역을 클릭해보세요~
</div>
클릭해보세요!
</div>
<div id="result">
</div>
<script src="08-04.js">
</script>
</body>
</html>

[08-04.js]

addListener(window, "load", function(event) {
var outer = document.querySelector("#outer");
var inner = document.querySelector("#inner");
var result = document.querySelector("#result");

outer.className = "class1";
inner.className = "class2";

addListener(outer, "click", function(event) {
result.innerHTML = "outer clicked";
});

addListener(inner, "click", function(event) { // click을 호출할 때 Mouse Event 객체가 event로 넘겨 진다.
result.innerHTML = "inner clicked!!";
cancelBubble(event); // 호환성 해결하기 위해 event cancelBubble()로 넘겨준다.
});

// addListener(inner, "click", function(event) {
// event.stopPropagation();
// });
});

[08-common.js]

function addListener(element, eventStr, handler) {
if(window.addEventListener) {
element.addEventListener(eventStr, handler, false);
} else {
element.attachEvent("on" + eventStr, handler);
}
}

function removeListener(element, eventStr, handler) {
if(window.removeEventListener) {
element.removeEventListener(eventStr, handler, false);
} else {
element.detachEvent("on" + eventStr, handler);
}
}

function cancelBubble(event) {
if(event.stopPropagation()) { // 표준
event.stopPropagation();
} else {
window.event.cancelBubble = true;
}
}

 

● 이벤트디폴트동작 억제

e.preventDefault()

window.eventreturnValue = false

 

[08-common.js]

function byeEvent(e) {
if(e.preventDefault()) {
e.preventDefault();
} else {
window.event.returnValue = false;
}
}

[08-04.js] 

addListener(toGoogle, "click", function(event) {
result.innerHTML = "링크의 기본 동작이 비활성화되었습니다.";
byeEvent(event);
});

 

/** 9장 jQuery **/

 

● jQuery와 jQuery Mobile

 

'Write Less, Do more'

- DOM의 쉬운 조작에서부터, 쉽고 일관된 이벤트 처리, 각종 효과 기능 제공을 통한 쉬운 시각화 지원, 쉬운 Ajax 지원, 쉬운 내장형 객체의 확장까지 자바스크립트의 전반을 지원하는 프레임워크

- jQuery UI라고 불리는 UI 기능을 포함해 jQuery 기반의 플러그인 라이브러리가 많음

 

// 9장에서 중요한 내용 없음

 

 

/** 10장 jQuery 기본 **/

 

 

* array like object.. 이게 뭘까

 

 

 

 

 

● jQuery의 핵심 개념

- Query는 자바스크립트에서 DOM 객체를 질의(query)해 조작한다는 의미를 강조하듯이, 문서 탐색 및 조작을 보다 쉬운 노드 접근 기술을 제공

 

- HTML DOM과 자바스크립트.....

-

-

 

● jQuery()와 $()

- 문서에 포함시키면 즉시실행함수를 실행시켜 라이브러리에 등록한다

 

jQuery() 라는 함수가 있는데 만들때..

 

var jQuery = function(인자) { // 객체는 얘 임, 참조변수임, 전달되는 인자의 값에 따라 하는일이 달라진다

 

};

 

var $ = jquery; // jQuery의 별칭을 준것임, 참조변수한테 받은 것

$()를 더 많이 사용 함. 즉 jQuery() = $() 똑같은 거임.

 

● JavaScript 객체 vs jQuery 객체

var obj = { x:10, y:50}; -> JavaScript 객체

var obj$ = $(obj); -> jQuery 객체로 만들면 jQuery 라이브러리를 사용할 수 있다.

 

※ obj$의 $는 그냥 식별자임. -> 자바스크립트 객체랑 구분하려고, _(under bar)를 쓰기도 함

 

$(자바스크립트객체) -> new를 하지 않아도 객체가 생성 됨

 

셀렉터를 넘겨주면 HTML DOM노드트리에서 해당 노드를 찾아서 해당노드를 jQuery로 바꿔서 반환해주는게 셀렉터가 하는 일

 

 

** 매개변수로 넘겨줄수있는것

1) 자바스크립트 객체 -> jquery 래퍼 객체 반환

2) ()안에 매개변수로 셀렉터 문자열를 기술하면 셀렉터를 해석해 HTML DOM 구조상의 노드를 찾아 jQuery 객체로 변환해 반환

-> jquery 객체 반환

3) 매개변수로 함수를 주면 콜백함수로 등록하여 DOM 로딩 완료시 호출함 - 자기자신객체 this를 리턴함, 이벤트 핸들러 등록하는 함수역할 -> ready 이벤트에 이벤트핸들러로 등록 됨

 

위 세가지는 하는일이 다 다름.

 

ready는 jQuery 이벤트

load이벤트는 표준이벤트

 

DOM완료 자원완료

ready  load

  ㅣ    ㅣ

jquery 표준

 

$(document).on("이벤트명", 이벤트핸들러) -> 자바스크립트 addeventListener

               .off("이벤트명", 이벤트핸들러) -> 자바스크립트 removeEventListener

 

on과 off를 이용하는데에 ready 이벤트는 딱 한번 하는 것.

$(document).on.("ready", (function(){ .. }) ready 이벤트는 초기화하는데 쓰이는 것.

=== > $(function() { ... }) 함수가 들어가면 내부적으로 ready 이벤트로 등록이됨

 

/** 11장 셀렉터 **/

 

 

node를 찾아낼 때 셀렉터를 이용.

jQuery도 셀렉터가 있음, 90퍼센트가 css 셀렉터.

 

- 기본셀렉터

$('*') : 모든 노드, jQuery가 제공하는 컬렉션에 담는다.

- 계층

- 속성

 

jQuery1.x : 거의 모든 웹브라우저 호환 //  대부분 이거 씀 -> 크로싱 브라우징을 지원

jQuery2.x : HTML5 표준을 지원하는 웹브라우저만 // 실무 거의 안씀 -> 매우 컴팩트, 불필요한거 다 제거함

 

 

**

jQuery -> uncompressed -> 복사해서 가져옴 -> 이러게하면 코드 어시스던트가 지원 안됨

jQuery -> uncompressed -> 오른쪽키 다른이름으로 링크 저장

html 파일에서 <script src="jquery-1.12.4.js"></script> 하면 스크립트에서 사용할 수 있음

 

jQuery.fn.method

         ㄴ fn은 prototype이다

 

* 기본 셀렉터와 계층 셀렉터

 

분류

셀렉터

기능

 기본

 *

 모든 요소를 선택

 #id

 id 값을 가진 요소를 선택

 .class

 class 속성 값을 가진 요소를 선택

 element

 요소를 선택

 selector1, selector2,

 복수의 셀렉터중 일치하는 것을  선택

 계층

 ancestor descendant

 ancestor 요소의 모든 자손 요소 descendant를 선택 (space)

 parent > child  parent 요소 자식 요소를 선택 (gt)
 prev + next

 prev 요소 다음의 형제 요소 next를 선택 (plus) → 단수

 prev ~ siblings

 prev 요소 다음의 형제 요소들 siblings를 선택 (tilt) → 복수

속성 

 [attr]

 attr 속성을 가지는 요소를 선택 

 [attr=value]

 attr 속성 값이 value인 요소를 선택
 [attr!=value]

 attr 속성 값이 value가 아닌 요소를 선택 

 [attr^=value]  attr 속성 값이 value로 시작하는 요소를 선택

 [attr$=value]

 attr 속성 값이 value로 끝나는 요소를 선택 

 [attr*=value]

 attr 속성 값이 value로 포함하는 요소를 선택

 [selector1][selector2][selector3]

 셀렉터에 일치하는 속성을 가지고 있는 요소를 선택

 

&gt; → >

&lt; → <

&amp; → &

&expd; → ^

 

$('div#lectures li[href='#lec03']') 예시

 

 

* 필터

- 셀렉터에다가 필터링 하는 것

- 필터셀렉터는 대부분 jQuery가 제공하는것이라 몰라도 됨.

 

분류 

필터 셀렉터 

기능 

Visibility 

 :hidden

 보이지 않는 요소를 선택

 :visible

 보이는 요소를 선택

Forms 

 :hidden

 숨겨진 입력 요소를 선택

 :visible

 사용 가능 상태에 있는 요소를 선택

 

기본 셀렉터, 계층 셀렉터, 속성 셀렉터웹표준이기 때문에 알아두자, QuerySelector 인자로도 쓰고 jQuery $함수의 인자로도 쓰임.

 

 

 

 

 

 

[링크]

www.w3schools.com

www.jquery.com

728x90
반응형
Comments