728x90
728x90

* 버전1.6의 업데이트로 인하여 .attr()과 .prop()으로 나누어짐

 => HTML에 쓴 속성의 값을 취급하고 싶을경우는 .attr()을 이외의 JavaScript의것을 할경우는 .prop()

 

 

차이를 알기 쉬운 예시 

(1)

<html>
<body>
  <a id="to_comments" href="#comments">내용</a>
</body>
<script>
  var $link = $('#to_comments');
  alert($link.attr('href'));  // href 속성값 
  alert($link.prop('href'));  // href 프로퍼티값
</script>
</html>
// 결과
.attr() → #to_comment
.prop() → http://example.com/path/to/page#to_comment

 

(2)

<html>
<body>
	<h2>체크박스 예제</h2>
 	<checkbox id="private" type="checkbox" checked />
</body>
<script>
  var $checkbox = $('#private');
  alert($checkbox.attr('checked'));  // checked 속성 값 
  alert($checkbox.prop('checked'));  // checked 프로퍼티 값
</script>
</html>
// 결과
.attr() → "checked"
.prop() → true / false

 

 

checked="checked"라는 attribute 추가할 때

.attr('checked', 'checked'); 또는 .prop('checked', true); 

checked="checked"라는 attribute 제거할 

.removeAttr('checked'); 또는 .prop('checked', false);

 

 

selected="selected"라는 attribute 추가할 때

.attr('selected', 'selected'); 또는 .prop('selected', true);

checked="checked"라는 attribute 제거할 

.removeAttr('selected'); 또는 .prop('selected', false); 

 

 

 

 

자바스크립트 .attr()과 .prop() 차이 정리

 

  • .attr() : HTML의 속성을 취급
  • .prop() : JavaScript프로퍼티를 취급 

 

이 두 개의 메소드는 취급하는 정보가 다릅니다. 
.attr()는HTML의 속성(attribute)을, .prop()는 JavaScript의 프로파티(property)를 취급하는 메소드입니다.

 

 

:: 출처 ::

http://javascriptandjquerydev.blogspot.com/2012/07/attr-prop.html
http://ginpen.com/2011/10/12/jquery-attr-prop/
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

JavaScript 30 으로 30일간 매일 하나씩 만들어보기 :: 30일 자바프로젝트

 

 

https://javascript30.com/

 

JavaScript 30

Build 30 things with vanilla JS in 30 days with 30 tutorials

javascript30.com

 

 

각 영상은 10~30분 사이이고 작업은 1시간~1시간 30분 사이로 끝날 수 있도록 하여
매일 하나씩 30일간 만들어보는 무료 강의를 발견하여 새해맞이 시작해보기로 했습니다.
강의 영상은 무난한 억양의 영어이며 알아들을 만한 수준의 생활 어휘를 사용합니다.

 

 

 

 

이 분이 강사이며 소스 파일이 들어있는 깃허브 주소는 이쪽입니다.
이 강의의 장점은 라이브러리 의존적이지 않고 생 자바스크립트로만 만들어본다는 것입니다.



 

 

만들어 볼 주제와 강의의 목차는 위와 같습니다.
바닐라 자바스크립트를 재밌게 배울 수 있는 미니 프로젝트들의 실습!

기대가 되네요~

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90
객체 초기자

 

JavaScript 에서 init 이라는 내장함수는 없습니다. 사용자가 그냥 임의로 이름을 지어 만드는 것이 init 이라는 이름을 짓게 되는것이고, init 이라는 이름은 보통 초기화 의 의미를 지닌 함수나 객체를 작성할 때 많이 사용합니다. 작성자의 마음에 따라 initialize 라고 해도 상관없습니다.

 

<script language="javascript">
function TestObject() {
    this.one = "one";
    this.two = "two";
    this.three = "three";
}

TestObject.prototype.init = function () {
    this.one = null;
    this.two = null;
    this.three = null;
}

var myObject = new TestObject();    //객체생성
alert(myObject.one + " : " + myObject.two + " : " + myObject.three);

myObject.init();    //객체 초기화 함수 호출
alert(myObject.one + " : " + myObject.two + " : " + myObject.three);
</script>

 

객체는 new Object(), Object.create() 또는 literal 표기법 (initializer 표기법)을 사용하여 초기화될 수 있습니다. 객체 초기자(object initializer)는 0개 이상인 중괄호({})로 묶인 객체 속성명 및 관련값 쌍 목록입니다.

 

 

객체 초기자

객체는 new Object(), Object.create() 또는 literal 표기법 (initializer 표기법)을 사용하여 초기화될 수 있습니다. 객체 초기자(object initializer)는 0개 이상인 객체 속성명 및 관련값 쌍 목록입니다, 중괄호({})로 묶인.

developer.mozilla.org

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

browser.history() 

브라우저의 히스토리 정보를 문서와 문서 상태 목록으로 저장하는 객체

 

window.history()

winodw.history 프로퍼티는 History 객체에 대한 참조이며 윈도우의 열람 이력을 최근에 방문한 URL의 배열로 반환합니다. DOM의 window 객체는 history 객체를 통해 브라우저 히스토리에 접근할 수 있습니다. HTML5의 history 객체는 사용자 히스토리에서의 앞 뒤 이동이 가능하도록 유용한 메서드와 속성들을 제공하며, history stack의 내용을 조작할 수 있게 합니다. 사용자의 개인 정보를 보호하기 위해 이 객체에 접근하는 방법을 일부 제한합니다. (글 아래)

 

 

 

공통적으로 제공하는 메서드 (히스토리 내 이동하기 )

 

  • history.back(): 윈도우 열람 이력에서 뒤로 이동 
  • history.forward(): 윈도우 열람 이력에서 앞으로 이동 
  • history.go();

 

 

 

이전 페이지로 가는 동작시키기

 

<button onclick="goBack()">이전 페이지로 가기</button> 

<script>

    function goBack() {

        window.history.back();

    }

</script>

 

아래처럼 메소드에 인수로 -1을 전달하면 위의 메소드와 같은 동작을 합니다.
1은 반대의 결과이며 히스토리 스택의 length 속성을 이용하여 페이지가 몇 페이지로 구성되어 있는지 알 수 있습니다.
현재 페이지의 index는 0 .

 

function goBack() {

        window.history.go(-1);

}
var numberOfEntries = window.history.length;

 

 

다음 페이지로 가는 동작시키기

 

<button onclick="goForward()">다음 페이지로 가기</button> 
<script>

    function goForward() {

        window.history.forward();

    }

</script>

 

 

 

브라우저 히스토리 추가 및 변경

 

HTML5는 사용자가 히스토리 엔트리를 추가하거나 변경할 수 있는 history.pushState() history.replaceState() 메서드를 제공합니다. 이 메서드들은 window.onpopstate 이벤트와 연동하여 동작합니다.

history.pushState()의 사용은 상태를 변경한 후에 생성되는 XMLHttpRequest 를 위한 HTTP 헤더 안에서 사용되는 참조자를 변경합니다. 참조자는 XMLHttpRequest 객체가 생성되는 시점에 this로 지정되는 도큐먼트의 URL입니다.

이해하기 쉬운 생활 예시로는 로그인 후 뒤로가기를 눌러 로그인페이지를 출력하고 또 뒤로가기를 또 눌렀을 때 보여줄 화면 배정(메인페이지 등)이 있겠습니다.

 

(1) history.pushState()

3개의 변수 state 객체, title (예약되나 내부역할 없음), 옵션인 URL 객체를 가집니다.
history에 새로운 history를 추가하며 실제 페이지 이동은 일으키지 않습니다.

 

  • state 객체 — pushState()에 의해 생성된 새로운 히스토리 항을 포함하고 있는 자바스크립트 객체.
    사용자가 새로운 상태로 이동할 때 마다, popstate 이벤트가 발생하고,
    이 이벤트의 state 속성은 히스토리의 state객체 사본을 가집니다.

    state 객체는 직렬화할 수 있는 어떤 것도 될 수 있습니다. state 객체의 직렬화 결과 크기는 최대 640k로 제한됩니다. 만약 사용자가 더 큰 직렬 표현 데이타를 pushState()로 보낸다면, 메소드는 예외를 발생시킵니다. 만약 사용자가 이 보다 더 큰 공간이 필요하면 sessionStorage나 localStorage를 사용하십시오.

  • title — 나중에 사용될 수도 있기 때문에 빈 문자열을 지정해 놓는 것은 안전합니다.
    빈 문자열 대신 이동하고자 하는 state 마다 짧은 명칭을 부여하는 것도 좋습니다.

  • URL — 새로운 히스토리 엔트리의 URL을 지정합니다. pushState() 호출 이후에는 브라우저가 이 URL을 로딩하지 않지만 사용자가 브라우저를 다시 시작하거나 할 경우 나중에도 로딩이 가능합니다.

    새롭게 할당되는 URL은 현재의 URL에 기준하기 때문에, 절대 경로일 필요는 없습니다. 새로운 URL은 기존의 URL을 기준으로 해석됩니다. 새로운 URL은 현재 URL에서 유추될 수 없다면 pushState()는 예외를 발생시킵니다. 이 변수는 선택 사항으로, 명시되지 않는다면, 현재 URL로 지정됩니다.

 

 

(2) history.replaceState() 

히스토리를 추가하지 않고 덮어씁니다.

history.replaceState()는 history.pushState()와 동일하게 동작하지만, replaceState()는 새로운 히스토리를 하나 생성하는 대신에 현재의 히스토리 엔트리를 변경합니다. 하지만 전역 브라우저 히스토리에 새로운 항목을 추가하는 것을 막지는 않습니다. replaceState() 는 state 객체나 사용자의 동작에 따라 현재 히스토리 엔트리의 URL을 업데이트 하려고 할 때 매우 유용합니다.

<Link to= “somewhere” replace={true}/>

 

 

(3) history.popstate() 

popstate 이벤트는 현재 활성화된 히스토리 엔트리에 변화가 있을 때 마다 실행됩니다. 만약 pushState 함수나 replaceState 함수에 의해 현재 활성화되어 있는 히스토리 엔트리가 조작 및 변경된다면, popstate 이벤트의 state 속성은 히스토리 항의 state 객체의 사본이 됩니다.

 

현재 상태 읽기

페이지가 로딩이 되었을 때, state 객체는 아마 null이 아닐 수 있습니다.  history.state 속성에 접근하면, state 객체는 마치 popstate 발생시에 얻었을 객체와 동일하게 될 것입니다. popstate 이벤트를 기다릴 필요 없이, 아래와 같은 명령어를 이용하여 현재 히스토리 엔트리의 상태에 접근할 수 있습니다.

var currentState = history.state;

 

 

 

 

Window.history와 브라우저 히스토리의 차이

 

Window.history 속성은 읽기 전용이고 History object를 반환
브라우저 세션 히스토리 (현재 페이지가 있는 탭 또는 브라우저에서 방문한 페이지) 조작 위한 인터페이스를 제공 

* Manipulating the browser history 문서와 예제를 참조 
: pushState() 와 replaceState() 메소드를 사용 하기 전 알아야할 security features가 설명 

 

문법

var historyObj = window.history;
history.back();     // back 버튼을 클릭한 것과 같은 액션
history.go(-1);     // history.back()과 같다

 

세션 히스토리를 비우거나 권한이 없는 코드로 뒤로가기, 앞으로가기 기능을 비활성화 할 수는 없다. 가장 비슷한 해결 방법은 location.replace() 메소드인데 이 메소드는 세션 히스토리의 현재 항목 (페이지)를 제공된 URL로 바꾼다.

 

 

 

출처

https://developer.mozilla.org/ko/docs/Web/API/Window/history
https://developer.mozilla.org/ko/docs/Web/API/History_API
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

linear-gradient, radial-gradient인터넷 익스플로러는 버전 10 이상에서 사용할 수 있습니다.

linear-gradient : 선형 그라데이션
radial-gradient : 원형 그라데이션

 

기본적인 linear 그라데이션

.simple-linear {
  background: linear-gradient(blue, pink);
}
.horizontal-gradient {
  background: linear-gradient(to right, blue, pink);
}
.diagonal-gradient {
  background: linear-gradient(to bottom right, blue, pink);
}
.angled-gradient {
  background: linear-gradient(70deg, blue, pink);
}

 

 

기본적인 radial 그라데이션

.simple-radial { // 타원형
  background: radial-gradient(red, blue);
}
.radial-gradient {  // 정원
  background: radial-gradient(red 10px, yellow 30%, #1e90ff 50%);
}
.radial-gradient { // 원의 일부
  background: radial-gradient(at 0% 30%, red 10px, yellow 30%, #1e90ff 50%);
}
.radial-ellipse-far {
  background: radial-gradient(ellipse farthest-corner at 90% 90%,
      red, yellow 10%, #1e90ff 50%, beige);
}

 

 

 

그라데이션 영역 조절

// linear 그라데이션 영역 넓이 조절
.color-hint { 
  background: linear-gradient(blue, 10%, pink);
}
.colorhint-gradient { 
  background: linear-gradient(to top, black, 20%, cyan);
}

// radial 그라데이션 영역 넓이 조절
.radial-ellipse-side { 
  background: radial-gradient(ellipse closest-side,
      red, yellow 10%, #1e90ff 50%, beige);
}

 

 

조금 응용

.auto-spaced-linear-gradient {  //무지개
  background: linear-gradient(red, yellow, blue, orange);
}
.multicolor-linear { //세로무지개
   background: linear-gradient(to left, lime 28px, red 77%, cyan);
}
.striped { // 그라데이션이라기보다 각진 색혼합
   background: linear-gradient(to bottom left, cyan 50%, palegoldenrod 50%); 
}
.multiposition-stops { // 영역 나누기
   background: linear-gradient(to left, 
       lime 20%, red 30%, red 45%, cyan 55%, cyan 70%, yellow 80% );  
   background: linear-gradient(to left, 
       lime 20%, red 30% 45%, cyan 55% 70%, yellow 80% ); 
}
.multiposition-stop2 { // 그라데이션이라기보다 각진 색혼합
   background: linear-gradient(to left, 
      lime 25%, red 25%, red 50%, cyan 50%, cyan 75%, yellow 75% ); 
   background: linear-gradient(to left, 
      lime 25%, red 25% 50%, cyan 50% 75%, yellow 75% ); 
}
.radial-circle-close {  // 영역의 일부만 효과가 닿게 하기
  background: radial-gradient(circle closest-side at 25% 75%,
      red, yellow 10%, #1e90ff 50%, beige);
}

 

 

 

원뿔 그라데이션

.simple-conic {
  background: conic-gradient(red, blue);
}
.conic-gradient {
  background: conic-gradient(at 0% 30%, red 10%, yellow 30%, #1e90ff 50%);
}
.conic-gradient {
  background: conic-gradient(from 45deg, red, orange, yellow, green, blue, purple);
}

 

 

 

 

이미지의 투명도 그라데이션으로 주기 (원문 : mozilla)

.layered-image {
  background: linear-gradient(to right, transparent, mistyrose),
      url("https://mdn.mozillademos.org/files/15525/critters.png");
}

 

 

 

그라데이션끼리 혼합 : deg 응용

.stacked-linear {
  background:
      linear-gradient(217deg, rgba(255,0,0,.8), rgba(255,0,0,0) 70.71%),
      linear-gradient(127deg, rgba(0,255,0,.8), rgba(0,255,0,0) 70.71%),
      linear-gradient(336deg, rgba(0,0,255,.8), rgba(0,0,255,0) 70.71%);
}

 

일정 영역 안에만 효과 주기

.stacked-radial {
  background: 
      radial-gradient(circle at 50% 0,
        rgba(255,0,0,.5),
        rgba(255,0,0,0) 70.71%),
      radial-gradient(circle at 6.7% 75%,
        rgba(0,0,255,.5),
        rgba(0,0,255,0) 70.71%),
      radial-gradient(circle at 93.3% 75%,
        rgba(0,255,0,.5),
        rgba(0,255,0,0) 70.71%) beige;
  border-radius: 50%;
}

 

 

 

반복형 그라데이션 효과

linear-gradient(), radial-gradient(), conic-gradient()는 자동 반복 기능을 지원하지 않지만
repeating-linear-gradient(), repeating-radial-gradient(), repeating-conic-gradient()는 반복기능을 제공합니다.

 

그라데이션 이펙트로 패턴 만들기

.repeating-linear {
  background: repeating-linear-gradient(-45deg, red, red 5px, blue 5px, blue 10px);
} 

 

 .multi-repeating-linear {
  background:
      repeating-linear-gradient(190deg, rgba(255, 0, 0, 0.5) 40px,
        rgba(255, 153, 0, 0.5) 80px, rgba(255, 255, 0, 0.5) 120px,
        rgba(0, 255, 0, 0.5) 160px, rgba(0, 0, 255, 0.5) 200px,
        rgba(75, 0, 130, 0.5) 240px, rgba(238, 130, 238, 0.5) 280px,
        rgba(255, 0, 0, 0.5) 300px),
      repeating-linear-gradient(-190deg, rgba(255, 0, 0, 0.5) 30px,
        rgba(255, 153, 0, 0.5) 60px, rgba(255, 255, 0, 0.5) 90px,
        rgba(0, 255, 0, 0.5) 120px, rgba(0, 0, 255, 0.5) 150px,
        rgba(75, 0, 130, 0.5) 180px, rgba(238, 130, 238, 0.5) 210px,
        rgba(255, 0, 0, 0.5) 230px),
      repeating-linear-gradient(23deg, red 50px, orange 100px,
        yellow 150px, green 200px, blue 250px,
        indigo 300px, violet 350px, red 370px);
}

 

 

격자무늬 (체크무늬) 

.plaid-gradient {
  background:
      repeating-linear-gradient(90deg, transparent, transparent 50px,
        rgba(255, 127, 0, 0.25) 50px, rgba(255, 127, 0, 0.25) 56px,
        transparent 56px, transparent 63px,
        rgba(255, 127, 0, 0.25) 63px, rgba(255, 127, 0, 0.25) 69px,
        transparent 69px, transparent 116px,
        rgba(255, 206, 0, 0.25) 116px, rgba(255, 206, 0, 0.25) 166px),
      repeating-linear-gradient(0deg, transparent, transparent 50px,
        rgba(255, 127, 0, 0.25) 50px, rgba(255, 127, 0, 0.25) 56px,
        transparent 56px, transparent 63px,
        rgba(255, 127, 0, 0.25) 63px, rgba(255, 127, 0, 0.25) 69px,
        transparent 69px, transparent 116px,
        rgba(255, 206, 0, 0.25) 116px, rgba(255, 206, 0, 0.25) 166px),
      repeating-linear-gradient(-45deg, transparent, transparent 5px,
        rgba(143, 77, 63, 0.25) 5px, rgba(143, 77, 63, 0.25) 10px),
      repeating-linear-gradient(45deg, transparent, transparent 5px,
        rgba(143, 77, 63, 0.25) 5px, rgba(143, 77, 63, 0.25) 10px);

  background:
      repeating-linear-gradient(90deg, transparent 0 50px,
        rgba(255, 127, 0, 0.25) 50px 56px,
        transparent 56px 63px,
        rgba(255, 127, 0, 0.25) 63px 69px,
        transparent 69px 116px,
        rgba(255, 206, 0, 0.25) 116px 166px),
      repeating-linear-gradient(0deg, transparent 0 50px,
        rgba(255, 127, 0, 0.25) 50px 56px,
        transparent 56px 63px,
        rgba(255, 127, 0, 0.25) 63px 69px,
        transparent 69px 116px,
        rgba(255, 206, 0, 0.25) 116px 166px),
      repeating-linear-gradient(-45deg, transparent 0 5px,
        rgba(143, 77, 63, 0.25) 5px 10px),
      repeating-linear-gradient(45deg, transparent 0 5px,
        rgba(143, 77, 63, 0.25) 5px 10px);
}

 

빨려들어가는듯한 원의 반복

.repeating-radial {
  background: repeating-radial-gradient(black, black 5px, white 5px, white 10px);
}
.multi-target {
  background:
      repeating-radial-gradient(ellipse at 80% 50%,rgba(0,0,0,0.5),
        rgba(0,0,0,0.5) 15px, rgba(255,255,255,0.5) 15px,
        rgba(255,255,255,0.5) 30px) top left no-repeat, 
      repeating-radial-gradient(ellipse at 20% 50%,rgba(0,0,0,0.5),
        rgba(0,0,0,0.5) 10px, rgba(255,255,255,0.5) 10px,
        rgba(255,255,255,0.5) 20px) top left no-repeat yellow;
  background-size: 200px 200px, 150px 150px;
}

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90
사용자가 웹사이트에 방문해서 동작을 취했을 때 제이쿼리 코드가 실행되도록 만드는 방법을 다루는 단원입니다. 

 

 

 

 

  • 이벤트 : 사이트에서 방문자가 취하는 모든 행위
  • 이벤트 핸들러 : 이벤트가 발생했을 때 코드를 실행시키는 것
  • 이벤트 메서드 : 방문자가 지정한 요소에서 어떠한 특정 동작이 일어났을 때 저장된 코드를 실행

 

제이쿼리 이벤트 메서드는 하나의 이벤트만 등록할 수 있는 단독이벤트 메서드, 2개 이상의 이벤트를 등록할 수 있는 그룹이벤트 등록 메서드로 나뉩니다. 단독이벤트 등록 메서드는 로딩, 마우스, 포커스, 키보드, 기타 이벤트로 나눌 수 있습니다.

 

 

구분 종류 설명
로딩 이벤트 load() 선택한 이미지나 프레임 요소에 연동된 소스의 로딩이 완료된 후 이벤트 발생
ready() 지정한 HTML 문서 객체의 로딩이 완료된 후 이벤트 발생
error() 이벤트 대상 요소에서 오류가 발생하면 이벤트 발생
마우스 이벤트 click() 선택한 요소를 클릭했을 때 이벤트 발생
dbclick() 선택한 요소를 연속 두 번 클릭했을 때 이벤트 발생
mouseout() 선택한 요소의 영역에 마우스 포인터가 벗어났을 이벤트 발생
* 하위 요소의 영향을 받음
mouseover() 선택한 요소의 영역에 마우스 포인터를 올렸을 때 이벤트 발생
hover() 선택한 요소에 마우스 포인터를 올렸을 때, 벗어났을 때 각각 이벤트 발생
mousedown() 선택한 요소에 마우스 버튼을 눌렀을 때 이벤트 발생
mouseup() 선택한 요소에 마우스 버튼을 눌렀다 뗐을 때 이벤트 발생
mouseenter() 선택한 요소의 영역에 마우스 포인터를 올렸을 때 이벤트 발생
mouseleave() 선택한 요소의 영역에 마우스 포인터가 벗어났을 때 이벤트 발생
mousemove() 선택한 요소의 영역에서 마우스 포인터를 움직였을 때 이벤트 발생
scroll() 가로, 세로 스크롤바를 움직일 때마다 이벤트 발생
포커스 이벤트 focus() 선택한 요소에 포커스가 생성될 때 이벤트 발생 or
선택한 요소에 강제로 포커스 생성
focusin() 선택한 요소에 포커스가 생성되었을 때 이벤트 발생
focusout() 포커스가 선택한 요소에서 다른 요소로 이동되었을 때 이벤트 발생
blur() 포커스가 선택한 요소에서 다른 요소로 이동되었을 때 이벤트 발생 or
선택한 요소의 포커스가 강제로 사라지게 함
change() 이벤트 대상인 입력 요소의 값이 변경되고 포커스가 이동하면 이벤트 발생
* 강제로 change 이벤트를 발생시킬 때도 사용
키보드 이벤트 keypress() 선택한 요소에서 키보드를 눌렀을 때 이벤트 발생
문자 키를 제외한 키의 코드값 반환
keydown() 선택한 요소에서 키보드를 눌렀을 때 이벤트 발생
키보드의 모든 키의 코드값 반환
keyup() 선택한 요소에서 키보드에서 손을 떼었을 때 이벤트 발생

 

 

 

 

 

이벤트 등록방식 알아보기


지정한 요소에 이벤트를 등록하려면 한 가지 동작에 대한 이벤트 등록은 단독이벤트 등록 방식, 두 가지 이상의 동작에 대한 이벤트 등록은 그룹이벤트 등록 방식이 있습니다. 그룹 이벤트 등록 메서드는 on() 메서드를 사용하여 이벤트를 등록합니다.

 

 

1 단독 이벤트 등록 메서드

 

$("이벤트대상").이벤트 등록 메서드(function(){
	code;
});

// example
$(".btn1").click(function(){
	alert();
});

 

 

 

2 그룹 이벤트 등록 메서드 

 

// on() 메서드 등록 방식 1
$("이벤트 대상 선택").on("이벤트종류1 이벤트종류2 ... 이벤트종류n",
	function(){
		자바스크립트 코드;
	}
});

// example
$(".btn1").on("mouseover focus",
	function(){
		console.log("welcome");
	}
});


// on() 메서드 등록 방식 2
$("이벤트 대상 선택").on({
	"이벤트종류1 이벤트종류2 ... 이벤트종류n" : function(){
		자바스크립트 코드;
	}
});

// example
$(".btn1").on({
	"mouseover focus" : function(){
		console.log("welcome");
	}
});


// on() 메서드 등록 방식 3
$("이벤트 대상 선택").on({
	"이벤트종류1" :function(){ 자바스크립트 코드;1 },
	"이벤트종류2" :function(){ 자바스크립트 코드;2 },
       ...
	"이벤트종류n" :function(){ 자바스크립트 코드;n };
});

// example
$(".btn1").on({
	"mouseover" :function(){ console.log("welcome"); },
	"focus" :function(){ console.log("welcome"); }
});

 

 

 

 

3 강제로 이벤트 발생하기

 

이벤트가 강제로 발생했다는 것은 사용자가 아닌 핸들러에 의해 자동으로 이벤트가 발생한 것입니다.
변수의 값을 사용자가 직접 버튼을 눌러 증가시키지 않고 trigger() 메서드를 사용하거나 단독 이벤트 등록 메서드를 사용하면 강제로 이벤트를 발생해 변수를 증가할 수 있습니다.

$("이벤트 대상").단독 이벤트 등록 메서드();
$("이벤트 대상").trigger("이벤트 종류");
$(function(){
	$(".btn1").click(function(){
		$(".btn1").parent().next().css({"color" : "#f00"});
	}); //버튼에 클릭이벤트가 발생하며 이벤트 핸들러가 실행
    
	$(".btn2").on({
		"mouseover focus" : function(){
			$(".btn2").parent().next().css({"color" : "#0f0"});
		}
	}); 
    
	$(".btn1").click();
	$(".btn2").trigger("mouseover");
	//버튼에 mouseover 가 되면 이벤트 핸들러(function)이 자동 실행
});
<body>
	<p>
		<button class="btn1">버튼1</button>
	</p>
	<p>
		내용1
	</p>
	<p>
		<button class="btn2">버튼2</button>
	</p>
	<p>
		내용2
	</p>
</body>

 

 

 

 

4 이벤트 제거 메서드

 

이벤트 제거 메서드는 off()가 있습니다. 등록된 이벤트가 제거되면 브라우저의 개발자 도구의 Event Listners에서도 사라지는 걸 확인할 수 있습니다.

 

$("이벤트 대상").off("제거할 이벤트 종류");

// 예
$(".btn1").off("click");

 

 

 

 

5 로딩 이벤트 메서드

 

로딩 이벤트 메서드는 사용자가 브라우저에서 HTML 문서를 요청하여 HTML 문서의 로딩이 완료되면 이벤트 핸들러를 실행합니다. ready(), load()가 있습니다. ready() 메서드는 사이트를 방문할 떄 요청한 HTML문서 객체 (document) 로딩이 끝나면 이벤트를 발생하고(즉 html에 전체 요소가 로딩되면), load() 메서드는 외부에 연동된 소스(img, video, iframe)의 로딩이 끝나면 이벤트를 발생시킵니다.

 

$(document).ready(function(){ code; });
$(document).on("ready", function(){ code; });
$(window).load(function(){ code; });
$(window).on("load", function(){ code; });

 

 

 

 

6 마우스이벤트

 

지정한 요소를 클릭하는 것부터 마우스 포인터를 올리는 등 사용자가 마우스를 이용해서 취하는 모든 행위를 캐치합니다.  

 

click() / dblclick()

// 이벤트 등록
$("이벤트대상").click(function(){ code; });
$("이벤트대상").on("click", function(){ code; });

// 강제 발생
$("이벤트대상").click();
// 이벤트 등록
$("이벤트대상").dblclick(function(){ code; });
$("이벤트대상").on("dblclick", function(){ code; });

// 강제 발생
$("이벤트대상").dblclick();

 

 

 

<a>, <form> 태그에 클릭 이벤트 적용 시 기본 이벤트를 차단하기

<a> 요소에 click이나 dblclick을 등록하면 클릭할 때마다 태그에 링크된 주소로 이동하는 문제점이 있습니다. 해결하려면 <a> 요소의 기본 이벤트를 차단해야합니다. <form> 요소의 submit 버튼도 action에 등록된 주소로 이동시키는 문제가 있어 '등록한 이벤트를 정상 작동하려면' 기본 이벤트를 차단해야 합니다. 기본 이벤트의 차단은 return false 를 사용하거나 preventDefault() 메서드를 사용하여 차단할 수 있습니다.

 

// 1) return false
$("a | form").이벤트 메서드(function(){
	자바스크립트 코드;
	return flase;
});

// 2) preventDefault() 메서드를 사용
$("a | form").이벤트 메서드(function(e){
	e.preventDefault();
	자바스크립트 코드;	
});

 

 

 

 

 

 

 

 

mouseover()/mouseout()/hover()/mouseenter()/mouseleave()/mousemove()

mouseover()과 mouseenter()의 차이는 mouseover는 대상 요소에 마우스 포인터가 올라가면 발생하는 이벤트이고, mouseenter는 이벤트 대상이 포함된 범위에 마우스 포인터가 들어오면 발생하는 이벤트입니다. mouseout은 대상 '요소'에서 마우스 포인트가 벗어나면 발생하는 이벤트이고, mouseleave는 대상이 포함된 '범위'에서 마우스 포인터가 벗어나면 발생하는 이벤트입니다.

 

// 이벤트 등록
$("이벤트대상").mouseover(function(){ code; });
$("이벤트대상").on("mouseover", function(){ code; });

// 강제 발생
$("이벤트대상").mouseover();
// 이벤트 등록
$("이벤트대상").mouseout(function(){ code; });
$("이벤트대상").on("mouseout", function(){ code; });

// 강제 발생
$("이벤트대상").mouseout();
// 이벤트 등록
$("이벤트대상").hover(
	function(){ code; },
	function(){ code; }
);
// 이벤트 등록
$("이벤트대상").mouseenter(function(){ code; });
$("이벤트대상").on("mouseenter", function(){ code; });

// 강제 발생
$("이벤트대상").mouseenter();
// 이벤트 등록
$("이벤트대상").mouseleave(function(){ code; });
$("이벤트대상").on("mouseleave", function(){ code; });

// 강제 발생
$("이벤트대상").mouseleave();
// 이벤트 등록
$("이벤트대상").mousemove(function(){ code; });
$("이벤트대상").on("mousemove", function(){ code; });

// 이벤트 발생
$("이벤트대상").mousemove();

 

 

 

mousemove 이벤트가 발생할 때마다 마우스 포인터의 좌표값을 span에 출력하는 예제

 

 

 

 

 

 

pageX, pageY가 생소하시죠? 곧이어 나옵니다.

 

 

 

 

이벤트 객체와 종류


사용자가 이벤트를 발생시킬 때마다 이벤트 핸들러의 매개변수에는 이벤트 객체가 생성되며, 이벤트 객체에는 이벤트 타입에 맞는 다양한 정보를 제공하는 속성과 메서드가 포함되어 있습니다. 

 

 $("이벤트 대상 선택").mousemove(function(매개변수){ 
	매개변수(이벤트 객체).속성;
}); 

 

 

구분 종류 설명
마우스 이벤트 clientX 마우스 포인터의 X 좌표값 반환(스크롤 이동거리 무시)
clientY 마우스 포인터의 Y 좌표값 반환(스크롤 이동거리 무시)
pageX 스크롤 X축의 이동한 거리를 계산하여 마우스 포인터의 X 좌표값 반환
pageY 스크롤 Y축의 이동한 거리를 계산하여 마우스 포인터의 Y 좌표값 반환
screenX 화면 모니터 기준으로 마우스 포인터의 X 좌표값 반환
screenY 화면 모니터 기준으로 마우스 포인터의 Y 좌표값 반환
layerX position을 적용한 요소를 기준으로 마우스 포인터의 X 좌표값 반환
layerY position을 적용한 요소를 기준으로 마우스 포인터의 Y 좌표값 반환
button 마우스 버튼의 종류에 따라 값 반환(왼쪽:0, 휠:1, 오른쪽:2)
키보드 이벤트 keyCode 키보드의 아스키코드값 반환
altKey 이벤트 발생 시 Alt 키가 눌렸으면 true, or false 반환
ctrlKey 이벤트 발생 시 Ctrl 키가 눌렸으면 true, or false 반환
shiftKey 이벤트 발생 시 Shift키가 눌렸으면 true, or false 반환
전체 이벤트 target 이벤트가 전파된 마지막 요소를 가르킴
cancelBubble 이벤트 전파를 차단하는 속성으로 기본값 false
true로 설정하면 이벤트 전파가 차단
stopPropagation() 이벤트 전파 차단
preventDefault() 기본 이벤트 차단 (앞에 나온 내용)

 

 

scroll() 

 

대상 요소의 스크롤바가 이동할 때마다 이벤트를 발생시키거나 강제로 scroll 이벤트를 발생시키는데 사용됩니다.

 

// 이벤트 등록
$("이벤트대상").scroll(function(){ code; });
$("이벤트대상").on("scroll", function(){ code; });

// 강제 발생
$("이벤트대상").scroll();

 

 

 

포커스 이벤트

 

포커스는 마우스로 <a>나 <input> 태그를 클릭하거나 Tab 키를 누르면 생성됩니다. 키보드 접근성을 높이기 위해서는 마우스 이벤트를 되도록이면 <a>나 <input> 태그에 등록하고, 키보드가 없을 경우를 고려하여 마우스 이벤트에 대응할 수 있는 키보드 이벤트까지 등록해야합니다. 마우스 이벤트에 대응하는 키보드 이벤트 메서드는 focus(), focusin(), blur(), focusout()가 있겠습니다.

 

// 키보드 접근성을 배려한 이벤트 적용
// 예시는 버튼 숨기기 이벤트

$(".btn").on("mouseover focus", function(){
	$(".txt_1").hide();
});

 

focus() : 대상 요소로 포커스가 이동하면 이벤트 발생, mouseover에 대응
blur() : 포커스가 대상요소에서 다른요소로 이동하면 이벤트 발생, mouseout에 대응
focusin() : 대상 요소의 하위요소 중 입력요소로 포커스가 이동하면 이벤트 발생
focusout() : // 입력요소에서 외부 요소로 이동하면 이벤트 발생

 

 

 

change() 이벤트 메서드

선택한 폼 요소의 value를 새 값으로 바꾸고 포커스가 다른 요소로 이동하면 이벤트를 발생시킵니다. 

 

$(function(){
	$("#rel_site").on("change", function(){
		$("#txt").text($(this).val());
	});
});

 

 

 

 

7 키보드 이벤트

keydown()/keyup()/keypress()

 

keydown()은 한글 키 제외 모든 키에 대해 이벤트를 발생시키지만 keypress()기능키에 대해서는 이벤트를 발생시키지 않습니다. (F1~F12, Alt, Ctrl, Shift, ↑, Backspace, Caps Lock, 한/영, Tab 등) 키보드 이벤트 핸들러에서 생성된 이벤트 객체의 속성을 이하면 고유 키의 코드값을 구할 수 있고, 이를 이용해서 단축키 기능을 만들 수 있습니다.

 

// 이벤트 등록
$("이벤트대상").keydown(function(){ code; });
$("이벤트대상").on("keydown", function(){ code; });

// 강제 발생
$("이벤트대상").keydown();


// 이벤트 등록
$("이벤트대상").keyup(function(){ code; });
$("이벤트대상").on("keyup", function(){ code; });

// 강제 발생
$("이벤트대상").keyup();


// 이벤트 등록
$("이벤트대상").keypress(function(){ code; });
$("이벤트대상").on("keypress", function(){ code; });

// 강제 발생
$("이벤트대상").keypress();

 

 

 

 

 

 

 

이벤트가 발생한 요소 추적하기

 

$(this) 선택자 : 이벤트 핸들러에서 $(this)를 사용하면 이벤트가 발생한 요소를 선택하여 이벤트가 발생한 요소를 추적할 수 있습니다. 

index() 인덱스 반환 메서드 : 이벤트를 등록한 요소 중 이벤트가 발생한 요소의 인덱스값을 반환합니다.

 

$("이벤트 대상 선택").on("이벤트 종류", function(){ 
	$("이벤트 대상 선택").index(this);
}); 

 

 

 

 

 

 

 

그룹 이벤트 등록 및 삭제하기

단독이벤트가 아닌 그룹으로 여러 개의 이벤트를 등록하는 메서드입니다. 이미 등록된 이벤트를 삭제하는 메서드도 살펴볼 것입니다.

 

종류 설명
on() 이벤트 대상 요소에 2개 이상의 이벤트를 등록합니다.
이벤트를 등록한 이후에도 '동적'으로 생성되거나 복제된 요소에도 이벤트가 적용됩니다.
bind() 이벤트 대상 요소에 2개 이상의 이벤트를 등록합니다.
delegate() 선택한 요소의 하위 요소에 이벤트를 등록합니다.
이벤트를 등록한 이후에도 '동적'으로 생성되거나 복제된 요소에도 이벤트가 적용됩니다.
one() (이벤트 대상 요소에 1개 이상의 이벤트를 등록합니다.)
지정한 이벤트가 1회 발생하고 자동으로 해제됩니다.

 

 

앞에서 배운 이벤트 등록 방식으로는 객체 조작 메서드에 의해 새로이 생성, 복제된 요소에 이벤트를 등록할 수 없습니다. on() 메서드는 '라이브 이벤트 등록 방식'으로 동적으로 생성되거나 복제된 요소에도 이벤트가 적용됩니다. one() 메서드도 특정 방식으로 라이브 이벤트를 등록할 수 있습니다.

 

$([document | "이벤트 대상의 상위 요소 선택"]).on("이벤트 종류", "이벤트 대상 선택", function(){
	자바스크립트 코드;	
});
$([document | "이벤트 대상의 상위 요소 선택"]).delegate("이벤트 대상 요소 선택", "이벤트 종류", function(){
	자바스크립트 코드;	
});
// 기본 이벤트 등록 방식
$("이벤트 대상 요소 선택").one("이벤트 종류", function(){
	자바스크립트 코드;	
});

// 라이브 이벤트 등록 방식
$([document | "이벤트 대상의 상위 요소 선택"]).one("이벤트 종류", "이벤트 대상 선택", function(){
	자바스크립트 코드;	
});

 

 

 

이벤트 제거 메서드

이벤트 등록 메서드에 따라 이벤트를 해제하는 방법이 달라집니다. 기본 이벤트를 제거하느냐 라이브 이벤트를 제거하느냐에 따라서도 그렇습니다.

 

종류 설명
off() on() 메서드로 등록한 이벤트 제거
unbind() bind() 메서드로 등록한 이벤트 제거
undelegate() delegate() 메서드로 등록한 이벤트 제거

 

// 기본 이벤트 제거 
$("이벤트 대상 요소 선택").off("이벤트 종류");
$("이벤트 대상 요소 선택").unbiind("이벤트 종류");
$("이벤트 대상 요소 선택").delegate("이벤트 종류");

// 라이브 이벤트 제거
$([document | "이벤트 대상의 상위 요소 선택"]).off("이벤트 종류", "이벤트 대상 선택");
$([document | "이벤트 대상의 상위 요소 선택"]).undelegate("이벤트 대상 선택", "이벤트 종류");

 

 

 

 

추가 실습 : 제이쿼리 글자 확대, 축소 버튼 만들기

 

 

본 내용은 DO IT! 자바스크립트+제이쿼리 입문 도서를 참고하여 공부하며 요약해본 것입니다.

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90
대표적인 탐색 선택자에는 배열의 index를 사용해 선택하는 '위치 탐색 선택자'와 배열에 담겨진 요소 중 지정된 속성과 값으로 선택하는 '속성 탐색 선택자'가 있습니다. 콘텐츠 포함 여부로 재선택 가능한 '콘텐츠 탐색 선택자'와 '필터링 선택자'도 있습니다.

 

 

 

 

위치 탐색 선택자

기본 선택자로 선택한 요소는 배열에 담깁니다. 이 때 배열의 인덱스를 사용하면
특정 요소를 좀 더 정확하게 선택 가능합니다.

 

위치 탐색 선택자 종류

종류 사용법 설명
$("요소 선택:first")
$("요소 선택").first()
$("li:first")
$("li").first()
전체 <li> 요소 중 첫 번째 요소만 선택
$("요소 선택:last")
$("요소 선택").last()
$("li:last")
$("li").last()
전체 <li> 요소 중 마지막 요소만 선택
$("요소 선택:odd") $("li:odd") <li> 요소무리 중 짝수 번째 요소 선택 (홀수 인덱스)
$("요소 선택:even") $("li:even") <li> 요소무리홀수 번째 요소 선택 (짝수 인덱스)
$("요소 선택:first-of-type") $("li:first-of-type") <li> 요소무리 첫 번째 요소만 선택
$("요소 선택:last-of-type") $("li:last-of-type") <li> 요소무리  마지막 요소만 선택
$("요소 선택:nth-child(숫자)") $("li:nth-child(3)") <li> 요소무리  세 번째 요소만 선택
$("요소 선택:nth-child(숫자n)") $("li:nth-child(3n)") <li> 요소무리  3의 배수 번째 요소만 선택
$("요소 선택:nth-last-of-type"(숫자)") $("li:nth-last-of-type(2)") <li> 요소무리 중 마지막부터 두 번째 요소만 선택
$("요소 선택:only-child(숫자)") $("li:only-child ") 부모요소 내에 <li> 요소가 1개뿐인 <li>요소만 선택
$("요소 선택:eq(index)")
$("요소 선택").eq(index)
$("li:eq(2) ")
$("li").eq(2)
<li> 요소 중 인덱스 2가 참조하는 요소 불러옴
$("요소 선택:gt(index)") $("li:gt(1)") <li> 요소 중 인덱스 1보다 큰 인덱스가 참조하는 요소 불러옴
$("요소 선택:lt(index)") $("li:lt(1)") <li> 요소 중 인덱스 1보다 작은 인덱스가 참조하는 요소 불러옴
$("요소 선택:slice(index)") $("li").slice(2) <li> 요소 중 인덱스 2부터 참조하는 요소 불러옴

 

first : 선택된 요소 중 첫번째만
last : 선택된 요소 중 마지막
even : 홀수번째 요소
odd : 짝수번 요소

eq : 지정요소
lt : less than
gt : greater than

first-of-type : 선택 요소의 무리 중 각각의 첫번째
last-of type : 선택 요소의 무리 중 각각의 마지막

nth-child : 선택 요소의 무리 중 지정한 숫자의 요소
nth-child(숫자n) : 선택 요소의 무리 중 지정한 배수의 요소
nth-last-child(숫자) : 선택한 요소의 무리 중 마지막 위치에서 지정한 숫자의 요소

only-child :  부모 요소에게 하나뿐인 자식 요소인 경우 선택
-> ($("li:onliychild")면 li 자식요소가 하나만 있는 부모요소 선택
slice(start index, end index) : 선택 요소의 지정된 구간 인덱스의 요소
-->($(slice(1,3)은 인덱스 1부터 3번째까지)

 

var a = [1, 2, 3, 4, 5]; 
a.slice(0, 3); // [1, 2, 3]을 반환한다. 
a.slice(3); // [4, 5]를 반환한다. 
a.slice(1, -1); // [2, 3, 4]를 반환한다. 
a.slice(-3, -2) // [3]을 반환한다.

출처: https://webclub.tistory.com/326 [Web Club] 

 

 

 

 

제이쿼리 배열 관련 메서드

종류 사용법 설명
each() / $.each() $.("요소선택").each(function)
$.each($("요소 선택"), function)
배열에 저장된 문서 객체만큼 메서드 반복 실행
배열에 저장된 객체의 인덱스 순서대로 하나씩 접근해서
객체를 선택하고 인덱스를 구함
$.map() $.map(Array, function) 배열에 저장된 데이터 수만큼 메서드 반복 실행
함수에서 반환된 데이터는 새 배열에 순서대로 저장해
새로운 배열객체로 반환
$.grep() $.grep(Array, function) 배열에 저장된 데이터 수만큼 메서드 반복 실행
반환값이 true여만 배열의 데이터가 인덱스 오름차순으로 새 배열에 저장, 반환
$.inArray() $.inArray(data, Array, start index) 배열 안에서 지정 데이터를 찾으면 가장 앞 데이터의 인덱스를 반환 (없으면 -1)
start index의 값을 지정하면 해다아 위치부터 데이터 탐색
$.isArray() $.isArray(object) 입력한 객체가 배열 객체면 true, 아니면 false
$.merge() $.merge(Array1, Array2) 인자값으로 입력한 2개의 배열 객체를 하나로 그룹화
index() $.("요소선택").index("지정 요소 선택") 지정 선택 요소의 인덱스값을 반환

 

 

//each

$("요소 선택").each(function(매개변수1, 매개변수2) { })
$.each($("요소 선택"), function(매개변수1, 매개변수2) { })

$("요소 선택").each(function() { $(this) })
$.each($("요소 선택"), function() { $(this) })


// map
$.map(Array, function(매개변수1, 매개변수2){
	return 데이터;
});
$.grep(Array, function(매개변수1, 매개변수2){
	return [true | false];
});


// Array exmaple

$(function() {
  var arr1 = ["서울", "대전", "부산", "전주"];
  var arr2 = ["한국", "미국", "일본", "중국"];

  var obj = {
    "name": "정부장",
    "area": "서울"
  }

  var idxNum = $.inArray("부산", arr1);
  console.log(idxNum); // 2

  var okArray1 = $.isArray(arr1);
  var okArray2 = $.isArray(obj);
  console.log(okArray1); //true (배열 객체라서)
  console.log(okArray2); //false(객체라서)

  $.merge(arr1, arr2);
  console.log(arr2);
  console.log(arr1);
});


// index

$(function(){
	var idxNum = $("li").index($("#list3"));
	console.log(idxNum); // 반환은 인덱스 값
});

 

 

 

속성 탐색 선택자

선택한 요소를 기준으로 일치하는 속성의 포함 여부를 따져 요소를 선택
즉, 특정 속성을 포함하는 요소를 선택할 때 주로 사용

종류 사용법 설명
$("요소 선택[속성]") $("li[title]") li 요소 중 title 속성이 포함된 요소만 선택
$("요소 선택[속성=값]") $("li[title='리스트']") li 요소 중 title 속성이 리스트인 요소만 선택
$("요소 선택[속성^=텍스트]") $("li[href^='http://']") li 요소 중 href 속성값이 http://로 시작하는 요소만 선택
$("요소 선택[속성$=텍스트]") $("li[href$='.com']") li 요소 중 href 속성값이 .com로 끝나는 요소만 선택
$("요소 선택[속성*=텍스트]") $("li[href*='resta']") li 요소 중 href 속성값이 resta를 포함하 요소만 선택
$("요소 선택:hidden") $("li:hidden") li 요소 중 숨겨진 요소만 선택
$("요소 선택:visible") $("li:visible") li 요소 중 보이는 요소만 선택
$(":text") $(":text") input 요소 중 type 속성값이 text인 요소만 선택
$(":selected") $(":selected") selected 속성이 적용된 요소만 선택
$(":checked") $(":checked") checked 속성이 적용된 요소만 선택

 

 

 

그 외의 선택자 : 콘텐츠 탐색 선택자 

콘텐츠 탐색 선택자는 요소 또는 속성의 포함 여부에 따라 틀정 요소를 선택

 

종류 사용법 설명
$("요소 선택:contains(텍스트)") $("li:contains('내용2')") li 요소 중 '내용2'라는 텍스트를 포함하는 요소만 선택
$("요소 선택").contents() $("p").contents() 선택요소의 하위요소 중 가장 가까운 하위 요소 선택
$("요소 선택:has(요소명)")
$("요소 선택").has(요소명)
$("li:has('span')")
$("li").has('span')
li 요소 중 <span>을 포함하는 요소만 선택
$("요소 선택:not(제외요소)")
$("요소 선택").not(제외요소)
$("li:not(first)")
$("li").not(first)
li 요소 중 첫 번째 요소만 제외하고 선택
$("요소 선택").filter(필터요소) $("li").filter(".list2") li 요소 중 class 값이 "list2"인 요소만 선택
$("요소 선택").find(요소선택2) $("li").find("strong") li 요소의 하위요소인 <strong>만 선택
$("요소 선택").closest("요소선택2") $("strong").closest("div") strong을 감싸는 상위 div 요소 중 가장 가까운 상위 요소 선택
end() $("li").children("a").end() 필터링이 실행되기 이전인 요소인 li가 선택

 

contains() 탐색 선택자는 선택 요소 중 지정한 텍스트를 포함하는 요소만 선택하고, contents() 탐색 선택자는 선택한 요소의 하위 요소 중 1깊이의 텍스트와 태그 노드를 선택하고, has() 탐색 선택자는 선택 요소 중 지정한 태그를 포함하는 요소만 선택, not() 탐색 선택자는 선택한 요소 중 지정요소만 제외하고 선택, end() 탐색 선택자는 필터링 이전의 선택자가 적용되도록 합니다. find() 탐색 선택자와 filter() 탐색 선택자의 차이는 선택한 하위 요소 중 필터링하느냐, 선택한 요소 중 필터링하느냐의 차이입니다.

 

 

 

선택자와 함께 알아두면 유용한 메서드

선택자와 함께 알아두면 편리한 몇가지 메서드들입니다. 

 

종류 사용법 설명
.is(":요소상태") .is(":txt1").is(".visible") 선택한 요소가 일치하면(보이면) true 반환 / 없으면 false
$.noConflict() var 변수 = $.noConflict();
변수("요소선택")
이 함수를 이용하면 현재 제이쿼리에서 사용중인 $메서드 사용을 중단하고 새로 지정한 변수명 메서드를 사용
get() $("요소선택").get(0).style.color = '#000' 선택자에 get(0)을 적용하면 자바스크립트 DOM 방식의 스타일을 사용할 수 있음

 

 

is() 메서드

입력 요소의 체크 박스나 선택 상자의 선택 여부, 보이는지의 여부 등을 알아볼 때 주로 사용하고 반환값은 true or false 입니다.

 

$("요소선택").is(":[checked | selected | visible | hidden | animated]")

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

쉽게 함수는 프로그램의 코드를 저장한 공간입니다.
자바스크립트의 함수에 대해 DO IT!  자바스크립트+제이쿼리 입문
첫째마당의 5장을 보고 내용을 정리했습니다.

 

1 함수

: 프로그램의 코드를 저장한 공간

함수와 변수의 차이

변수 : 데이터만 저장, 코드를 저장할 수 없음
함수 : 코드를 메모리에 저장했다가 필요할 때마다 호출하여 사용
-> 즉 호출되어야만 실행

 

함수 정의문

testOne();
function testOne(){
	code;
}

// another way : 익명함수
var testFnc = function() {
 	code;
}
testFnc();

 

function 키워드를 사용해 변수를 선언 후 아래와 같이 호출

함수명이나 참조변수();

 

일반 함수 정의 방식과 익명 함수 선언 참조 방식의 차이점

: 호이스팅 기술이 적용되는지 안되는지

* 호이스팅 : 정의문보다 호출문이 먼저 나와도 함수 정의문을 끌어올려 함수를 호출

일반함수정의 : 지원
익명함수선언참조 : 미지원

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 함수 </title>
<script>
	var color=["white", "yellow", "aqua", "purple"];
			
	var i=0;
	function changeColor() {
		i++;
		if(i >= color.length) {
			i = 0;
		}
		
		var bodyTag = document.getElementById("theBody");
        //getElementById() : id 값을 이용해 문서객체(태그)를 선택하는 메서드		        
        
		bodyTag.style.backgroundColor = color[i];
        //문서객체.style.스타일속성=새값;
	}
</script>
</head>
<body id="theBody">
  <button onclick="changeColor();">배경색 바꾸기</button>
</body>
</html>

 

매개변수가 있는 함수 정의문

: 파라미터에 함수를 호출할 때 전달하고자 하는 값을 입력하여 호출할 수 있음
전달된 값은 매개변수가 받아 다른 함수 정의문에서 사용

function 함수명 {(매개변수1, 매개변수2, 매개변수3)}
	code;
함수명 (데이터1, 데이터2, 데이터3);

 

매개변수 없이 함수에 전달된 값 받아오기

: 함수 정의문에서 arguments 사용

함수정의문의 매개변수가 없는 상태에서 데이터를 전달하여 함수를 호출하면 그 값은 배열식으로 저장됨
함수 정의문에서는 그 값을 arguments라는 변수로 참조

function sum(){
	var sum = arguments[0]+ arguments[1] + arguments[2];
	document.write(sum);
}
sum(10,20,30);
function sum(){
	var sum = 0;
	for (var i=0; i<arguments.length; i++){
		sum+= arguments[i];
	}
	document.write(sum);
}
sum(10,20,30);

 

 

 

2 함수에서 return의 역할

: 함수에서 결과값을 반환할 때 사용

return문이 실행되면 반복문의 break문과 비슷하게 코드가 강제로 종료
-> 함수 정의문에 return문이 사용되면 함수를 호출했을 때 결과값(data)를 반환

 

데이터를 반환하고 강제 종료하는 return

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 함수 </title>
<script>
	function testAvg(arrData){
		var sum = 0;    
		for(var i = 0; i < arrData.length; i++) {
			sum += Number(prompt(arrData[i] + " 점수는?", "0"));
		}

		var avg = sum / arrData.length;
		return avg;
	}

	var arrSubject = ["국어", "수학"];
	var result = testAvg(arrSubject);

	document.write("평균 점수는 " + result + "점 입니다");
</script>
</head>
<body>
</body>
</html>

 

갤러리 예제

* 8보다 큰 값이 나오는 경우 이미지를 불러올 수 없는 오류 => return문으로 num++실행 이전에 함수를 종료하여 문제 해결)
* 23 setAttribute("속성명", "새값"); : 선택한 태그의 지정한 속성을 새 값으로 바꿈

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 함수 </title>
<style>
	*{margin: 0;padding: 0;}
	#galleryZone {text-align: center;}
	#galleryZone input[type="image"]{margin:0 8px;}
</style>
<script>
	var num = 1;
	function gallery(direct) {
		if(direct) {
			if(num == 8) return;
			num++;
		} else {
			if(num == 1) return;
			num--;
		}

		var imgTag = document.getElementById("photo");
		imgTag.setAttribute("src","images/pic_" + num + ".jpg");
	}
</script>
</head>
<body>
	<div id="galleryZone">
		<p><img src="images/pic_1.jpg" id="photo" alt=""></p>
		<p>
			<button onclick="gallery(0)">이전</button>
			<button onclick="gallery(1)">다음</button>
		</p>
	</div>
</body>
</html>

 

 

재귀함수 호출 

: 함수 안에서 자신의 함수를 재호출하는 것.

함수를 반복문처럼 여러번 호출하기 위해 사용

function myFnc(){
	code;
    myFnc();
}
myFnc();

예제

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 함수 </title>
<script>
	var num = 0;
	function testFnc(){
		num++;
		document.write(num, "<br>");
		if(num == 10) return;
		
		testFnc();
	}
	
	testFnc();
</script>
</head>
<body>
</body>
</html>

* 예제가 아리까리해서 다른 블로거 분의 팩토리얼 함수 예제로 이해했다.

 

 

 

3 함수의 스코프

Scope : 범위 라는 뜻
자바스크립트의 스코프는 변수 또는 함수의 유효 범위


전역 변수와 지역 변수의 차이

Global Variables 전역변수 : 어디에서든 사용할 수 있는 변수
Local Variables 지역변수 : 스코프 영역에서 선언한 변수로 그 영역에서만 사용가능

전역함수 : 자바스크립트 어디든 사용할 수 있는 함수
지역함수 : 스코프 영역에서 선언한 함수로 그 영역에서만 호출가능

var score = 10;
function myFnc(){
	var score=50;
	alert(score); //50
}
myFnc();
alert(score); //10

 

즉시실행함수

: 지역함수선언에 사용하면 효과적

//함수선언과 동시에 호출을 하는 방식
(function() {
	code;
}());

 

전역변수명이 같아 충돌하는 경우를 방지하기 위해 이런 방법을 쓸 수도 있다.

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 함수 </title>
<script>
	(function() {
		var num = 100;
		function menu( ) {
			num += 100;
			alert(num);
		}
		menu( );
	}());

	(function(){
		var num = 100;
		function menu( ) {
			alert(num);
		}
	}( ));
</script>
</head>
<body>
</body>
</html>

 

 

 

4 객체 생성자 함수

: 내장 객체 생성 시 사용하는 함수
-> 내장객체는 자바스크립트 엔진에 내장되어 있는 객체생성자함수(Object Constructor Function)을 사용해서 객체를 생성한다.

형식

function 함수명 (매개변수, 매개변수2, 매개변수3..) { //객체 생성자 함수
	this.속성명 = 새 값;
    this.함수명 = function() {
		자바스크립트 코드;
	}
}
var 참조변수(인스턴스네임) = new 함수명(); //객체 생성
var 참조변수 = { 속성: 새 값; 함수명: function() { ... } }

 

예제

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 함수 </title>
<script>
	function CheckWeight(name, height, weight) { // 객체 생성자 함수명은 가능한 대문자가 규칙
		this.userName = name;  //생성한 객체에 이름, 키, 몸무게 등의 속성 등록
		this.userHeight = height;
		this.userWeight = weight;
		this.minWeight;
		this.maxWeight;

		this.getInfo = function() { //생성한 객체에 속성값을 출력하는 함수를 등록
			var str = ""  
				str += "이름: " + this.userName + ", ";
				str += "키: " + this.userHeight + ", ";
				str += "몸무게: " + this.userWeight + "<br>";
				return  str;
		}
		this.getResult = function( ) {  // 몸무게가 정상인지 출력하는 함수를 등록
			this.minWeight = (this.userHeight - 100) * 0.9 - 5;
			this.maxWeight = (this.userHeight - 100) * 0.9 + 5;

			if(this.userWeight >= this.minWeight && 
			this.userWeight <= this.maxWeight) {
				return "정상 몸무게입니다";
			} else if(this.userWeight < this.minWeight) {
				return "정상 몸무게보다 미달입니다";
			} else {
				return "정상 몸무게보다 초과입니다";
			}
		}
	}

	var jang = new CheckWeight("장보리", 168, 62);
	var park = new CheckWeight("박달재", 180, 88);
	console.log(jang);
	console.log(park);

	document.write(jang.getInfo());  //객체의 속성정보 반환
	document.write(jang.getResult());  //몸무게의 표준여부 확인
</script>
</head>
<body>
</body>
</html>

 

 

메모리절약을 위한 프로토타입 사용

 

앞의 방식은 객체를 생성한 만큼 함수가 등록되어
함수를 여러 개 등록하면 메모리 공간을 많이 차지해서 메모리를 낭비

=> 객체생성자 함수에 프로토타입(Prototype)을 사용하여 함수를 등록하면 문제 해결

Prototype : 원형 (= 객체 생성자 함수)
프로토타입 메서드를 사용하여 등록한 함수는 원형, 즉 객체생성자 함수에서 생성된 객체를 공유 가능

function 함수명 (매개변수1, 매개변수2, ... 매개변수n) {
	this.속성명 = 새 값;
}
함수명.prototype.함수명 = function() {
	자바스크립트 코드;
}
var 참조변수 (인스턴스네임) = new 함수명();

 

예제

앞의 것과 같은 예제를 프로토타입으로 함수를 등록하는 방법

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 함수 </title>
<script>
	function CheckWeight(name, height, weight) {
		this.userName = name;
		this.userHeight = height;
		this.userWeight = weight;
		this.minWeight;
		this.maxWeight;
	}
	CheckWeight.prototype.getInfo = function() {
		var str = ""
		str += "이름: " + this.userName + ", ";
		str += "키: " + this.userHeight + ", ";
		str += "몸무게: " + this.userWeight + "<br>";
		return  str;
	}
	CheckWeight.prototype.getResult = function( ) {
		this.minWeight = (this.userHeight - 100) * 0.9 - 5;
		this.maxWeight = (this.userHeight - 100) * 0.9 + 5;

		if(this.userWeight >= this.minWeight && 
		this.userWeight <= this.maxWeight) {
			return "정상 몸무게입니다";
		} else if(this.userWeight < this.minWeight) {
			return "정상 몸무게보다 미달입니다";
		} else {
			return "정상 몸무게보다 초과입니다";
		}
	}    
	var jang = new CheckWeight("장보리", 168, 62);
	var park = new CheckWeight("박달재", 180, 88);
	console.log(jang);
	console.log(park);

	document.write(jang.getInfo());
	document.write(jang.getResult(), "<br>");

	document.write(jang.getResult === park.getResult);
</script>
</head>
<body>
</body>
</html>

 

 

 

5 자바스크립트 내장 함수

: 스크립트 엔진에 내장된 함수로 개발자가 함수를 직접 선언하지 않고 바로 호출 가능

 

내장 함수의 종류

종류 설명 사용 예
encodeURI() 문자를 유니코드값으로 인코딩
(영문, 숫자, :,/?:@&=+$ 제외)
 
encodeURIComponent() 문자를 유니코드값으로 인코딩 (영문, 숫자 제외)  
decodeURI() 유니코드값을 디코딩해 문자화  
decodeURIComponent() 유니코드값을 디코딩해 문자화  
parseInt() 문자열 데이터를 정수형 데이터로 반환  
parseFloat() 문자열 데이터를 실수형 데이터로 반환  
String() 문자열 데이터로 반환 String(5) -> "5"
Number() 숫자형 데이터로 반환 Number("5") -> 5
Boolean() 논리형 데이터로 반환  
isNaN() is Not a Number의 약자. 숫자가 아닌 문자가 포함되면 true 반환 isNaN("5-3") -> true
eval() 문자형 데이터를 따옴표가 없는 JS 코드로 처리 eval("15+5") - > 20

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

객체 기반 프로그래밍 언어인 자바스크립트.
자바스크립트의 객체에 대해 DO IT!  자바스크립트+제이쿼리 입문
첫째마당의 4장을 보고 내용을 정리했습니다.

 

1 객체  Object

자바스크립트의 객체를 구성하는 요소 : 속성(프로퍼티) + 기능(메소드)

 

사용 기본형

객체.메서드();
객체.속성(); 또는 객체.속성=값;
TV.width();
TV.color(); //property

TV.GO (); x..
CAR.GO (); o..

 

 

2 객체의 종류

내장객체, 브라우저 객체모델(BOM, Browser Object Model), 문서객체모델(DOM, Document Object Model)

 

내장객체

 

getDate(); //오늘의 날짜

 

 

브라우저 객체 모델

: 브라우저에 계층 구조로 내장되어 있는 객체
window, screen, location, history, navicator
브라우저 window 는 document와 location 객체의 상위 객체

window.location.href="URL"

 

 

 

문서 객체 모델

: Html 문서 구조

기본 구조는 최상위객체 <html>, 하위 객체인 <head>, <body> 등
JS로 이미지의 src 속성을 바꾸려면 지정된 <img>를 선택해 src 속성을 바꿔야 한다.
*지정된 요소를 제대로 선택하려면 문서 객체의 구조를 잘 이해하고 있어야 한다.

* 단점 : IE8 이하에서는 호환성이 떨어져서 제이쿼리 문서 객체 모델을 많이 사용

 

 

3 내장 객체

: Built-in Object

브라우저의 자바스크립트 엔진에 내장된 객체
필요 시 객체를 생성해 사용가능
String, Date, Array, Math, RegExp Object 등

참조변수(인스턴스이름) = new 생성함수();

 

날짜 객체

var t = new Date();

 

* date 관련 메서드 

- Get : 정보를 가져올 때 
- Set : 정보를 수정할 때


toGMTString() : GMT 표준 표기 방식으로 문자형 데이터로 반환함
toLocaleString() : 운영시스템 표기 방식으로 문자형 데이터로 반환

 

수학 객체

: 산술연산자 이외의 최대값 최소값 반올림값 등을 구할 수 있는 수학 객체 메소드

Math.abs : 절대값
Math.max
Math.min
Math.pow : 거듭제곱

Math.random : 0~1 사이의 랜덤난수
Math.round : 소수점 첫째자리반올림
Math.ceil : 소수점 첫째자리 올림
Math.floor : 소수점 첫째자리 내림

Math.sqrt : 제곱근값
Math.PI : 원주율

//난수를 발생하여 원하는 구간 정수의 값 구하기
Math.floor(Math.random*(Max-Min+1)) + Min;

 

컴퓨터가 낸 가위바위보를 추측해서 맞추는 예제

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 수학객체 </title>
<script>
	document.write("<h1>컴퓨터 가위, 바위, 보 맞추기</h1>");

	var game = prompt("가위, 바위, 보 중 선택하세요?", "가위");
	var gameNum;
	switch(game) {
		case "가위": gameNum = 1;
		break;
		case "바위": gameNum = 2;
		break;
		case "보": gameNum = 3;
		break;
		default: alert("잘못 작성하셨습니다.");
		location.reload();
	}
	var csam = Math.random()*3 ;
	var com = Math.ceil(csam);
	
	document.write("csam: " + csam + "<br>");
	document.write("com: " + com + "<br>");
	//document.write("<img src=\"images/math_img_" + com + ".jpg\">");

	if(gameNum == com) {
		//document.write("<img src=\"images/game_1.jpg\">");
		document.write("맞췄다");
	} else {
		//document.write("<img src=\"images/game_2.jpg\">");
		document.write("틀렸다");
	}
</script>
</head>
<body>
</body>
</html>

 

 

배열 객체 Array Object

: 여러 개의 데이터를 하나에 저장

나눌 배 / 열거할 열 (하나의 저장소를 쪼개서 데이터를 나열하는 것)
각각의 저장소에는 인덱스 번호(번지수)가 0부터 부여

 

배열 생성
var d = new Array();
d[0]= 30;
d[1]= "서른";
var d = new Array(30, "서른");
var d = [30, "서른"];

 

배열 객체의 데이터 소환
var arr = [30, "tt", true];
// 참조변수[인덱스 번호];
// arr[i];
arr[0];
for (var i=0; i<arr.length; i++) {
	document.write(arr[i], "<br>");
}
for (i in arr) {
	document.write(arr[i], "<br>");
}

 

배열 객체에서 사용 가능한 메서드와 속성

 

예제

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 배열객체 </title>
<script>
		var arr_1 = ["사당", "교대", "방배", "강남"];
		var arr_2 = ["신사", "압구정", "옥수"];

		var result = arr_1.join("-");
		console.log("join: "+result);

		result = arr_1.concat(arr_2);
		console.log("concat: "+result);

		result = arr_1.slice(1, 3);
		console.log("slice: "+result);

		arr_1.sort( );
		console.log("sort: "+arr_1);

		arr_2.reverse( );
		console.log("reverse: "+arr_2);
</script>
</head>
<body>
</body>
</html>
join: 사당-교대-방배-강남
concat: 사당,교대,방배,강남,신사,압구정,옥수
slice: 교대,방배
sort: 강남,교대,방배,사당
reverse: 옥수,압구정,신사

 

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 배열객체 </title>
<script>
	var greenArr = ["교대", "방배", "강남"];
	var yellowArr = ["미금","정자","수서"];

	greenArr.splice(2, 1, "서초", "역삼");  //2번 인덱스부터 1개의 데이터 삭제
	console.log(greenArr);

	var data1 = yellowArr.pop( ); //마지막 인덱스의 데이터
	var data2 = yellowArr.shift( );  //가장 첫번째 데이터 저장

	yellowArr.push(data2); //배열의 마지막 인덱스에 삽입
	console.log(yellowArr);  

	yellowArr.unshift(data1); //배열의 가장 앞쪽 인덱스에 삽입
	console.log(yellowArr);
</script>
</head>
<body>
</body>
</html>
(4) ["교대", "방배", "서초", "역삼"]
(2) ["정자", "미금"]
(3) ["수서", "정자", "미금"]

 

 

문자열 객체

: String Object 는 문자형 데이터를 객체로 취급하는 것.

//var 참조변수 = new String(문자형데이터)
var t = new String ("hello js")
// String() 메서드 // 문자형데이터
// another way
var t = "hello js";
// 참조변수   //문자형데이터

 

 

문자열 객체의 메서드 및 속성

종류 설명
charAt(index) 문자열에서 인덱스 번호에 해당하는 문자 반환
indexOf("찾을문자") 왼쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 일치하는 문자의 인덱스번호 반환 (없으면 -1 반환)
lastIndexOf("찾을문자") 오른쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 일치하는 문자의 인덱스번호 반환 (없으면 -1 반환)
match("찾을문자") 왼쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 찾은 문자 반환 (없으면  null 반환)
replace("바꿀문자", "새문자") 왼쪽부터 바꿀 문자와 일치하는 문자를 찾아 제일 먼저 찾은 문자를 새 문자로 치환
search("찾을문자") 왼쪽부터 찾을 문자와 일치하는 문자를 찾아 제일 먼저 일치하는 인덱스번호 반환
slice(a,b) a개의 문자를 자르고 b번째 이후의 문자를 자른 후 남은 문자 반환 (-는 뒤에서부터 셈)
substring(a,b) a인덱스부터 b인덱스 이전 구간의 문자 반환
substr(a, 문자갯수) 문자열에 a인덱스부터 지정한 문자 개수만큼 문자열 반환
split("문자") 지정한 문자를 기준으로 문자 데이터를 나누어 배열에 저장하여 반환 (기준이 된 문자는 제외)
toLowerCase() 대문자를 모두 소문자로 바꿔서 반환
toUpperCase() 소문자를 모두 대문자로 바꿔서 반환
length 문자의 개수 반환
concat("새로운문자") 새로운 문자열을 결합
charCodeAt(index) 문자열 index에 해당 문자의 아스키코드값 반환
fromCharCode(아스키 코드값) 아스키코드값에 해당하는 문자를 반환
trim() 문자의 앞이나 뒤의 공백 문자열 삭제

 

이메일 유효성 검사 예제

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> 문자 객체 </title>
<script>
	var userEmail = prompt("당신의 이메일 주소는?", "");
	var arrUrl = [".co.kr", ".com", ".net", ".or.kr", ".go.kr"];

	var check1 = false;
	var check2 = false;

	if( userEmail.indexOf("@") > 0 ) { check1=true; }

	for(var i = 0; i < arrUrl.length; i++) {
		if( userEmail.indexOf(arrUrl[i]) > 0 ) {
			check2 = true;
		} 
	}

	if( check1 && check2 ) {
		document.write( userEmail );
	} else {
		alert("이메일 형식이 잘못되었습니다.");
	}
</script>
</head>
<body>
</body>
</html>

 

 

 

03 브라우저 객체 모델

브라우저 객체 : 브라우저에 내장된 객체
브라우저 객체의 최상위 객체  :  window
브라우저 객체는 계층적 구조로 이루어짐 = 브라우저 객체 모델 Browser Object Model BOM

 

 

open() 메서드

: 팝업 창 나타내기
-> 지정한 URL 페이지를 새 브라우저 창에 나타내기

open("URL", "새창이름", "새창옵션");
//ex
window.open("https://coding-restaurant.tistory.com/", 
"hey", "width=300, height="300", left=50, top=10, scrollbars=no");

 

width, height 새창의 너비높이
left, top 새창을 띄울 수평 수직위치
scrollbars  숨김(no), 노출(yes)
location URL 주소입력 영역 숨김/노출
status 상태표시줄 영역 숨/노출
toolbars 도구 상자 영역 숨김/노출

 

alert() 메서드

: 경고 창 띄움. window() 객체를 따로 작성하지 않아도 사용 가능

alert("경고요");

 

prompt()

: 질의응답 창 띄움. window() 객체를 따로 작성하지 않아도 사용 가능

prompt("question", "answer");
//answer 부분 비워둘 수 있음

 

 

Confirm()

: 확인/취소 창 띄움

confirm("are you sure?");

 

 

일정한 간격으로 코드 실행

 

setInterval() / clearInterval()

: 일정한 간격으로 코드를 반복 실행

* clearInterval() : setInterval 메서드를 취소

var test = setInterval(function() { code } , 시간 간격 (ms));
var test = setInterval("code", 시간 간격(ms));
// ms : 1000분의 1초
clearInterval(test);
//ex
var intv = setInterval("i++", 3000); //3초간격
var intv = setInterval(function(){i++;}, 3000);

 

예제

//ex
var intv = setInterval("i++", 3000); //3초간격
var intv = setInterval(function(){i++;}, 3000);

 

 

setTimeout() / clearTimeout()

: 일정한 시간 후 코드 실행 후 종료

 

 

screen 객체

: 사용자 모니터 정보(속성)을 제공하는 객체
--> 모니터의 너비나 높이, 컬러 표현(bit)를 반환

screen.속성;
screen.width 화면의 너비값
screen.height 화면의 높이값
screen.availWidth 작업표시줄을 제외한 화면의 너비값
screen.availHeight 작업표시줄을 제외한 화면의 높이값
screen.colorDepth 사용자 모니터가 표현가능한 컬러 bit반환

 

 

 

location 객체

: 사용자 브라우저와 관련된 속성과 메서드를 제공하는 객체
--> 현재 URL에 대한 정보(속성)과 새로고침(reload) 메서드를 제공

location.href 사용자 브라우저의 주소영역의 참조주소를 설정하거나 URL 경로 값을 반환 
location.hash URL의 해시값을 반환 (#에 명시된 값)
location.hostname URL의 호스트 이름을 설정하거나 반환
location.host URL의 호스트 이름과 포트번호를 반환
location.protocol URL의 프로토콜 반환
location.search URL의 쿼리(요청값) 반환
location.reload() 새로고침

 

 

 

history 객체

: 사용자가 방문한 사이트를 기록,
이전방문사이트와 다음방문사이트로 다시 돌아갈 수 있는 속성과 메서드 제공

history.back() 이전 방문 사이트로 이동
history.forward() 다음 방문 사이트로 이동
history.go() -2 : 2단계 이전의 방문 사이트로 이동 (history.go(-2))
history.length() 방문 기록에 저장된 목록의 개수 반환

 

 

 

navigator 객체

: 현재 방문자가 사용하는 브라우저 정보운영체제(Operating System) 정보를 제공하는 객체

navigator.userAgent;
// 결과

Mozilla/5.0 (Macintosh; Intel Mac OS X....) // 기본플랫폼, () : 운영체제정보
AppleWebKit/537.3.. (KHTML, like Gecko) //브라우저 엔진이름
Chrome/79.0..... //사용중인 브라우저 이름
Safari/537.3.. // 같은 엔진 사용중이며 호환 가능한 다른 브라우저
navigator.appCodeName 현 브라우저의 코드명 반환 (모든 브라우저는 Mozilla 반환)
navigator.appName 현 브라우저의 이름 반환 (   //  Netscpae 반환)
navigator.appVersion 버전정보 반환 (   //   5.0(Windows) 반환 )
navigator.language 사용중인 언어 반환 
navigator.product 엔진이름 반환 (크롬은 게코)
navigator.platform 운영체제 정보 제공 (64비트도 브라우저가 32비트면 Win32라 표시)
navigator.onLine 온라인상태여부 (정상연결  true)
navigator.userAgent 브라우저와 운영체제의 종합 정보

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

자바스크립트의 화면 출력 방법들을 총 정리해보았습니다.

 

 

1. 경고창 window.alert()

window.alert("출력");

 

 

2. HTML출력 document.write()

document.write("HTML출력");
// HTML document 이후에 document.write()의 사용은
// 존재하는 모든 HTML을 지우고 완전히 로드되기 때문에
// 테스트 용도로만 추천
<!DOCTYPE html>
<html>
    <body> 
      <h1>JavaScript 출력 테스트</h1> 
      <button onclick="document.write('HTML출력')">click</button> 
    </body>
</html> 

 

 

3. HTML요소에 출력 innerHTML

document.getElementById("test").innerHTML = '출력'; 

 

 

4. 브라우저 콘솔에 출력 console.log()

// 브라우저 F12 개발자 모드에서 확인 가능
console.log("출력");

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

스크립트 오류도 없는데 크롬에서만 보이고
익스플로러에서는 보이지 않는 div가 있다면
아래의 방법이 도움이 될 것 같습니다.

 

이상

  • 불러오기 한 html의 내용이 이상없이 나와야 한다
  • 크롬에서는 잘 구동되나 익스플로러에서는 증발

 

증상

  • 크롬에서는 보이는데 익스플로러에서는 안보인다
  • 스크립트 구문의 오류도 아니다. 함수는 잘 읽었다
  • 외부 html 불러오기 문제도 없음을 체크했다.

 

진단

  • offset 값을 확인해보니 left에 엄청나게 큰 값이 들어가있다. (1512.29)
  • 즉 값이 커서 화면을 벗어나 있었다.
  • css position : absolute 속성의 특징상 부모를 잘못 설정한 것으로 추정

 

해결

=> 결국은 css와  js의 일부를 변경

 

  •  css : left값을 추가한다.
position: absolute;
left: 0;

 

  • js : 동적으로 div를 조정해주는 부분에서 초기화하고 새로 부르는 함수를 추가 (.hide(), .show())

 

var count = 0; 
        $("#crossContent").click(function() { 
          count++;
          if (defaultShow.is(":visible")) {
            mul.hide();
            horizonShow.show();
            if (count % 2 == 1) {
              $("#cp2").after($("#cp1"));
            } else {
              $("#cp2").before($("#cp1"));
            }
          } else if (horizonShow.is(":visible")) {
            mul.hide();
            horizonShow.show();
            if (count % 2 == 1) {               
              actPn1.css("top", "50%");
              actPn2.css("top", "0%");
            } else {
              //먼저
              actPn1.css("top", "0%");
              actPn2.css("top", "50%");             
            }
          } else {
            alert("전환할 창이 없습니다.");
          }           
        });

 

 

* 참고하면 좋을 태그의 위치를 가져오는 함수 offset, position 둘의 차이점

https://cofs.tistory.com/197 [CofS]
http://www.devkuma.com/books/pages/226

 

* 참고하면 좋을 offset 값 (position) 좌표 알아내기

https://seohc.tistory.com/177

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90
AJAX는 전체 페이지를 다시 로드하지 않고도 서버와 데이터를 교환하고 웹 페이지의 일부를 업데이트하는 기술로, 서버와 통신시 데이터 포맷은 주로 XML과 Json을 사용합니다. 파싱속도는 Json이 XML보다 약간 더 빠르다고 알려져 있으며 구문 분석, 파싱((syntactic) parsing)은 일련의 문자열을 의미있는 토큰(token)으로 분해하고 이들로 이루어진 파스 트리(parse tree)를 만드는 과정을 말합니다. 쉽게, 주로 어떤 데이터를 다른 모양으로 가공하는 걸 말합니다. 

 

 

jQuery AJAX 메소드

 

Method Description
$.ajax() Performs an async AJAX request
$.ajaxPrefilter() Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax()
$.ajaxSetup() Sets the default values for future AJAX requests
$.ajaxTransport() Creates an object that handles the actual transmission of Ajax data
$.get() Loads data from a server using an AJAX HTTP GET request
$.getJSON() Loads JSON-encoded data from a server using a HTTP GET request
$.parseJSON() Deprecated in version 3.0, use JSON.parse() instead. Takes a well-formed JSON string and returns the resulting JavaScript value
$.getScript() Loads (and executes) a JavaScript from a server using an AJAX HTTP GET request
$.param() Creates a serialized representation of an array or object (can be used as URL query string for AJAX requests)
$.post() Loads data from a server using an AJAX HTTP POST request
ajaxComplete() Specifies a function to run when the AJAX request completes
ajaxError() Specifies a function to run when the AJAX request completes with an error
ajaxSend() Specifies a function to run before the AJAX request is sent
ajaxStart() Specifies a function to run when the first AJAX request begins
ajaxStop() Specifies a function to run when all AJAX requests have completed
ajaxSuccess() Specifies a function to run when an AJAX request completes successfully
load() Loads data from a server and puts the returned data into the selected element
serialize() Encodes a set of form elements as a string for submission
serializeArray() Encodes a set of form elements as an array of names and values

 

 

 

 

Get방식과 Post 방식의 차이

 

Get 요청은 웹브라우저의 주소창에 주소를 입력한 후 엔터를 칠 때, 페이지에서 링크를 클릭했을 때, 입력폼의 method 속성이 get 일 때, AJAX에서 서버에 연결할 때 get 으로 설정한 경우 발생한다. HTTP GET 요청 프로토콜은 서버에 보내는 데이터를 요청-URI 안에 포함되어 따로 message-body를 보낼 필요가 없다. 따라서 Get 방식이 Post 방식보다 간단하고, 빠르고, 거의 모든 경우에 사용할 수 있다.

 

예: /webapp/student/list.json?pageNo=2&pageSize=5 (서버에 보내는 데이터: ?pageNo=2&pageSize=5)

 

  • 즐겨 찾기에 데이터와 URL을 함께 저장할 수 있어서 다시 요청하기 편하다.

  • 손쉽게 다른 사람에게 전달할 수 있다.

  • 용도: 데이터 조회 요청에 적합하다.

  • 데이터가 타인에게 쉽게 노출될 수 있다.

  • 로그인과 같은 보안 전송에는 사용하기 적합하지 않다.

  • 바이너리 데이터를 전송할 수 없다. 전송하려면 base64와 같은 ASCII 형식으로 변환해야 한다.

  • 보통 Request-Line의 크기가 8KB나 16KB로 제한되어 있어서, 대량의 데이터를 보낼 수 없다.

 

 

 

Post 요청 입력폼의 method 속성이 post 일 때, AJAX에서 서버에 연결할 때 post 로 설정한 경우 발생하며 Post 방식을 꼭 사용해야 할 경우는 저장된 파일일때 ( 서버 상의 파일이 나 데이터베이스를 수정할 때 ), 서버에 많은 양의 데이터를 보낼때 ( POST 방식은 사이즈 제한이 없다), 사용자의 입력을 보낼때 ( 알 수 없는 문자열이 포함되어 있을 가능성이 있을 경우 )가 있다. HTTP POST 요청 프로토콜은 서버에 보내는 데이터가 요청-URI 안에 포함되지 않고 따로 message-body 부분에 첨부 

 

  • 보통 웹서버에서는 message-body 부분으로 전송되는 데이터의 경우 대량으로 전송 받는 것을 허락 

  • 대용량 데이터를 첨부할 수 있다.

  • 웹브라우저 주소창에 보이지 않는다.

  • 멀티파트 방식을 결합하면 바이너리 데이터도 보낼 수 있다.

  • 용도: 게시글, 파일업로드 등 대량 데이터 전송 시, 로그인 폼처럼 보안을 요구하는 데이터 전송 시.

  • 즐겨 찾기에 추가할 때 데이터가 포함되지 않기 때문에 조회 용 URL을 저장할 수 없다.

  • 특정 페이지의 링크 정보를 다른 사람에게 전달할 수 없다.

 

 

 

 

 

$.post  &  $.get

$.post & $.get 는  $.ajax를 상속
$.post & $.get는 고수준으로 구현했다고 보면 되고, $.ajax 는 저수준
수준이 낮은게 아니라 더 낮은 단계의 api를 사용할 수 있다

 

jQuery $ .get() 메소드

 

HTTP GET 요청을 사용하여 서버에서 데이터를 요청
선택적 콜백 매개 변수는 요청이 성공하면 실행될 함수의 이름

$.get(URL,callback);

 

 

jQuery $ .post () 메소드

 

HTTP POST 요청을 사용하여 서버에서 데이터를 요청
필수 URL 매개 변수는 요청하려는 URL을 지정 
선택적 data 매개 변수는 요청과 함께 전송할 일부 데이터를 지정
선택적 콜백 매개 변수는 요청이 성공하면 실행될 함수의 이름

 

$.post(URL,data,callback);

 

 


 

1. 서버에 요청하기

 

$.ajax({
    url : "경로",
    type : "POST",
    success : function(xml){
        console.log(xml);
    }
}); 

 

요청경로(URL) : 필요한 경로에 맞게 사용. 실제 웹루트안에 XML 파일에 요청,
서버에서 XML을 만들어서 리턴, 페이지 자체를 XML페이지로 등등
type : 생략해도 jQuery가 알아서 잘 잡음
결과 : 콘솔창에 XML문서가 표시

 

// script

$.ajax({
    url: 'document.xml', // 읽어올 문서
    type: 'GET', // 방식
    dataType: 'xml', // 문서 타입
    timeout: 1000, // 시간 설정
    error: function(){ // 로딩 에러시
        alert('Error loading XML document');
    },
    success: function(xml){
    $(xml).find('item').each(function(){  // xml 문서 item 기준으로 분리후 반복
        var link = $(this).find("link").text();
        var title = $(this).find("title").text(); 
        var description = $(this).find("description").text(); 
        var tag = $(this).find("tag").text(); 

        var view_text = link + title + description + tag ; 
        $("#id").append(view_text);  // #id 에 view_text 삽입
    });
} 
});

// 출처: https://abisuk.tistory.com/entry/ajax-기본-샘플-소스-xml-파싱해서-읽어서-뿌리기 [아비분석실]
// xml 파일

<item>
	<category>
		<![CDATA[ 카테고리 ]]>
	</category>
	<title>
		<![CDATA[ 제목 ]]>
	</title>
	<link>
		http://주소
	</link>
	<description>
		<![CDATA[ 내용 ]]>
	</description>
	<tag>
		<![CDATA[ 태그 ]]>
	</tag>
</item>


// 출처: https://abisuk.tistory.com/entry/ajax-기본-샘플-소스-xml-파싱해서-읽어서-뿌리기 [아비분석실]

 

 

 

 

 

 

2. 사용할 핵심 함수

 

1. find()

jQuery를 사용, find 함수는 사전의미 그대로 무언가를 찾는 함수 

 

$('body').find('span').text();

 

 

2. text()

인자가 없으면 셀럭터로 선택된 것의 문자열을 가지고 오고 인자를 넣어주면 셀렉터로 선택된 것에 문자열(인자)을 적용

 

$('body').find('span').text();
$('body').find('span').text('TEXT');

 

 

3. attr()

attr함수는 어트리뷰트의 줄임말로 속성을 제어하는 함수 
인자는 두가지를 넣을 수 있고 첫번째 인자는 속성명, 두번째 인자는 속성값
첫번째 인자만 넣을 경우 속성명에 해당하는 값을 리턴하고, 두번째 인자까지 넣을 경우 속성값을 적용 

 

$('body').find('span').attr('id');
$('body').find('span').attr('id', 'A');

 

 

 

 

 

3. html로 리턴

먼저 우리는 ajax success함수에서 리턴받을 XML 명을 xml 이라고 적어놨으므로 첫번째 선택자는 xml 

 

// $(xml);  //서버에 요청하여 받은 XML 이 선택

var txt = $(xml).find('첫번째문단').text(); 
// find 함수로 노드명을 적으면 셀렉트가 되고, 
// 그뒤에 text 함수를 사용하시면 해당 노드의 텍스트를 가지고옵니다.

// 출처: https://annotations.tistory.com/58 [Annotation]

 

노드의 속성값을 가지고 오려면 attr 사용

 

var attr = $(xml).find('두번째문단').attr('순서');

출처: https://annotations.tistory.com/58 [Annotation]

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v