recursal/MDN huggingface dataset:
Document: visibilitychange 이벤트
==============================

`visibilitychange` 이벤트는 브라우저 탭의 콘텐츠가 보여지거나 숨겨질 때 문서에서 발생합니다.

이 이벤트는 취소할 수 없습니다.

구문
--

이벤트 이름을 `addEventListener()` 등의 메서드에 제공하거나, 이벤트 처리기 속성을 사용하세요.


```js
addEventListener("visibilitychange", (event) => {});

onvisibilitychange = (event) => {};
```

이벤트 유형
------

일반 `Event`.

사용 일람
-----

이 이벤트 자체로는 문서의 새로운 노출 상태를 알아낼 수 없습니다. 문서의 `visibilityState` 속성을 사용하세요.

사용자가 새로운 페이지로 이동하거나, 탭을 바꾸거나, 탭을 닫거나, 브라우저를 닫거나 최소화하거나, 모바일 기기에서는 다른 앱으로 전환하는 경우에는 `visibilityState`가 `hidden`으로 바뀌고 이 이벤트가 발생합니다. `hidden`으로의 전환은 페이지에서 안정적으로 관측할 수 있는 마지막 이벤트므로 개발자는 이 시점을 사용자 세션의 마지막으로 취급하여 (분석 정보 전송 등) 마무리 작업을 실행해야 합니다.

`hidden` 전환은 페이지의 UI 갱신을 중단하고, 사용자가 백그라운드에서는 원하지 않을 작업들을 중지할 때로도 적합한 시점입니다.

예제
--

hidden 전환 시 음악 일시중지하기
---------------------

이 예제는 문서가 보이게 되면 음악 트랙을 재생하고, 문서를 더 볼 수 없으면 일시중지합니다.


```js
document.addEventListener("visibilitychange", () => {
  if (document.visibilityState === "visible") {
    backgroundMusic.play();
  } else {
    backgroundMusic.pause();
  }
});
```

hidden 전환 시 세션 종료 분석 정보 전송하기
----------------------------

이 예제는 `hidden`으로의 전환을 사용자 세션의 마지막으로 취급하여, `Navigator.sendBeacon()` API를 사용해 적절한 분석 정보를 전송합니다.


```js
document.onvisibilitychange = () => {
  if (document.visibilityState === "hidden") {
    navigator.sendBeacon("/log", analyticsData);
  }
};
```

명세서
---

| Specification |
| --- |
| HTML Standard # event-visibilitychange |
| HTML Standard # handler-onvisibilitychange |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* Page Visibility API
* `Document.visibilityState`
* Don't lose user and app state, use Page Visibility에서는 왜 `beforeunload`/`unload` 대신 `visibilitychange`를 사용해야 하는지 자세히 설명합니다.
* Page Lifecycle API에서는 웹 애플리케이션에서 페이지의 수명 주기 동작을 처리하는 최선의 방법들을 제시합니다.
Window: DOMContentLoaded 이벤트
============================

**`DOMContentLoaded`** 이벤트는 HTML 문서가 완전히 구문 분석되고 모든 지연된 스크립트(`<script defer src="…">`와 `<script type="module">`)가 다운로드되고 실행될 때 발생합니다. 이미지, 서브프레임, 비동기 스크립트와 같은 다른 항목의 로드가 끝날 때까지 기다리지 않습니다.

`DOMContentLoaded`는 스타일시트의 로드를 기다리지 않습니다. 하지만 지연된 스크립트는 스타일시트를 기다리며 `DOMContentLoaded` 이벤트는 지연된 스크립트 이후에 대기열로 추가됩니다. 또한, 지연되지 않거나 비동기가 아닌 스크립트(예: `<script>`)는 이미 구문 분석된 스타일시트가 로드될 때까지 기다립니다.

이 이벤트의 원래 대상은 로드된 `문서`입니다. `Window` 인터페이스에서 이 이벤트를 수신하여 캡처 혹은 버블링 단계에서 다룰 수 있습니다. 이 이벤트에 대한 자세한 설명은 `DOMContentLoaded` 페이지를 참조하시길 바랍니다.

다른 이벤트인 `load`는 오직 완전히 로드된 페이지를 감지할 때만 사용되어야 합니다. `DOMContentLoaded`가 더 적절한 위치에서 `load`를 사용하는 것은 흔한 실수입니다.

이 이벤트는 취소할 수 없습니다.

구문
--

`addEventListener()`와 같은 메서드에서 이벤트 이름을 사용하거나 이벤트 핸들러 속성을 설정합니다.


```js
addEventListener("DOMContentLoaded", (event) => {});

onDOMContentLoaded = (event) => {};
```

이벤트 타입
------

제네릭 `이벤트`.

예제
--

### 기본 용도


```js
window.addEventListener("DOMContentLoaded", (event) => {
  console.log("DOM fully loaded and parsed");
});
```

명세서
---

| Specification |
| --- |
| HTML Standard # stop-parsing |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* 관련된 이벤트: `load`, `readystatechange`, `beforeunload`, `unload`
* `문서` 대상에 대한 이벤트: `DOMContentLoaded`
Document: contentType property
==============================

**`Document.contentType`** 은 document가 렌더링 되는 MIME 타입을 반환하는 읽기 전용 속성입니다. `Document.contentType`은 HTTP 헤더나 그 외에 MIME 정보 출처에서 나올 수 있으며 브라우저나 확장 프로그램에서 수행하는 자동 타입 변환의 영향을 받을 수 있습니다.

**참고:** 이 속성은 `<meta>`에 영향을 받지 않습니다.

값
-

`contentType`은 읽기 전용 속성입니다.

명세서
---

| Specification |
| --- |
| DOM Standard # ref-for-dom-document-contenttype① |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Document.hidden
===============

**`Document.hidden`** 읽기 전용 속성은 페이지가 숨겨졌는지 여부를 `Boolean` 값으로 나타냅니다.

예제
--


```js
document.addEventListener("visibilitychange", function () {
  console.log(document.hidden);
  // 숨김 여부가 변했을 때의 행동
});
```

명세
--

| Specification |
| --- |
| HTML Standard # dom-document-hidden |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Document()
==========

**`Document`** 생성자는 브라우저에 로드되고 페이지 컨텐츠로의 진입점으로써 제공되는 웹 페이지인 새로운 `Document` 객체를 생성합니다.

구문
--


```js
new Document();
```

명세
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-document-document① |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Document.createDocumentFragment()
=================================

새로운 빈 `DocumentFragment` 를 생성합니다.

Syntax
------


```js
var docFragment = document.createDocumentFragment();
```


`docFragment` 는 빈 `DocumentFragment` 객체를 나타냅니다.

Description
-----------

`DocumentFragment`s 는 DOM 노드들 입니다. 이것들은 메인 DOM 트리의 일부가 되지 않습니다. 일반적인 유즈 케이스는 다큐먼트 조각을 생성하고, 엘리먼트들을 다큐먼트 조각에 추가하고 그 다큐먼트 조각을 DOM 트리에 추가하는 것입니다. DOM 트리 내에서 다큐먼트 조각은 그것의 모든 자식들로 대체됩니다.

메모리 내에 다큐먼트 조각이 존재하고 메인 DOM 트리의 일부가 아니라면, 이것에 자식들을 추가하는 것은 페이지 reflow (엘리먼트의 위치와 좌표의 계산) 를 유발하지 않습니다. 따라서, 다큐먼트 조각을 사용하는 것은 보통 better performance 의 결과를 가져옵니다.

Example
-------


```js
var ul = document.getElementsByTagName("ul")[0]; // assuming it exists
var docfrag = document.createDocumentFragment();
var browserList = ["Internet Explorer", "Firefox", "Safari", "Chrome", "Opera"];

browserList.forEach(function (e) {
  var li = document.createElement("li");
  li.textContent = e;
  docfrag.appendChild(li);
});

ul.appendChild(docfrag);
// a list with well-known web browsers
```

명세서
---

| Specification |
| --- |
| DOM Standard # ref-for-dom-document-createdocumentfragment① |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* `document.implementation.createDocument()` (en-US)
* `documentFragment`
Document.body
=============

`Document.body` 속성은 현재 문서의 `<body>` 혹은 `<frameset>` 노드를 나타냅니다. 일치하는 요소가 존재하지 않으면 `null`을 반환합니다.

구문
--


```js
const objRef = document.body;
document.body = objRef;
```

예제
--


```js
// HTML: <body id="oldBodyElement"></body>
alert(document.body.id); // "oldBodyElement"

let aNewBodyElement = document.createElement("body");

aNewBodyElement.id = "newBodyElement";
document.body = aNewBodyElement;
alert(document.body.id); // "newBodyElement"
```

참고
--

`Document.body`는 문서의 콘텐츠를 수용하는 요소입니다. `<body>` 콘텐츠를 가지고 있는 문서는 `<body>` 요소를 반환하고, 프레임셋을 가지고 있는 문서는 가장 바깥쪽의 `<frameset>` 요소를 반환합니다.

`body` 속성에 새로운 값을 설정할 수 있긴 하지만, 문서에 새로운 본문을 설정하는건 `<body>` 요소가 가지고 있던 모든 자식을 제거하는 것과 같습니다.

명세서
---

| Specification |
| --- |
| HTML Standard # dom-document-body-dev |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Document.head`
Document.implementation
=======================

현재 document에 연관된 `DOMImplementation` (en-US) 객체를 반환합니다.

Syntax
------


```js
DOMImpObj = document.implementation;
```

Example
-------


```js
var modName = "HTML";
var modVer = "2.0";
var conformTest = document.implementation.hasFeature(modName, modVer);

alert("DOM " + modName + " " + modVer + " supported?: " + conformTest);

// alerts with: "DOM HTML 2.0 supported?: true" if DOM Level 2 HTML module is supported.
```


모듈 네임 목록(예: Core, HTML, XML, 등등)은 DOM Level 2 Conformance 섹션에서 확인하실 수 있습니다.

Notes
-----

W3C의 DOM Level 1 권고안에는 DOM 모듈을 브라우저에서 지원하는지를 확인하는 방법 중 하나인 `hasFeature` 메소드만 명시되어 있습니다(위 예제와 What does your user agent claim to support? 문서를 확인하세요). 사용이 가능한 경우, 다른 `DOMImplementation` 메소드들이 단일 document 외부의 것들을 컨트롤하기 위한 서비스들을 제공합니다. 예를 들어, `DOMImplementation` 인터페이스는 `createDocumentType` 메소드와 implementation에 의해 관리되는 하나 이상의 document를 위해 생성되는 DTD가 무엇인지를 포함합니다.

Specification
-------------

* DOM Level 2 Core: implementation
* DOM Level 3 Core: implementation
브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Document: cut 이벤트
=================

**`cut`** 이벤트는 사용자가 브라우저의 사용자 인터페이스를 통해 복사했을 때 발생합니다.

|  |  |
| --- | --- |
| 버블링 | 예 |
| 취소 가능 | 예 |
| 인터페이스 | `ClipboardEvent` |
| 이벤트 처리기 속성 | `oncut` (en-US) |

`cut` 이벤트의 원 대상은 복사 동작의 대상인 `Element` (en-US)입니다. `Document`에서 수신할 경우 캡처 또는 버블링 단계의 이벤트를 받게 됩니다. 이벤트에 대한 자세한 정보는 Element: cut 이벤트에서 확인하세요.

예제
--


```js
document.addEventListener("cut", (event) => {
  console.log("잘라내기 동작 실행");
});
```

명세
--

| Specification |
| --- |
| Clipboard API and events # clipboard-event-cut |
| HTML Standard # handler-oncut |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* 관련 이벤트: `copy`, `paste`
* `Element` (en-US)를 대상으로 한 같은 이벤트: `cut`
* `Window`를 대상으로 한 같은 이벤트: `cut`
Document.styleSheetSets
=======================

**지원이 중단되었습니다:** This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.

**비표준:** 이 기능은 비표준이므로 실제 프로덕션에서 사용하지 마세요. 모든 사용자 환경에서 작동하지 않을 수 도 있으며, 미래에 호환성 문제가 생길 수 있습니다.

\*\*`styleSheetSets`\*\*의 읽기 전용 속성은 현재 사용 가능한 모든 스타일 시트 세트의 live 리스트를 반환합니다.

문법
--


```js
var sets = document.styleSheetSets;
```


반환시, `sets`는 사용할 수 있는 스타일 시트 세트의 리스트.

예시
--

ID가 "sheetList"인 `<ul>` (list) 요소가 주어지면, 사용 가능한 모든 스타일 시트 세트의 이름으로 아래와 같은 코드로 채울 수 있습니다.


```js
let list = document.getElementById("sheetList");
let sheets = document.styleSheetSets;

list.innerHTML = "";

for (let i = 0; i < sheets.length; i++) {
  let item = document.createElement("li");

  item.innerHTML = sheets[i];
  list.appendChild(item);
}
```

Notes
-----

사용 가능한 스타일 시트 세트 리스트는 문서에 사용 가능한 모든 스타일 시트를 열거하여 구성되고, `document.styleSheets` 속성에 나열된 순서대로, 리스트에 제목을 가진 각각의 스타일 시트 `title`을 추가합니다. 중복 항목이 리스트에서 삭제됨. (대소문자 구분 비교 사용).

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

더보기
---

* `Stylesheet`
* `document.styleSheets`
* `document.lastStyleSheetSet` (en-US)
* `document.preferredStyleSheetSet` (en-US)
* `document.selectedStyleSheetSet` (en-US)
* `document.enableStyleSheetsForSet()` (en-US)
Document.documentElement
========================

**`Document.documentElement`** 읽기 전용 속성은 문서의 루트 요소를 나타내는 `Element` (en-US)를 반환합니다. HTML 문서를 예로 들면 `<html>` 요소를 반환합니다.

구문
--


```js
const element = document.documentElement;
```

예제
--


```js
const rootElement = document.documentElement;
const firstTier = rootElement.childNodes;
// firstTier is a NodeList of the direct children of the root element
// such as <head> and <body>

for (const child of firstTier) {
  // do something with each direct child of the root element
}
```

참고
--

모든 비어있지 않은 HTML 문서의 `documentElement`는 항상 `<html>` 요소를 가리킵니다. 모든 비어있지 않은 XML 문서의 `documentElement`는 종류불문하고 해당 문서의 루트 요소를 가리킵니다.

명세
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-document-documentelement① |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Document.location
=================

**`Document.location`** 은 `Location` 객체를 반환하는 읽기 전용 속성입니다. `Location`은 document의 URL에 대한 정보를 포함하고 해당 URL을 변경하거나 다른 URL을 로딩하는 메서드를 제공합니다.

`Document.location`은 읽기 전용 `Location` 객체지만, 문자열을 할당할 수도 있습니다. 즉, 대부분의 경우에 `document.location`을 문자열처럼 사용할 수 있습니다. `document.location = 'http://www.example.com'`은 `document.location.href = 'http://www.example.com'`와 동의어입니다. 만약 다른 문자열을 할당한다면 브라우저가 할당된 웹사이트를 로드합니다.

URL을 문자열로 가져오려면 읽기 전용 속성인 `document.URL`도 사용할 수 있습니다.

만약 현재 document가 브라우저 맥락이 아니라면 `null`을 반환합니다.

값
-

`Location` 객체

예제
--


```js
console.log(document.location);
// Location 객체를 console에 출력
```

명세서
---

| Specification |
| --- |
| HTML Standard # the-location-interface |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* 반환 값의 인터페이스 `Location`.
* 비슷한 정보지만 browsing context에 속한 `Window.location` (en-US).
Document: all 속성
================

**지원이 중단되었습니다:** This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.

`Document` 읽기전용 인터페이스인 **`all`** 속성은 문서 노드에 위치한`HTMLAllCollection` (en-US) 반환합니다.

문서순서상의 문서의 모든 요소 `HTMLAllCollection` (en-US)를 리턴하는 `document.all` 대신, 문서순서상의 문서의 모든 요소 `NodeList`를 리턴하는 `Document.querySelectorAll`를 사용 할 수 있습니다:


```js
const allElements = document.querySelectorAll("\*");
```

값
-

`HTMLAllCollection` (en-US)는 문서 내에서 모든 요소를 담고 있다.

명세서
---

| Specification |
| --- |
| HTML Standard # dom-document-all |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Document.open()
===============

**`Document.open()`** 메소드는 문서를 쓰기 (en-US) 위해 문서를 열 수 있도록 제공한다.

이 메소드 호출 시 몇 가지 부작용이 발생한다. 예를 들면,

* 현재까지 등록된 모든 요소와 문서, 문서에 속한 윈도우 소속 이벤트 리스너가 모두 삭제된다.
* 현존했던 모든 요소가 문서에서 삭제된다.
문법
--


```js
document.open();
```

### 인자

없음.

### Return value반환값

`Document` 객체 인스턴스.

예시
--

이 간단한 코드는 문서를 열면서, 원하는 내용을 작성하여 기존 HTML 문서 구조를 대체하고, 문서를 닫는 예제이다.


```js
document.open();
document.write("<p>Hello world!</p>");
document.write("<p>I am a fish</p>");
document.write("<p>The number is 42</p>");
document.close();
```

Notes
-----

`document.open()` 메소드는 페이지를 불러온 후 `document.write()` (en-US) 메소드 호출 시 자동으로 호출된다.

Firefox 및 Internet Explorer 에서는 기존까지 모든 요소 뿐 만 아니라 JavaScript 변수까지 제거했었다. 하지만 현재 그런 경우는 없다.document non-spec'ed parameters to document.open

document.open()의 인자 3개
----------------------

잘 사용하지 않지만, `document.open()` 메소드는 3 개의 인자를 받을 수 있으며, 호출할 경우 `Window.open()` (en-US) 메소드와 동일하게 동작한다(`Window.open()` 메소드 참고).

다음 예제는 Github 웹 사이트를 새 창으로 열게 되며, opener 개체를 `null`로 설정한다.


```js
document.open("https://www.github.com", "", "noopener=true");
```

document.open()의 인자 2개
----------------------

브라우저에서는 2개의 인자를 가진 `document.open()` 또한 가지고 있으며, 아래와 같은 구조를 가진다.


```js
document.open(type, replace);
```


Where `type` 인자는 문서를 작성할 MIME 형식을 정의하며(예: `text/html`), 현재 히스토리를 대체(예: `"replace"`) 하는 새 문서 작성을 시작할 수 있다.

하지만 이런 호출은 더 이상 사용할 수 없으며, 예외 또한 발생하지 않는다.대신 인자가 없는 `document.open()` 메소드가 호출되는 효과를 지니며, 대신 브라우저 히스토리 대체는 그대로 작동한다.

명세서
---

| Specification |
| --- |
| HTML Standard # dom-document-open-dev |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이보기
----

* `Document`
* `Window.open()` (en-US)
Document.designMode
===================

`document.designMode`는 전체 document의 편집 가능 여부를 제어합니다. 유효한 값은 `"on"` 과 `"off"` 입니다. 명세에 따르면, 이 속성은 기본적으로 `"off"`로 설정되어 있습니다. Firefox는 이 표준 명세를 따릅니다. Chrome과 IE의 초기 버전들에서는 `"inherit"` 로 설정되어 있습니다. IE6-10 브라우저에서는, 값이 대문자로 표기됩니다.

Syntax
------


```js
var mode = document.designMode;
document.designMode = "on";
document.designMode = "off";
```

Example
-------

`<iframe>` (en-US)의 document를 편집 가능하게 설정합니다.


```js
iframeNode.contentDocument.designMode = "on";
```

명세서
---

| Specification |
| --- |
| HTML Standard # dom-document-designmode-dev |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* Rich-Text Editing in Mozilla
* `HTMLElement.contentEditable`
* designMode property on MSDN
Document.getElementById()
=========================

**`Document.getElementById()`** 메서드는 주어진 문자열과 일치하는 `id` 속성을 가진 요소를 찾고, 이를 나타내는 `Element` (en-US) 객체를 반환합니다. ID는 문서 내에서 유일해야 하기 때문에 특정 요소를 빠르게 찾을 때 유용합니다.

ID가 없는 요소에 접근하려면 `Document.querySelector()`를 사용하세요. 모든 선택자를 사용할 수 있습니다.

구문
--


```js
document.getElementById(id);
```

### 매개변수

**`id`**

찾으려는 요소 ID. ID는 대소문자를 구분하는 문자열로, 문서 내에서 유일해야 합니다. 즉, 하나의 값은 하나의 요소만 사용할 수 있습니다.

### 반환 값

주어진 ID와 일치하는 DOM 요소를 나타내는 `Element` (en-US) 객체. 문서 내에 주어진 ID가 없으면 `null`.

예제
--

### HTML


```html
<html>
  <head>
    <title>getElementById 예제</title>
  </head>
  <body>
    <p id="para">어떤 글</p>
    <button onclick="changeColor('blue');">blue</button>
    <button onclick="changeColor('red');">red</button>
  </body>
</html>
```

### JavaScript


```js
function changeColor(newColor) {
  var elem = document.getElementById("para");
  elem.style.color = newColor;
}
```

### 결과

용법
--

메서드 이름 중 `"Id"`의 대소문자가 정확해야 합니다. `getElementByID()`가 자연스러워 보일지라도 유효하지 않은 이름이기에 사용할 수 없습니다.

`Document.querySelector()`나 `Document.querySelectorAll()`과는 달리 `getElementById()`는 전역 `document` 객체의 메서드로만 사용할 수 있고, DOM의 다른 객체는 메서드로 가지고 있지 않습니다. ID 값은 문서 전체에서 유일해야 하며 "국지적"인 버전을 쓸 이유가 없기 때문입니다.

### 예제


```html
<!doctype html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <div id="parent-id">
      <p>hello word1</p>
      <p id="test1">hello word2</p>
      <p>hello word3</p>
      <p>hello word4</p>
    </div>
    <script>
 var parentDOM = document.getElementById("parent-id");
 var test1 = parentDOM.getElementById("test1");
 //throw error
 //Uncaught TypeError: parentDOM.getElementById is not a function
 </script>
  </body>
</html>
```


`id`에 맞는 요소가 없을 때 `getElementById()`는 `null`을 반환합니다. 매개변수 `id`가 대소문자를 구분한다는 점을 기억하세요. `document.getElementById("Main")`는 `<div id="main">` 대신 `null`을 반환하는데 "M"과 "m"을 구분하기 때문입니다.

**문서에 없는 요소**는 `getElementById()`가 팀색하지 않습니다. 요소를 동적으로 생성해서 ID를 부여하더라도, `Node.insertBefore()` (en-US)나 비슷한 메서드로 문서 트리에 삽입해야 `getElementById()`로 접근할 수 있습니다.


```js
var element = document.createElement("div");
element.id = "testqq";
var el = document.getElementById("testqq"); // el이 null!
```


**HTML이 아닌 문서**. DOM 구현체는 요소의 어떤 속성이 ID인지 알고 있어야 합니다. 문서의 DTD가 정의하고 있지 않으면, 속성명이 "id"라고 해도 ID 유형인건 아닙니다. XHTML, XUL 등 자주 쓰이는 문서의 경우 `id` 속성을 ID 유형으로 정의하고 있습니다. ID 유형의 속성이 어떤 것인지 모르는 다른 구현의 경우 `null`을 반환합니다.

명세
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-nonelementparentnode-getelementbyid② |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Document`는 문서 안의 요소에 접근할 수 있는 다른 메서드와 속성으로의 참조를 가지고 있습니다.
* `Document.querySelector()`를 사용하면 `'div.myclass'` 처럼 선택자로 요소를 탐색할 수 있습니다.
* xml:id - `getElementById()`가 (Ajax 호출 등으로 받은) XML 문서에서 "xml:id" 속성 값을 사용할 수 있도록 도와주는 메서드를 가지고 있습니다.
Document.defaultView
====================

브라우저의 **`document.defaultView`** 는 문서와 연결된 `window` 객체를 반환합니다. 가능하지 않은 경우 `null`을 대신 반환합니다.

명세
--

| Specification |
| --- |
| HTML Standard # dom-document-defaultview-dev |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
DocumentOrShadowRoot.styleSheets
================================

**실험적:** **이 기능은 실험적인 기능입니다.**  
프로덕션 환경에서 사용하기 전에 브라우저 호환성 표를 주의 깊게 확인하세요.

`DocumentOrShadowRoot` 인터페이스의 **`styleSheets`** 읽기 전용 속성은 문서에서 명시적으로 링크했거나, 안에 포함된 스타일시트에 대한 `CSSStyleSheet` (en-US) 객체의 `StyleSheetList` (en-US)를 반환합니다.

예제
--


```js
function getStyleSheet(unique\_title) {
  for (var i = 0; i < document.styleSheets.length; i++) {
    var sheet = document.styleSheets[i];
    if (sheet.title == unique_title) {
      return sheet;
    }
  }
}
```

### 참고

반환 된 목록은 다음과 같이 정렬됩니다:

* `<link>` 헤더에서 검색된 스타일시트가 먼저 배치되고, 헤더 순서로 정렬됩니다.
* DOM에서 검색된 스타일시트는 tree order로 정렬되어 배치됩니다.
명세
--

| Specification |
| --- |
| CSS Object Model (CSSOM) # dom-documentorshadowroot-stylesheets |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Quirks 모드
=========

웹의 과거 시절에는 일반적으로 두가지 버전으로 페이지가 작성됐습니다. 하나는 Netscape Navigator를 위한것이고 다른 하나는 Microsoft Internet Explorer를 위한 것이었습니다. 웹 표준이 W3C에서 만들어질때 브라우저들은 이를 그대로 사용할 수 없었습니다. 그렇게 되면 웹의 대부분의 기존 사이트가 동작하지 않기 때문이었습니다. 따라서 브라우저들은 새로운 표준을 준수하는 사이트와 이전 레거시 사이트를 다르게 처리하기 위해 두 가지 모드를 도입했습니다.

현재 웹 브라우저의 레이아웃 엔진에서 사용하는 모드는 세 가지입니다. quirks모드, limited-quirks모드 그리고 no-quirks모드 입니다. **quirks 모드**에서 레이아웃은 Navigator 4와 Internet Explorer5의 동작을 모방합니다. 이것은 웹 표준이 널리 채택되기 전에 구축된 웹 사이트를 지원하기 위해 필수적입니다. **no-quirks모드** 에서는(바라건대) 현대 HTML 및 CSS명세에서 설명한대로 동작합니다. **limited-quirks 모드**에서는 일부 quirks만 구현됩니다.

limited-quirks 및 no-quirks 모드는 이전에 각각 "almost-standards" 모드와 "full standards" 모드로 불렸습니다. 이러한 이름은 이제 동작이 표준화되었기 때문에 변경되었습니다.

브라우저는 어떤 모드를 사용할지 어떻게 결정할까?
---------------------------

HTML문서의 경우 브라우저는 문서 시작 부분에 DOCTYPE을 사용하여 문서를 quirks 모드에서 처리할지 표준 모드에서 처리할지 결정합니다. 페이지가 전체 표준 모드를 사용하도록 하려면 페이지에 아래 예시와 같은 DOCTYPE이 있는지 확인하세요.


```html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Hello World!</title>
  </head>
  <body></body>
</html>
```


예제에 표시된 `<!DOCTYPE html>`이 가장 단순하며 현재 HTML 표준에서 권장하는 DOCTYPE입니다. 이전 버전의 HTML 표준에서는 다른 변형을 권장했지만 현재 모든 기존 브라우저는 이 DOCTYPE에 대한 전체 표준모드를 사용하며 심지어 오래된 Internet Explorer 6도 마찬가지 입니다. 더 복잡한 DOCTYPE을 사용해야 할 타당한 이유는 없습니다. 다른 DOCTYPE을 사용하는 경우 limited-quirks모드 또는 quirks 모드를 트리거 하는것을 선택할 위험이 있습니다.

HTML문서의 시작 부분에 DOCTYPE을 넣어야 합니다. 주석이나 XML 선언과 같이 DOCTYPE 앞에 무엇이든 있으면 Internet Expolorer 9 이상에서는 quirks모드가 트리거 됩니다.

의 유일한 목적은 no-quirks 모드를 활성화하는 것입니다. 이전 버전의 HTML 표준 DOCTYPE은 추가적인 의미를 제공했지만, 어떤 브라우저도 렌더링 모드 전환 이외의 다른 용도로 DOCTYPE을 사용한 적이 없습니다.
브라우저가 다양한 모드를 선택하는 시기에 대한 자세한 설명도 참조하세요.

### XHTML

`Content-Type` HTTP 헤더에 `application/xhtml+xml` MIME 타입으로 설정함으로써 XHTML로 제공 하는 경우 해당 문서는 항상 no-quirks 모드로 렌더링되기 때문에 DOCTYPE이 필요하지 않습니다. 단 인터넷 익스플로러는 9부터 XHTML을 지원하기 때문에 인터넷 익스플로러 8의 경우 `application/xhtml+xml`로 기술된 페이지를 표시하지 않고 알 수 없는 형식으로 판단해 다운로드 대화상자가 표시될 수 있다는 점에 유의하세요.

XHTML 같은(XHTML-like) 콘텐트를 `text/html` MIME 타입으로 제공한다면 웹 브라우저는 이를 HTML로 인식하므로, 표준 모드로 렌더링하려면 DOCTYPE을 기술해야 한다.

어떤 모드가 사용되었는지 확인하려면 어떻게 해야 하나요?
-------------------------------

페이지가 quirks 또는 limited-quirks 모드에서 랜더링 되는 경우 Firefox는 개발자 도구의 콘솔탭에 경고를 기록합니다. 이 경고가 표시되지 않으면 Firefox가 no-quirk 모드를 사용하고 있는것입니다.

자바스크립트에서 `document.compatMode`의 값은 문서가 quirks 모드에 있는지 여부를 표시합니다. 값이 `"BackCompat"`이면 문서가 quirks 모드라는 것이고 그렇지 않으면 `"CSS1Compat"` 값을 가집니다.
HTML 참고서
========

HTML 참고서는 HTML의 모든 **요소**와 **특성**의 설명을 담고 있습니다.

HTML 요소 참고서

태그를 사용해 생성할 수 있는 HTML 요소를 나열하는 문서입니다.

HTML 특성 참고서

HTML의 요소는 특성을 갖습니다. 특성은 요소의 다양한 설정이나 행동을 사용자가 원하는 방식대로 바꿀 수 있는 값입니다.

전역 특성

전역 특성은 모든 HTML에서 공통으로 사용할 수 있는 특성입니다. 일부 요소에는 아무런 효과도 없을 수 있습니다.

콘텐츠 카테고리

HTML 요소는 하나 이상의 콘텐츠 카테고리에 속할 수 있습니다. 콘텐츠 카테고리는 같은 성질을 가진 요소를 묶습니다.

HTML에서 사용하는 날짜와 시간 형식 (en-US)

특정 HTML 요소는 날짜와 시간을 값이나 특성의 값으로 가질 수 있습니다. `<input>` (en-US) 요소의 날짜 및 시간 형태는 물론 `<ins>`와 `<del>` 요소도 이에 해당합니다.
data-\*
=======

**`data-*`** 전역 특성은 **사용자 지정 데이터 특성**(custom data attributes)이라는 특성 클래스를 형성함으로써 임의의 데이터를 스크립트로 HTML과 DOM 사이에서 교환할 수 있는 방법입니다.

시도해보기
-----

모든 사용자 지정 데이터는 해당 데이터를 지정한 요소의 `HTMLElement` 인터페이스, `dataset` (en-US) 속성을 통해 사용할 수 있습니다. `data-*`의 `*`은 XML 이름 생성 규칙을 따르는 모든 이름으로 대체할 수 있습니다.

* 대소문자 여부에 상관없이 `xml`로 시작하면 안 됩니다.
* 세미콜론(`U+003A`)을 포함해서는 안 됩니다.
* 대문자를 포함해서는 안 됩니다.

`HTMLElement.dataset` (en-US)은 `DOMStringMap` (en-US)이라는 점을 참고하세요. 사용할 땐, 예를 들어 `data-test-value`라는 이름의 특성을 지정했다면, 모든 대시(`U+002D`)는 다음 문자를 대문자로 만들고 자신은 사라지므로 `HTMLElement.dataset.testValue`로 접근할 수 있습니다.

### 용도

`data-*` 속성을 추가함으로써, 평범한 HTML 요소조차 복잡하고 강력한 프로그램 객체가 될 수 있습니다. 예컨대, 게임의 우주선 스프라이트는 단순한 `<img>` 태그와 `class` 특성, 그리고 여러 `data-*` 특성으로 나타낼 수 있습니다.


```html
<img
 class="spaceship cruiserX3"
 src="shipX3.png"
 data-ship-id="324"
 data-weapons="laserI laserII"
 data-shields="72%"
 data-x="414354"
 data-y="85160"
 data-z="31940"
 onclick="spaceships[this.dataset.shipId].blasted()" />
```


HTML 데이터 특성 사용법에 관한 보다 자세한 자습서는 데이터 특성 사용하기를 확인하세요.

명세
--

| Specification |
| --- |
| HTML Standard # attr-data-\* |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* 모든 전역 특성.
* 데이터 특성 값에 접근하고 수정할 수 있는 `HTMLElement.dataset` (en-US) 속성.
* 데이터 특성 사용하기