1. ์ธํ๋ผ์คํธ๋ญ์ฒ
์ด ๋ช ์ธ๋ Infra Standard์ ์์กดํฉ๋๋ค. [INFRA]
์ด ๋ช ์ธ์์ ์ฌ์ฉ๋๋ ์ฉ์ด ์ค ์ผ๋ถ๋ ์ธ์ฝ๋ฉ, ์ ํ์, Trusted Types, Web IDL, XML, XML์ ๋ค์์คํ์ด์ค, ๊ทธ๋ฆฌ๊ณ XML ๋ฌธ์์ ์คํ์ผ์ํธ ์ฐ๊ฒฐ์ ์ ์๋์ด ์๋ค. [ENCODING] [SELECTORS4] [TRUSTED-TYPES] [WEBIDL] [XML] [XML-NAMES] [XML-STYLESHEET]
ํ์ฅ์ด ํ์ํ ๋ DOM ํ์ค์ ๊ทธ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธํ ์ ์์ผ๋ฉฐ, ๋๋ ์๋ก์ด ํ์ค์ ์์ฑํ์ฌ ์ ์ฉ ๊ฐ๋ฅํ ๋ช ์ธ์ ๋ํ ์ ๊ณต๋ ํ์ฅ์ฑ ํ ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
1.1. ํธ๋ฆฌ
ํธ๋ฆฌ๋ ์ ํํ ๊ณ์ธต ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋๋ค. ํธ๋ฆฌ ์์๋ ํธ๋ฆฌ์ ์ ์, ๊น์ด ์ฐ์ ํ์ ๋ฐฉ์์ ๋๋ค.
ํธ๋ฆฌ์ ์ฐธ์ฌํ๋ ๊ฐ์ฒด๋ ํธ๋ฆฌ ๋ด์์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ null์ด๊ฑฐ๋ ๊ฐ์ฒด์ ๋๋ค. ๋ํ ์์์ ๊ฐ์ง๋๋ฐ, ์ด๋ ๊ฐ์ฒด๋ค์ ์์๊ฐ ์๋ ์งํฉ์ ๋๋ค. ๊ฐ์ฒด A์ ๋ถ๋ชจ๊ฐ ๊ฐ์ฒด B๋ผ๋ฉด, A๋ B์ ์์์ ๋๋ค.
๊ฐ์ฒด์ ๋ฃจํธ๋ ๋ถ๋ชจ๊ฐ null์ด๋ฉด ์๊ธฐ ์์ ์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ถ๋ชจ์ ๋ฃจํธ์ ๋๋ค. ํธ๋ฆฌ์ ๋ฃจํธ๋ ํด๋น ํธ๋ฆฌ์ ์ฐธ์ฌํ๋ ๊ฐ์ฒด ์ค ๋ถ๋ชจ๊ฐ null์ธ ๊ฐ์ฒด์ ๋๋ค.
๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B์ ํ์์ด๋ผ๊ณ ๋ถ๋ฅด๋ ค๋ฉด, A๊ฐ B์ ์์์ด๊ฑฐ๋, C์ ์์์ด๋ฉด์ C๊ฐ B์ ํ์์ธ ๊ฒฝ์ฐ์ ๋๋ค.
ํฌํจ ํ์์ ๊ฐ์ฒด ์์ ๋๋ ๊ทธ์ ํ์ ์ค ํ๋์ ๋๋ค.
๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B์ ์กฐ์์ด๋ผ๊ณ ๋ถ๋ฅด๋ ค๋ฉด, B๊ฐ A์ ํ์์ธ ๊ฒฝ์ฐ์๋ง ํด๋นํฉ๋๋ค.
ํฌํจ ์กฐ์์ ๊ฐ์ฒด ์์ ๋๋ ๊ทธ์ ์กฐ์ ์ค ํ๋์ ๋๋ค.
๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B์ ํ์ ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ค๋ฉด, B์ A๊ฐ ๋์ผํ null์ด ์๋ ๋ถ๋ชจ๋ฅผ ๊ณต์ ํด์ผ ํฉ๋๋ค.
ํฌํจ ํ์ ๋ ๊ฐ์ฒด ์์ ๋๋ ๊ทธ์ ํ์ ์ค ํ๋์ ๋๋ค.
๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B๋ณด๋ค ์์ ๊ฐ์ฒด๋ผ๊ณ ํ๋ ค๋ฉด, A์ B๊ฐ ๋์ผํ ํธ๋ฆฌ์ ์๊ณ , A๊ฐ B๋ณด๋ค ํธ๋ฆฌ ์์์ ๋จผ์ ๋์์ผ ํฉ๋๋ค.
๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B์ ๋ค์ ๊ฐ์ฒด๋ผ๊ณ ํ๋ ค๋ฉด, A์ B๊ฐ ๋์ผํ ํธ๋ฆฌ์ ์๊ณ , A๊ฐ B๋ณด๋ค ํธ๋ฆฌ ์์์ ๋์ค์ ๋์์ผ ํฉ๋๋ค.
๊ฐ์ฒด์ ์ฒซ ๋ฒ์งธ ์์์ ์ฒซ ๋ฒ์งธ ์์์ด๊ฑฐ๋ ์์์ด ์์ผ๋ฉด null์ ๋๋ค.
๊ฐ์ฒด์ ๋ง์ง๋ง ์์์ ๋ง์ง๋ง ์์์ด๊ฑฐ๋ ์์์ด ์์ผ๋ฉด null์ ๋๋ค.
๊ฐ์ฒด์ ์ด์ ํ์ ๋ ์ฒซ ๋ฒ์งธ ์์ ํ์ ์ด๊ฑฐ๋, ์์ ํ์ ๊ฐ ์์ผ๋ฉด null์ ๋๋ค.
๊ฐ์ฒด์ ๋ค์ ํ์ ๋ ์ฒซ ๋ฒ์งธ ๋ค์ ํ์ ์ด๊ฑฐ๋, ๋ค์ ํ์ ๊ฐ ์์ผ๋ฉด null์ ๋๋ค.
๊ฐ์ฒด์ ์ธ๋ฑ์ค๋ ๊ทธ ๊ฐ์ฒด์ ์์ ํ์ ์ ๊ฐ์์ด๋ฉฐ, ์์ผ๋ฉด 0์ ๋๋ค.
1.2. ์์๊ฐ ์๋ ์งํฉ
์์๊ฐ ์๋ ์งํฉ ํ์๋ ๋ฌธ์์ด input์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ค์ ์ํํฉ๋๋ค:
-
inputTokens๋ฅผ ASCII ๊ณต๋ฐฑ ๋ฌธ์๋ก input์ ๋ถํ ํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
tokens๋ฅผ ์๋ก์ด ์์๊ฐ ์๋ ์งํฉ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
inputTokens์ ๊ฐ token์ ๋ํด: token์ tokens์ ์ถ๊ฐํฉ๋๋ค.
- tokens๋ฅผ ๋ฐํํฉ๋๋ค.
์์๊ฐ ์๋ ์งํฉ ์ง๋ ฌํ๊ธฐ๋ set์ ๋ฐ์ U+0020 ๊ณต๋ฐฑ ๋ฌธ์๋ก set์ ์ด์ด๋ถ์ฌ ๋ฐํํฉ๋๋ค.
1.3. ์ ๋ ํฐ
์ ๋ ํฐ ๋ฌธ์์ด ๋ฒ์ ์ผ์น ์์ ์ ๋ฌธ์์ด selectors๋ฅผ ๋ ธ๋ node์ ๋ํด ์ํํ๋ค:
-
selector๋ฅผ ์ ๋ ํฐ ํ์ฑ selectors์ ๊ฒฐ๊ณผ๋ก ํ๋ค. [SELECTORS4]
-
๋ง์ฝ selector๊ฐ ์คํจ๋ผ๋ฉด, throw "
SyntaxError"DOMException์ ๋์ง๋ค. -
์ ๋ ํฐ ํธ๋ฆฌ ๋งค์นญ์ selector์ node์ ๋ฃจํธ๋ฅผ ์ค์ฝํ ๋ฃจํธ node์ ํจ๊ป ์ฌ์ฉํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. [SELECTORS4].
์ ๋ ํฐ ๋ด ๋ค์์คํ์ด์ค ์ง์์ ๊ณํ๋์ด ์์ง ์์ผ๋ฉฐ ์ถ๊ฐ๋์ง ์์ ์์ ์ ๋๋ค.
1.4. ์ด๋ฆ ๊ฒ์ฆ
๋ฌธ์์ด์ด ์ ํจํ ๋ค์์คํ์ด์ค ์ ๋์ฌ์ด๋ ค๋ฉด, ํด๋น ๊ธธ์ด๊ฐ ์ต์ 1 ์ด์์ด์ด์ผ ํ๋ฉฐ, ASCII ๊ณต๋ฐฑ, U+0000 NULL, U+002F (/), U+003E (>)๋ฅผ ํฌํจํ์ง ์์์ผ ํฉ๋๋ค.
๋ฌธ์์ด์ด ์ ํจํ ์์ฑ ๋ก์ปฌ ์ด๋ฆ์ด๋ ค๋ฉด, ํด๋น ๊ธธ์ด๊ฐ ์ต์ 1 ์ด์์ด์ด์ผ ํ๋ฉฐ, ASCII ๊ณต๋ฐฑ, U+0000 NULL, U+002F (/), U+003D (=), U+003E (>)๋ฅผ ํฌํจํ์ง ์์์ผ ํฉ๋๋ค.
๋ฌธ์์ด name์ด ์ ํจํ ์์ ๋ก์ปฌ ์ด๋ฆ์ด๋ ค๋ฉด, ๋ค์ ๋จ๊ณ๋ค์ด true๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค:
-
๋ง์ฝ name์ ๊ธธ์ด๊ฐ 0์ด๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
-
๋ง์ฝ name์ 0๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๊ฐ ASCII ์ํ๋ฒณ์ธ ๊ฒฝ์ฐ:
-
๋ง์ฝ name์ด ASCII ๊ณต๋ฐฑ, U+0000 NULL, U+002F (/), U+003E (>)๋ฅผ ํฌํจํ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
๋ง์ฝ name์ 0๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๊ฐ U+003A (:), U+005F (_), ๋๋ U+0080~U+10FFFF ๋ฒ์์ ์๋ค๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
-
๋ง์ฝ name์ ๊ทธ ์ดํ ์ฝ๋ ํฌ์ธํธ๋ค์ด ASCII ์ํ๋ฒณ, ASCII ์ซ์, U+002D (-), U+002E (.), U+003A (:), U+005F (_), ๋๋ U+0080~U+10FFFF ๋ฒ์์ ์์ง ์๋ค๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ๊ฐ๋ ์ DOM API๋ก ์์ ๋ก์ปฌ ์ด๋ฆ์ ์์ฑํ ๋ ๊ฒ์ฆ์ ์ฌ์ฉ๋ฉ๋๋ค. HTML ํ์๋ก ์์ฑํ ์ ์๋ ๋ชจ๋ ์ด๋ฆ(์ฒซ ๋ฒ์งธ ์ฝ๋ ํฌ์ธํธ๊ฐ ASCII ์ํ๋ฒณ์ธ ๊ฒฝ์ฐ)๊ณผ ์ถ๊ฐ์ ์ธ ๊ฐ๋ฅ์ฑ์ ํ์ฉํ๋ ค๋ ์๋์ ๋๋ค. ์ถ๊ฐ์ ์ธ ๊ฐ๋ฅ์ฑ์ ๊ฒฝ์ฐ, ASCII ๋ฒ์๋ ์ญ์ฌ์ ์ด์ ๋ก ์ ํ๋์ง๋ง, ASCII๋ฅผ ๋์ด์๋ ๊ฒ์ ๋ชจ๋ ํ์ฉ๋ฉ๋๋ค.
๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ํธํ ์ ๊ท์์ ์ ํจํ ์์ ๋ก์ปฌ ์ด๋ฆ์ ๊ตฌํ์ ๋๋ค:
/^(?:[A-Za-z][^\0\t\n\f\r\u0020/>]*|[:_\u0080-\u{10FFFF}][A-Za-z0-9-.:_\u0080-\u{10FFFF}]*)$/u
๋ฌธ์์ด์ ์ ํจํ doctype ์ด๋ฆ์ ๋๋ค ๋ง์ฝ ASCII ๊ณต๋ฐฑ, U+0000 NULL, ๋๋ U+003E (>)๋ฅผ ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ์ ๋๋ค.
๋น ๋ฌธ์์ด๋ ์ ํจํ doctype ์ด๋ฆ์ ๋๋ค.
์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ถ์ถ์ ์ํด namespace์ qualifiedName์ context์ ํจ๊ป ์ํํฉ๋๋ค:
-
namespace๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
prefix๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
localName์ qualifiedName์ผ๋ก ์ค์ ํฉ๋๋ค.
-
qualifiedName์ U+003A (:)๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด:
-
prefix๋ฅผ qualifiedName์์ ์ฒซ ๋ฒ์งธ U+003A (:) ์๋ถ๋ถ์ผ๋ก ์ค์ ํ๋ค.
-
localName๋ฅผ qualifiedName์์ ์ฒซ ๋ฒ์งธ U+003A (:) ๋ท๋ถ๋ถ์ผ๋ก ์ค์ ํ๋ค.
-
prefix๊ฐ ์ ํจํ ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ ์๋๋ฉด ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค. "
InvalidCharacterError"DOMException.
-
-
Assert: prefix๋ null์ด๊ฑฐ๋ ์ ํจํ ๋ค์์คํ์ด์ค ์ ๋์ฌ์ ๋๋ค.
-
context๊ฐ "
attribute"์ด๊ณ localName์ด ์ ํจํ ์์ฑ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, "InvalidCharacterError"DOMException์ throwํฉ๋๋ค. -
context๊ฐ "
element"์ด๊ณ localName์ด ์ ํจํ ์์ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, "InvalidCharacterError"DOMException์ throwํฉ๋๋ค. -
prefix๊ฐ null์ด ์๋๊ณ namespace๊ฐ null์ด๋ฉด, "
NamespaceError"DOMException์ throwํฉ๋๋ค. -
prefix๊ฐ "
xml"์ด๊ณ namespace๊ฐ XML ๋ค์์คํ์ด์ค๊ฐ ์๋๋ฉด, "NamespaceError"DOMException์ throwํฉ๋๋ค. -
qualifiedName ๋๋ prefix๊ฐ "
xmlns"์ด๊ณ namespace๊ฐ XMLNS ๋ค์์คํ์ด์ค๊ฐ ์๋๋ฉด, "NamespaceError"DOMException์ throwํฉ๋๋ค. -
namespace๊ฐ XMLNS ๋ค์์คํ์ด์ค์ด๊ณ qualifiedName๊ณผ prefix ๋ชจ๋ "
xmlns"๊ฐ ์๋๋ฉด, "NamespaceError"DOMException์ throwํฉ๋๋ค. -
(namespace, prefix, localName)์ ๋ฐํํฉ๋๋ค.
์ด ๋ช ์ธ์ ๋ค์ํ API๋ค์ ์ด์ ์๋ ๋ค์์คํ์ด์ค ์ ๋์ด, ์์ฑ ๋ก์ปฌ ์ด๋ฆ, ์์ ๋ก์ปฌ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ doctype ์ด๋ฆ์ ๋ ์๊ฒฉํ๊ฒ ๊ฒ์ฆํ์ต๋๋ค. ์ด๋ ๋ค์ํ XML ๊ด๋ จ ๋ช ์ธ์ ์ผ์นํ๋ ๋ฐฉ์์ด์์ต๋๋ค. (ํ์ง๋ง ๋ชจ๋ ๊ท์น์ด ์ ์ฉ๋ ๊ฒ์ ์๋์์ต๋๋ค.)
์น ๊ฐ๋ฐ์๋ค์๊ฒ ๋ถํธํ๊ฒ ์ฌ๊ฒจ์ก์ผ๋ฉฐ, ํนํ HTML ํ์๋ก ์์ฑํ ์ ์์ง๋ง DOM API๋ก๋ ์์ฑํ ์ ์๋ ์ด๋ฆ์ด ์กด์ฌํ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋์ ์์์ ์ค๋ช ํ ์์ค์ผ๋ก ๊ฒ์ฆ์ด ์ํ๋์์ต๋๋ค.
2. ์ด๋ฒคํธ
2.1. "DOM ์ด๋ฒคํธ" ์๊ฐ
์น ํ๋ซํผ ์ ๋ฐ์์ ์ด๋ฒคํธ๋ ๊ฐ์ฒด์ ๋์คํจ์น๋์ด ๋คํธ์ํฌ
ํ๋์ด๋ ์ฌ์ฉ์ ์ํธ์์ฉ๊ณผ ๊ฐ์
๋ฐ์์ ์๋ฆฝ๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ค์
EventTarget
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉฐ, ๋ฐ๋ผ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํด ์ด๋ฒคํธ๋ฅผ ๊ด์ฐฐํ ์ ์์ต๋๋ค. addEventListener()๋ฅผ
ํธ์ถํฉ๋๋ค:
obj. addEventListener( "load" , imgFetched) function imgFetched( ev) { // great success โฆ}
์ด๋ฒคํธ
๋ฆฌ์ค๋๋
removeEventListener()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด, ๋์ผํ ์ธ์๋ฅผ ์ ๋ฌํ์ฌ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๋๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ
AbortSignal
์ addEventListener()์
์ ๋ฌํ๊ณ , ์๊ทธ๋์ ์์ ํ ์ปจํธ๋กค๋ฌ์์ abort()๋ฅผ
ํธ์ถํ์ฌ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค.
์ด๋ฒคํธ๋ ๊ฐ์ฒด์ด๋ฉฐ,
Event ์ธํฐํ์ด์ค(๋๋ ํ์
์ธํฐํ์ด์ค)๋ฅผ ๊ตฌํํฉ๋๋ค. ์ ์์์์
ev๋ ์ด๋ฒคํธ์
๋๋ค.
ev๋
์ด๋ฒคํธ
๋ฆฌ์ค๋์ ์ฝ๋ฐฑ
(์ผ๋ฐ์ ์ผ๋ก ์์ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ํจ์)๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ด๋ฒคํธ
๋ฆฌ์ค๋๋
์ด๋ฒคํธ์
type
์์ฑ ๊ฐ
("load" ์ ์์)๋ก ๋์ํฉ๋๋ค.
์ด๋ฒคํธ์
target
์์ฑ ๊ฐ์
์ด๋ฒคํธ๊ฐ ๋์คํจ์น๋ ๊ฐ์ฒด(obj ์ ์์)๋ฅผ
๋ฐํํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด๋ฒคํธ๋ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ์ฌ์ฉ์ ์ํธ์์ฉ ๋๋ ์์ ์๋ฃ์ ๊ฒฐ๊ณผ๋ก ๋์คํจ์นํ์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ๋ ํํ ํฉ์ฑ ์ด๋ฒคํธ(synthetic events)๋ผ ๋ถ๋ฆฌ๋ ์ด๋ฒคํธ ๋์คํจ์น๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค:
// ์ ์ ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ obj. addEventListener( "cat" , function ( e) { process( e. detail) }) // ์ด๋ฒคํธ ์์ฑ ๋ฐ ๋์คํจ์น var event= new CustomEvent( "cat" , { "detail" : { "hazcheeseburger" : true }}) obj. dispatchEvent( event)
์ ํธ ์ ๋ฌ ์ธ์๋ ์ด๋ฒคํธ๋
๋๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ด ์์
์ ๋ค์ ๋จ๊ณ๋ฅผ ์ ์ดํ๋๋ก ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํผ ์ ์ถ ๊ณผ์ ์์
type
์์ฑ ๊ฐ์ด
"submit"์ธ ์ด๋ฒคํธ๊ฐ
๋์คํจ์น๋ฉ๋๋ค.
๋ง์ฝ ์ด ์ด๋ฒคํธ์
preventDefault()
๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด, ํผ ์ ์ถ์ด ์ค๋จ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ด ํฉ์ฑ ์ด๋ฒคํธ(๋์คํจ์น๋ ์ด๋ฒคํธ)๋ฅผ ํตํด ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด
dispatchEvent()
๋ฉ์๋์ ๋ฐํ๊ฐ์ ํ์ฉํ ์ ์์ต๋๋ค:
if ( obj. dispatchEvent( event)) { // ์ด๋ฒคํธ๊ฐ ์ทจ์๋์ง ์์์ผ๋, ์ด์ ๋ญ๊ฐ ๋ง๋ฒ์ ์คํํ ์ฐจ๋ก โฆ}
์ด๋ฒคํธ๊ฐ ๋์คํจ์น
๋ ๋,
ํธ๋ฆฌ ์ ์ฐธ์ฌ ํ๋ ๊ฐ์ฒด(์: ์์)์
๋๋ฌํ๋ฉด
๊ทธ ๊ฐ์ฒด์ ์กฐ์์ ๋ฑ๋ก๋
์ด๋ฒคํธ ๋ฆฌ์ค๋์๋
๋๋ฌํ ์ ์์ต๋๋ค.
์ฆ, ํด๋น ๊ฐ์ฒด์ ํฌํจ ์กฐ์์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ค
capture๊ฐ
true์ธ ๋ฆฌ์ค๋๊ฐ ํธ๋ฆฌ ์์๋๋ก
ํธ์ถ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ
์ด๋ฒคํธ์ bubbles
๊ฐ true์ด๋ฉด, ํด๋น ๊ฐ์ฒด์ ํฌํจ ์กฐ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ค capture๊ฐ
false์ธ ๋ฆฌ์ค๋๊ฐ
์ด์ ์ญ์ ํธ๋ฆฌ ์์๋๋ก ํธ์ถ๋ฉ๋๋ค.
์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ฅผ ์ดํด๋ด ์๋ค:
<!doctype html> < html > < head > < title > Boring example</ title > </ head > < body > < p > Hello< span id = x > world</ span > !</ p > < script > function test( e) { debug( e. target, e. currentTarget, e. eventPhase) } document. addEventListener( "hey" , test, { capture: true }) document. body. addEventListener( "hey" , test) var ev= new Event( "hey" , { bubbles: true }) document. getElementById( "x" ). dispatchEvent( ev) </ script > </ body > </ html >
debug ํจ์๋ ๋ ๋ฒ ํธ์ถ๋ฉ๋๋ค. ๋ ๋ฒ ๋ชจ๋ ์ด๋ฒคํธ์
target
์์ฑ ๊ฐ์ span ์์์
๋๋ค. ์ฒซ ๋ฒ์งธ๋
currentTarget
์์ฑ ๊ฐ์ด document์ด๊ณ , ๋ ๋ฒ์งธ๋
body ์์์
๋๋ค.
eventPhase
์์ฑ ๊ฐ์
CAPTURING_PHASE
์์ BUBBLING_PHASE๋ก
์ ํ๋ฉ๋๋ค.
๋ง์ฝ span ์์์
์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ
๋ฑ๋ก๋์ด ์์๋ค๋ฉด,
eventPhase
์์ฑ ๊ฐ์ AT_TARGET์ด์์
๊ฒ์
๋๋ค.
2.2. ์ธํฐํ์ด์ค Event
[Exposed=*]interface {Event (constructor DOMString ,type optional EventInit = {});eventInitDict readonly attribute DOMString type ;readonly attribute EventTarget ?target ;readonly attribute EventTarget ?srcElement ; // legacyreadonly attribute EventTarget ?currentTarget ;sequence <EventTarget >composedPath ();const unsigned short NONE = 0;const unsigned short CAPTURING_PHASE = 1;const unsigned short AT_TARGET = 2;const unsigned short BUBBLING_PHASE = 3;readonly attribute unsigned short eventPhase ;undefined stopPropagation ();attribute boolean cancelBubble ; // legacy alias of .stopPropagation()undefined stopImmediatePropagation ();readonly attribute boolean bubbles ;readonly attribute boolean cancelable ;attribute boolean returnValue ; // legacyundefined preventDefault ();readonly attribute boolean defaultPrevented ;readonly attribute boolean composed ; [LegacyUnforgeable ]readonly attribute boolean isTrusted ;readonly attribute DOMHighResTimeStamp timeStamp ;undefined initEvent (DOMString ,type optional boolean =bubbles false ,optional boolean =cancelable false ); // legacy };dictionary {EventInit boolean =bubbles false ;boolean =cancelable false ;boolean =composed false ; };
Event ๊ฐ์ฒด๋ ๊ฐ๋จํ ์ด๋ฒคํธ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ด๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ์์
์๋ฆด ์ ์๋๋ก ํด์ค๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ฏธ์ง ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋์์์ ์ ํธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ ์ฌ์ ์ด๋ฒคํธ ํ๊ฒ์ null
๋๋ EventTarget
๊ฐ์ฒด์
๋๋ค.
์ด๋ฒคํธ๋ ์ฐ๊ด๋ ํ๊ฒ(์ ์ฌ์ ์ด๋ฒคํธ ํ๊ฒ)์ ๊ฐ์ง๋๋ค. ๋ณ๋์ ์ธ๊ธ์ด ์์ผ๋ฉด null์ ๋๋ค.
์ด๋ฒคํธ๋ ์ฐ๊ด๋ relatedTarget(์ ์ฌ์ ์ด๋ฒคํธ ํ๊ฒ)์ ๊ฐ์ง๋๋ค. ๋ณ๋์ ์ธ๊ธ์ด ์์ผ๋ฉด null์ ๋๋ค.
๋ค๋ฅธ ๋ช
์ธ๋ค์์๋ relatedTarget์ ์ ์ํ๊ธฐ ์ํด relatedTarget ์์ฑ์ ์ฌ์ฉํฉ๋๋ค. [UIEVENTS]
์ด๋ฒคํธ๋ ์ฐ๊ด๋ ํฐ์น ํ๊ฒ ๋ฆฌ์คํธ(0๊ฐ ์ด์์ ์ ์ฌ์ ์ด๋ฒคํธ ํ๊ฒ์ ๋ฆฌ์คํธ)๋ฅผ ๊ฐ์ง๋๋ค. ๋ณ๋์ ์ธ๊ธ์ด ์์ผ๋ฉด ๋น ๋ฆฌ์คํธ์ ๋๋ค.
ํฐ์น ํ๊ฒ ๋ฆฌ์คํธ๋ TouchEvent
์ธํฐํ์ด์ค์ ๊ด๋ จ ์ธํฐํ์ด์ค ์ ์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. [TOUCH-EVENTS]
์ด๋ฒคํธ์๋ ์ฐ๊ด๋
๊ฒฝ๋ก๊ฐ ์๋ค.
๊ฒฝ๋ก๋ ๋ชฉ๋ก์ด๋ฉฐ, ์ด๋ฒคํธ ๊ฒฝ๋ก ํญ๋ชฉ๋ค๋ก ์ด๋ฃจ์ด์ง๋ค. ์ด๋ฒคํธ ๊ฒฝ๋ก ํญ๋ชฉ์ ๊ตฌ์กฐ์ฒด๋ก,
ํธ์ถ ๋์
(EventTarget
๊ฐ์ฒด),
์๋ ํธ๋ฆฌ ์์ ํธ์ถ ๋์ ์ฌ๋ถ
(๋ถ๋ฆฌ์ธ),
์๋ ์กฐ์ ๋์ (
์ ์ฌ์ ์ด๋ฒคํธ
๋์),
relatedTarget (
์ ์ฌ์ ์ด๋ฒคํธ
๋์),
ํฐ์น ๋์ ๋ชฉ๋ก (
๋ชฉ๋ก์ด๋ฉฐ ์ ์ฌ์ ์ด๋ฒคํธ
๋์๋ค๋ก ์ด๋ฃจ์ด์ง),
๋ซํ ํธ๋ฆฌ์ ๋ฃจํธ ์ฌ๋ถ (๋ถ๋ฆฌ์ธ),
๊ทธ๋ฆฌ๊ณ ๋ซํ ํธ๋ฆฌ ์์ ์ฌ๋กฏ ์ฌ๋ถ (
๋ถ๋ฆฌ์ธ)์ผ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฒฝ๋ก๋ ์ฒ์์
๋น ๋ชฉ๋ก์ด๋ค.
event = new Event(type [, eventInitDict])- ์๋ก์ด event๋ฅผ ๋ฐํํ๋ฉฐ,
type์์ฑ ๊ฐ์ด type์ผ๋ก ์ค์ ๋ฉ๋๋ค. eventInitDict ์ธ์๋ฅผ ํตํดbubbles์cancelable์์ฑ์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ฒด ๋ฉค๋ฒ๋ก ์ค์ ํ ์ ์์ต๋๋ค. event .type- event์ ํ์
์ ๋ฐํํฉ๋๋ค. ์: "
click", "hashchange", "submit" ๋ฑ. event .target- event๊ฐ ๋์คํจ์น๋ ๊ฐ์ฒด(์ฆ, ํ๊ฒ)๋ฅผ ๋ฐํํฉ๋๋ค.
event .currentTarget- ํ์ฌ ์คํ ์ค์ธ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑ์ด ํธ์ถ๋๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
event .composedPath()- event์ ํธ์ถ ํ๊ฒ ๊ฐ์ฒด๋ฅผ ๊ฒฝ๋ก์์ ๋ฐํํฉ๋๋ค(๋ฆฌ์ค๋๊ฐ ํธ์ถ๋ ๊ฐ์ฒด๋ค). ๋จ, ์๋์ฐ ํธ๋ฆฌ์ ์ํ ๋
ธ๋ ์ค ์๋์ฐ ๋ฃจํธ์ mode๊ฐ "
closed"์ด๊ณ event์currentTarget์์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ๋ ์ ์ธ๋ฉ๋๋ค. event .eventPhase- event์ ๋จ๊ณ(phase)๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฐ์
NONE,CAPTURING_PHASE,AT_TARGET,BUBBLING_PHASE์ค ํ๋์ ๋๋ค. event . stopPropagation()- ํธ๋ฆฌ ๋ด์์ ๋์คํจ์น๋ ๋, ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด event๊ฐ ํ์ฌ ๊ฐ์ฒด ์ธ ๋ค๋ฅธ ๊ฐ์ฒด์๋ ๋๋ฌํ์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
event . stopImmediatePropagation()- ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ํ์ฌ ๋ฆฌ์ค๋ ์คํ ์ดํ ๋ฑ๋ก๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์๋ ๋๋ฌํ์ง ์์ผ๋ฉฐ, ํธ๋ฆฌ ๋ด ๋์คํจ์น ์ค์ด๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์๋ ๋๋ฌํ์ง ์์ต๋๋ค.
event .bubbles- event๊ฐ ์ด๋ป๊ฒ ์ด๊ธฐํ๋์๋์ง์ ๋ฐ๋ผ true ๋๋ false๋ฅผ ๋ฐํํฉ๋๋ค. true๋ผ๋ฉด event๊ฐ ํ๊ฒ์ ์กฐ์์ ์ญ์ ํธ๋ฆฌ ์์๋ก ๊ฑฐ์นฉ๋๋ค. ์๋๋ฉด false์ ๋๋ค.
event .cancelable- event๊ฐ ์ด๋ป๊ฒ ์ด๊ธฐํ๋์๋์ง์ ๋ฐ๋ผ true ๋๋ false๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐํ๊ฐ์ ํญ์ ์๋ฏธ๊ฐ ์์ง ์์ง๋ง, true์ธ ๊ฒฝ์ฐ event๊ฐ
๋์คํจ์น๋
์์
์ ์ผ๋ถ๋ฅผ
preventDefault()ํธ์ถ๋ก ์ทจ์ํ ์ ์์์ ๋ํ๋ ๋๋ค. event . preventDefault()cancelable์์ฑ ๊ฐ์ด true์ด๊ณ event์ ๋ฆฌ์ค๋ ์คํ ์คpassive๊ฐ false๋ก ์ค์ ๋์ด ์์ผ๋ฉด, event๋ฅผ ๋์คํจ์นํ๊ฒ ํ ์์ ์ ์ทจ์ ์ ํธ๋ฅผ ๋ณด๋ ๋๋ค.event .defaultPreventedpreventDefault()๊ฐ ์ฑ๊ณต์ ์ผ๋ก ํธ์ถ๋์ด ์ทจ์๋์์์ ๋ํ๋ด๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.event .composed- event ๊ฐ ์ด๊ธฐํ๋ ๋ฐฉ์์ ๋ฐ๋ผ true ๋๋ false๋ฅผ ๋ฐํํฉ๋๋ค. event ์ ํ๊ฒ ์ ๋ฃจํธ ์ธ ShadowRoot ๋ ธ๋ ๋ฅผ ๋์ด event ๊ฐ ๋ฆฌ์ค๋๋ฅผ ํธ์ถํ๋ฉด true์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false์ ๋๋ค.
event .isTrusted- event๊ฐ ์ฌ์ฉ์ ์์ด์ ํธ์ ์ํด ๋์คํจ์น๋๋ฉด true, ๊ทธ๋ ์ง ์์ผ๋ฉด false์ ๋๋ค.
event .timeStamp- event์ ํ์์คํฌํ๋ฅผ ๋ฐํํ๋ฉฐ, ๋ฐ์ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ธก์ ๋ ๋ฐ๋ฆฌ์ด ๋จ์ ์ซ์์ ๋๋ค.
type ์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค. ์ด๋ฒคํธ๊ฐ ์์ฑ๋ ๋ ์ด ์์ฑ์ ๋น ๋ฌธ์์ด๋ก ์ด๊ธฐํ๋์ด์ผ ํฉ๋๋ค.
target getter ๋จ๊ณ๋ this์
target์ ๋ฐํํฉ๋๋ค.
srcElement getter ๋จ๊ณ๋
this์ target์ ๋ฐํํฉ๋๋ค.
currentTarget ์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค. ์ด๋ฒคํธ๊ฐ ์์ฑ๋ ๋ ์ด ์์ฑ์ null๋ก
์ด๊ธฐํ๋์ด์ผ ํฉ๋๋ค.
composedPath() ๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:
-
composedPath๋ฅผ ๋น ๋ชฉ๋ก์ผ๋ก ๋๋ค.
-
path๊ฐ ๋น์ด ์์ผ๋ฉด, composedPath๋ฅผ ๋ฐํํ๋ค.
-
currentTarget๋ฅผ this์
currentTarget์์ฑ ๊ฐ์ผ๋ก ๋๋ค. -
๋จ์ธํ๋ค: currentTarget๋
EventTarget๊ฐ์ฒด์ด๋ค. -
currentTarget๋ฅผ composedPath์ ์ถ๊ฐํ๋ค.
-
currentTargetIndex๋ฅผ 0์ผ๋ก ๋๋ค.
-
currentTargetHiddenSubtreeLevel์ 0์ผ๋ก ๋๋ค.
-
index๋ฅผ path์ ํฌ๊ธฐ โ 1๋ก ๋๋ค.
-
index๊ฐ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋์:
-
path[index]์ root-of-closed-tree๊ฐ true์ด๋ฉด, currentTargetHiddenSubtreeLevel์ 1 ์ฆ๊ฐ์ํจ๋ค.
-
path[index]์ ํธ์ถ ๋์์ด currentTarget์ด๋ฉด, currentTargetIndex๋ฅผ index๋ก ์ค์ ํ๊ณ ์ค๋จํ๋ค.
-
path[index]์ slot-in-closed-tree๊ฐ true์ด๋ฉด, currentTargetHiddenSubtreeLevel์ 1 ๊ฐ์์ํจ๋ค.
-
index๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
-
currentHiddenLevel๊ณผ maxHiddenLevel์ currentTargetHiddenSubtreeLevel๋ก ๋๋ค.
-
index๋ฅผ currentTargetIndex โ 1๋ก ์ค์ ํ๋ค.
-
index๊ฐ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋์:
-
path[index]์ root-of-closed-tree๊ฐ true์ด๋ฉด, currentHiddenLevel์ 1 ์ฆ๊ฐ์ํจ๋ค.
-
currentHiddenLevel์ด maxHiddenLevel๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด, path[index]์ ํธ์ถ ๋์์ composedPath์ ์์ ์ฝ์ ํ๋ค.
-
path[index]์ slot-in-closed-tree๊ฐ true์ด๋ฉด:
-
currentHiddenLevel์ 1 ๊ฐ์์ํจ๋ค.
-
currentHiddenLevel์ด maxHiddenLevel๋ณด๋ค ์์ผ๋ฉด, maxHiddenLevel์ currentHiddenLevel๋ก ์ค์ ํ๋ค.
-
-
index๋ฅผ 1 ๊ฐ์์ํจ๋ค.
-
-
currentHiddenLevel๊ณผ maxHiddenLevel์ currentTargetHiddenSubtreeLevel๋ก ์ค์ ํ๋ค.
-
index๋ฅผ currentTargetIndex + 1๋ก ์ค์ ํ๋ค.
-
index๊ฐ path์ ํฌ๊ธฐ๋ณด๋ค ์์ ๋์:
-
path[index]์ slot-in-closed-tree๊ฐ true์ด๋ฉด, currentHiddenLevel์ 1 ์ฆ๊ฐ์ํจ๋ค.
-
currentHiddenLevel์ด maxHiddenLevel๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด, path[index]์ ํธ์ถ ๋์์ composedPath์ ์ถ๊ฐํ๋ค.
-
path[index]์ root-of-closed-tree๊ฐ true์ด๋ฉด:
-
currentHiddenLevel์ 1 ๊ฐ์์ํจ๋ค.
-
currentHiddenLevel์ด maxHiddenLevel๋ณด๋ค ์์ผ๋ฉด, maxHiddenLevel์ currentHiddenLevel๋ก ์ค์ ํ๋ค.
-
-
index๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
-
-
composedPath๋ฅผ ๋ฐํํ๋ค.
eventPhase ์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํ๋ฉฐ, ๋ค์ ์ค ํ๋์ฌ์ผ ํฉ๋๋ค:
NONE(์ซ์๊ฐ 0)- ํ์ฌ ๋์คํจ์น๋์ง ์์ ์ด๋ฒคํธ๋ ์ด ๋จ๊ณ์ ์์ต๋๋ค.
CAPTURING_PHASE(์ซ์๊ฐ 1)- ํธ๋ฆฌ ์ ์ฐธ์ฌ ํ๋ ๊ฐ์ฒด๋ก ์ด๋ฒคํธ ๊ฐ ๋์คํจ์น ๋๋ฉด, ์ด๋ฒคํธ๊ฐ ์์ ์ ํ๊ฒ ์ ๋๋ฌํ๊ธฐ ์ ์ ์ด ๋จ๊ณ์ ์์ต๋๋ค.
AT_TARGET(์ซ์๊ฐ 2)- ์ด๋ฒคํธ๊ฐ ๋์คํจ์น๋์ด ํ๊ฒ์ ๋๋ฌํ์ ๋ ์ด ๋จ๊ณ์ ์์ต๋๋ค.
BUBBLING_PHASE(์ซ์๊ฐ 3)- ํธ๋ฆฌ ์
์ฐธ์ฌ
ํ๋ ๊ฐ์ฒด๋ก ์ด๋ฒคํธ ๊ฐ
๋์คํจ์น ๋๋ฉด, ์ด๋ฒคํธ๊ฐ ์์ ์ ํ๊ฒ ์ ๋๋ฌํ๊ธฐ ํ์ ์ด ๋จ๊ณ์ ์์ต๋๋ค.
์ด๊ธฐ์๋ ์์ฑ์ด
NONE์ผ๋ก ์ด๊ธฐํ๋์ด์ผ ํฉ๋๋ค.
๊ฐ ์ด๋ฒคํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ฐ๊ด ํ๋๊ทธ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ชจ๋ ์ฒ์์๋ ํด์ ์ํ์ ๋๋ค:
- ์ ํ ์ค๋จ ํ๋๊ทธ(stop propagation flag)
- ์ฆ์ ์ ํ ์ค๋จ ํ๋๊ทธ(stop immediate propagation flag)
- ์ทจ์๋จ ํ๋๊ทธ(canceled flag)
- ํจ์๋ธ ๋ฆฌ์ค๋ ํ๋๊ทธ(in passive listener flag)
- composed ํ๋๊ทธ
- ์ด๊ธฐํ๋จ ํ๋๊ทธ(initialized flag)
- ๋์คํจ์น ํ๋๊ทธ(dispatch flag)
stopPropagation()๋ฉ์๋ ๋จ๊ณ๋ this์ ์ ํ ์ค๋จ ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋๋ค.cancelBubblegetter ๋จ๊ณ๋ this์ ์ ํ ์ค๋จ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.cancelBubblesetter ๋จ๊ณ๋, ์ฃผ์ด์ง ๊ฐ์ด true์ธ ๊ฒฝ์ฐ this์ ์ ํ ์ค๋จ ํ๋๊ทธ๋ฅผ ์ค์ ํ๊ณ , ์๋๋ฉด ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค.stopImmediatePropagation()๋ฉ์๋ ๋จ๊ณ๋ this์ ์ ํ ์ค๋จ ํ๋๊ทธ์ this์ ์ฆ์ ์ ํ ์ค๋จ ํ๋๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค.bubbles์cancelable์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค.์ทจ์ ํ๋๊ทธ ์ค์ ์ ์ด๋ฒคํธ event๋ฅผ ๋ฐ์์, event์
cancelable์์ฑ์ด true์ด๊ณ event์ ํจ์๋ธ ๋ฆฌ์ค๋ ํ๋๊ทธ๊ฐ ํด์ ๋์ด ์๋ค๋ฉด event์ ์ทจ์๋จ ํ๋๊ทธ๋ฅผ ์ค์ ํ๊ณ , ์๋๋ฉด ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค.returnValuegetter ๋จ๊ณ๋ this์ ์ทจ์๋จ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด false, ์๋๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.returnValuesetter ๋จ๊ณ๋, ์ฃผ์ด์ง ๊ฐ์ด false์ด๋ฉด ์ทจ์ ํ๋๊ทธ ์ค์ ์ this์ ๋ํด ์คํํ๊ณ , ์๋๋ฉด ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค.preventDefault()๋ฉ์๋ ๋จ๊ณ๋ ์ทจ์ ํ๋๊ทธ ์ค์ ์ this์ ๋ํด ์คํํ๋ ๊ฒ์ ๋๋ค.preventDefault()๋ฅผ ํธ์ถํด๋ ์๋ฌด ํจ๊ณผ๊ฐ ์๋ ์ํฉ์ด ์์ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ด๋ฌํ ์์ธ์ ๊ฐ๋ฐ์ ์ฝ์์ ์ ํํ๊ฒ ๊ธฐ๋กํด ๋๋ฒ๊น ์ ๋๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.defaultPreventedgetter ๋จ๊ณ๋ this์ ์ทจ์๋จ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.composedgetter ๋จ๊ณ๋ this์ composed ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
isTrusted์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค. ์ด๋ฒคํธ๊ฐ ์์ฑ๋ ๋ ์ด ์์ฑ์ false๋ก ์ด๊ธฐํ๋์ด์ผ ํฉ๋๋ค.isTrusted๋ ์ด๋ฒคํธ๊ฐ ์ฌ์ฉ์ ์์ด์ ํธ์ ์ํด ๋์คํจ์น๋์๋์ง(์ฆdispatchEvent()๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ๊ฐ ์๋์ง) ํธ๋ฆฌํ๊ฒ ์ ์ ์๊ฒ ํด์ค๋๋ค. ์ ์ผํ ๋ ๊ฑฐ์ ์์ธ๋click()์ด๋ฉฐ, ์ด๋ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋์คํจ์นํ ๋isTrusted์์ฑ์ false๋ก ์ด๊ธฐํํ๊ฒ ๋ง๋ญ๋๋ค.timeStamp์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค.
์ด๋ฒคํธ ์ด๊ธฐํ(initialize)๋ฅผ event์ ๋ํด, type, bubbles, cancelable์ ํจ๊ป ์ํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ค์ ์คํํฉ๋๋ค:
-
event์ ์ด๊ธฐํ๋จ ํ๋๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค.
-
event์ ์ ํ ์ค๋จ ํ๋๊ทธ, ์ฆ์ ์ ํ ์ค๋จ ํ๋๊ทธ, ์ทจ์๋จ ํ๋๊ทธ๋ฅผ ํด์ ํฉ๋๋ค.
-
event์
isTrusted์์ฑ์ false๋ก ์ค์ ํฉ๋๋ค. -
event์ target์ null๋ก ์ค์ ํฉ๋๋ค.
-
event์
type์์ฑ์ type์ผ๋ก ์ค์ ํฉ๋๋ค. -
event์
bubbles์์ฑ์ bubbles๋ก ์ค์ ํฉ๋๋ค. -
event์
cancelable์์ฑ์ cancelable๋ก ์ค์ ํฉ๋๋ค.
initEvent(type, bubbles, cancelable)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
this์ ๋์คํจ์น ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด return ํฉ๋๋ค.
-
์ด๊ธฐํ๋ฅผ this์ type, bubbles, cancelable๋ก ์คํํฉ๋๋ค.
initEvent()๋ ์ด๋ฒคํธ ์์ฑ์์ ์ค๋ณต๋๋ฉฐcomposed์์ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. ๋ ๊ฑฐ์ ์ฝํ ์ธ ์ง์์ ์ํด ๋ฐ๋์ ๊ตฌํ๋์ด์ผ ํฉ๋๋ค.2.3.
Window์ธํฐํ์ด์ค์ ๋ํ ๋ ๊ฑฐ์ ํ์ฅpartial interface Window { [Replaceable ]readonly attribute (Event or undefined )event ; // legacy };๊ฐ
Window๊ฐ์ฒด๋ ์ฐ๊ด๋ ํ์ฌ ์ด๋ฒคํธ(current event)(undefined ๋๋Event๊ฐ์ฒด)์ ๊ฐ์ง๋๋ค. ๋ณ๋ ์ธ๊ธ์ด ์์ผ๋ฉด undefined์ ๋๋ค.eventgetter ๋จ๊ณ๋ this์ ํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐํํฉ๋๋ค.์น ๊ฐ๋ฐ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ ๋ฌ๋๋
Event๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ด์์ฑ ๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ด ์์ฑ์ worker๋ worklet์์๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์๋์ฐ ํธ๋ฆฌ์์ ๋์คํจ์น๋ ์ด๋ฒคํธ์๋ ์ ํํ์ง ์์ต๋๋ค.2.4. ์ธํฐํ์ด์ค
CustomEvent[Exposed=*]
interface :CustomEvent Event {(constructor DOMString ,type optional CustomEventInit = {});eventInitDict readonly attribute any detail ;undefined initCustomEvent (DOMString ,type optional boolean =bubbles false ,optional boolean =cancelable false ,optional any =detail null ); // legacy };dictionary :CustomEventInit EventInit {any =detail null ; };์ด๋ฒคํธ๋
CustomEvent์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด ์ปค์คํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.event = new CustomEvent(type [, eventInitDict])Event์ ์์ฑ์์ ์ ์ฌํ๊ฒ ๋์ํ์ง๋ง, eventInitDict ์ธ์๋ฅผ ํตํดdetail์์ฑ๋ ์ค์ ํ ์ ์์ต๋๋ค.event .detail- event๊ฐ ์์ฑ๋ ๋ ํฌํจ๋ ์ปค์คํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค. ์ฃผ๋ก ํฉ์ฑ ์ด๋ฒคํธ์์ ์ฌ์ฉ๋ฉ๋๋ค.
detail์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค.initCustomEvent(type, bubbles, cancelable, detail)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:2.5. ์ด๋ฒคํธ ์์ฑ
๋ช ์ธ๋ ๋ชจ๋ ๋๋ ์ผ๋ถ ์ด๋ฒคํธ์ ๋ํด ์ด๋ฒคํธ ์์ฑ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ event event์
EventIniteventInitDict๋ฅผ ๋ด๋ถ ์ด๋ฒคํธ ์์ฑ ๋จ๊ณ์์ ๋๊ฒจ๋ฐ์ต๋๋ค.์ด ๊ตฌ์กฐ๋ ์ด๊ธฐํ์ฉ ๋์ ๋๋ฆฌ ๋ฉค๋ฒ์ IDL ์์ฑ ๊ฐ 1:1 ๋์์ด ์๋ ๋ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
Event์๋ธํด๋์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.Event์ธํฐํ์ด์ค ๋๋Event์ธํฐํ์ด์ค๋ฅผ ์์ํ ์ธํฐํ์ด์ค์ ์์ฑ์๊ฐ ํธ์ถ๋ ๋, type๊ณผ eventInitDict ์ธ์๋ฅผ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ค์ ์คํํด์ผ ํฉ๋๋ค:-
event๋ฅผ ์ด ์ธํฐํ์ด์ค, null, now, eventInitDict๋ก ๋ด๋ถ ์ด๋ฒคํธ ์์ฑ ๋จ๊ณ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
event์
type์์ฑ์ type์ผ๋ก ์ด๊ธฐํํฉ๋๋ค. -
event๋ฅผ ๋ฐํํฉ๋๋ค.
eventInterface๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ์์ฑ์ ํ๋ ค๋ฉด, eventInterface๋
Event์ด๊ฑฐ๋ ์ด๋ฅผ ์์ํ ์ธํฐํ์ด์ค์ฌ์ผ ํ๋ฉฐ, ์ ํ์ ์ผ๋ก realm realm์ ๋ฐ์ ๋ค์ ๋จ๊ณ๋ค์ ์คํํฉ๋๋ค:-
realm์ด ์ฃผ์ด์ง์ง ์์๋ค๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
dictionary๋ฅผ JavaScript ๊ฐ undefined๋ฅผ eventInterface์ ์์ฑ์๊ฐ ๋ฐ์๋ค์ด๋ ๋์ ๋๋ฆฌ ํ์ ์ผ๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. (์ด ๋์ ๋๋ฆฌ ํ์ ์
EventInit๋๋ ์ด๋ฅผ ์์ํ ๋์ ๋๋ฆฌ์ ๋๋ค.)๋ฉค๋ฒ๊ฐ ํ์์ผ ๋๋ ๋์ํ์ง ์์ต๋๋ค. whatwg/dom#600 ์ฐธ์กฐ.
-
event๋ฅผ eventInterface, realm, ์ด๋ฒคํธ๊ฐ ์ ํธํ๋ ๋ฐ์ ์๊ฐ, dictionary๋ก ๋ด๋ถ ์ด๋ฒคํธ ์์ฑ ๋จ๊ณ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
macOS์์๋ ์ ๋ ฅ ๋์ ๋ฐ์ ์๊ฐ์ด
timestamp์์ฑ์ ํตํดNSEvent๊ฐ์ฒด์์ ์ ๊ณต๋ฉ๋๋ค. -
event์
isTrusted์์ฑ์ true๋ก ์ด๊ธฐํํฉ๋๋ค. -
event๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๋ฒคํธ ์์ฑ์ ๋จ์ํ ์ด๋ฒคํธ ๋ฐ์์ด ์๋, ๋ค๋ฅธ ๋ช ์ธ์์ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์์ฑํ๊ณ ๋์คํจ์นํด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ณผ์ ์ ์ด๋ฒคํธ์ ์์ฑ์ด ์ฌ๋ฐ๋ฅธ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ด๋ถ ์ด๋ฒคํธ ์์ฑ ๋จ๊ณ๋ eventInterface, realm, time, dictionary๋ฅผ ๋ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์คํ๋ฉ๋๋ค:
-
event๋ฅผ eventInterface๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. realm์ด null์ด ์๋๋ฉด ํด๋น realm์ ์ฌ์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด Web IDL์์ ์ ์๋ ๊ธฐ๋ณธ ๋์์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ ์์ ๊ธฐ์ค Web IDL์ ์์ง ๊ธฐ๋ณธ ๋์์ ์ ์ํ์ง ์์์. whatwg/webidl#135 ์ฐธ์กฐ.
-
event์ ์ด๊ธฐํ๋จ ํ๋๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค.
-
event์
timeStamp์์ฑ์ time๊ณผ event์ ๊ด๋ จ ๊ธ๋ก๋ฒ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์๋ ๊ณ ํด์๋ ๊ทผ์ฌ ์๊ฐ์ผ๋ก ์ด๊ธฐํํฉ๋๋ค. -
dictionary์ ๊ฐ ๋ฉค๋ฒ member โ value์ ๋ํด: event์ identifier๊ฐ member์ธ ์์ฑ์ด ์๋ค๋ฉด ํด๋น ์์ฑ์ value๋ก ์ด๊ธฐํํฉ๋๋ค.
-
์ด๋ฒคํธ ์์ฑ ๋จ๊ณ๋ฅผ event์ dictionary๋ก ์คํํฉ๋๋ค.
-
event๋ฅผ ๋ฐํํฉ๋๋ค.
2.6. ์ด๋ฒคํธ ์ธํฐํ์ด์ค ์ ์
์ผ๋ฐ์ ์ผ๋ก
Event๋ฅผ ์์ํ๋ ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ ๋๋ ๋ฐ๋์ WHATWG ๋๋ W3C WebApps WG ์ปค๋ฎค๋ํฐ์ ํผ๋๋ฐฑ์ ์์ฒญํ์ธ์.CustomEvent์ธํฐํ์ด์ค๋ฅผ ์์์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋งinit*Event()์ ๊ฐ์ ๋ฉ์๋๋ ์์ฑ์์ ์ค๋ณต๋๋ฏ๋ก ๋์ ํ์ง ๋ง์ธ์.Event์ธํฐํ์ด์ค๋ฅผ ์์ํ ์ธํฐํ์ด์ค ์ค ์ด๋ฐ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ๋ ์ค์ง ์ญ์ฌ์ ์ด์ ๋๋ฌธ์ ๋๋ค.2.7. ์ธํฐํ์ด์ค
EventTarget[Exposed=*]
interface {EventTarget constructor ();undefined addEventListener (DOMString ,type EventListener ?,callback optional (AddEventListenerOptions or boolean )= {});options undefined removeEventListener (DOMString ,type EventListener ?,callback optional (EventListenerOptions or boolean )= {});options boolean dispatchEvent (Event ); };event callback interface {EventListener undefined (handleEvent Event ); };event dictionary {EventListenerOptions boolean =capture false ; };dictionary :AddEventListenerOptions EventListenerOptions {boolean ;passive boolean =once false ;AbortSignal ; };signal EventTarget๊ฐ์ฒด๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ์ ๋ event๋ฅผ ๋์คํจ์นํ ์ ์๋ ํ๊ฒ์ ๋ํ๋ ๋๋ค.๊ฐ
EventTarget๊ฐ์ฒด๋ ์ฐ๊ด๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก(๋ฆฌ์คํธ๋ก, 0๊ฐ ์ด์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํฌํจ)์ ๊ฐ์ง๋๋ค. ์ด๊ธฐ์๋ ๋น ๋ฆฌ์คํธ์ ๋๋ค.์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ ํน์ event๋ฅผ ๊ด์ฐฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- type (๋ฌธ์์ด)
- callback (null ๋๋
EventListener๊ฐ์ฒด) - capture (๋ถ๋ฆฌ์ธ, ์ด๊ธฐ๊ฐ false)
- passive (null ๋๋ ๋ถ๋ฆฌ์ธ, ์ด๊ธฐ๊ฐ null)
- once (๋ถ๋ฆฌ์ธ, ์ด๊ธฐ๊ฐ false)
- signal (null ๋๋
AbortSignal๊ฐ์ฒด) - removed (๊ธฐ๋ก์ฉ ๋ถ๋ฆฌ์ธ, ์ด๊ธฐ๊ฐ false)
callback์
EventListener๊ฐ์ฒด์ด์ง๋ง, ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ์์์ ๋ณผ ์ ์๋ฏ ๋ ๋์ ๊ฐ๋ ์ ๋๋ค.๊ฐ
EventTarget๊ฐ์ฒด๋ ๋ํ ์ฐ๊ด๋ get the parent ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๋ฉฐ, ์ด๋ event event๋ฅผ ๋ฐ์EventTarget๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ๋ณ๋ ์ธ๊ธ์ด ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.๋ ธ๋, ์๋์ฐ ๋ฃจํธ ๋ฐ ๋ฌธ์๋ get the parent ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ ์ํฉ๋๋ค.
๊ฐ
EventTarget๊ฐ์ฒด๋ ์ฐ๊ด๋ ํ์ฑํ ๋์(activation behavior) ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง ์ ์์ต๋๋ค. ํ์ฑํ ๋์ ์๊ณ ๋ฆฌ์ฆ์ event๋ฅผ ๋ฐ์ ๋์คํจ์น ์๊ณ ๋ฆฌ์ฆ์์ ์คํ๋ฉ๋๋ค.์ด๋ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ํน์
EventTarget๊ฐ์ฒด(์:area์์)์ ๋ํด ํฉ์ฑMouseEvent์ด๋ฒคํธ์type์์ฑ์ดclick์ผ ๋ ํน์ ๋์์ ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์น ํธํ์ฑ ๋๋ฌธ์ ์ ๊ฑฐํ ์ ์์์ผ๋ฉฐ, ์ด์ ๋ ํ์ฑํ๋ฅผ ์ ์ํ๋ ๊ณต์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. [HTML]ํ์ฑํ ๋์์ ๊ฐ์ง
EventTarget๊ฐ์ฒด๋ ์ถ๊ฐ๋ก ๋ ๊ฑฐ์ ์ฌ์ ํ์ฑํ ๋์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ ๊ฑฐ์ ์ทจ์๋ ํ์ฑํ ๋์ ์๊ณ ๋ฆฌ์ฆ ๋ ๊ฐ๋ฅผ ๋ชจ๋ ๊ฐ์ง ์ ์์ต๋๋ค.์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฒดํฌ๋ฐ์ค ๋ฐ ๋ผ๋์ค
input์์์๋ง ์กด์ฌํ๋ฉฐ, ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉ๋์ด์๋ ์ ๋ฉ๋๋ค. [HTML]target = new EventTarget();-
์๋ก์ด
EventTarget๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ๋์คํจ์นํ๊ณ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. target . addEventListener(type, callback [, options])-
์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ด๋ฒคํธ์
type์์ฑ๊ฐ์ด type์ธ ๊ฒฝ์ฐ์ ๋ํด ์ถ๊ฐํฉ๋๋ค. callback ์ธ์๋ callback์ ์ค์ ํ๋ฉฐ, ์ด๋ ์ด๋ฒคํธ๊ฐ ๋์คํจ์น๋ ๋ ํธ์ถ๋ฉ๋๋ค.options ์ธ์๋ ๋ฆฌ์ค๋๋ณ ์ต์ ์ ์ค์ ํฉ๋๋ค. ํธํ์ฑ์ ์ํด ์ด๋ ๋ถ๋ฆฌ์ธ์ผ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ๋ฉ์๋๋ options์
capture๋ก ์ง์ ๋ ๊ฐ์ฒ๋ผ ๋์ํฉ๋๋ค.๋ง์ฝ options์
capture๊ฐ true๋ก ์ค์ ๋๋ฉด, callback์ ์ด๋ฒคํธ์eventPhase์์ฑ๊ฐ์ดBUBBLING_PHASE์ผ ๋ ํธ์ถ๋์ง ์์ต๋๋ค. false (๋๋ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ)์๋ callback์ ์ด๋ฒคํธ์eventPhase์์ฑ๊ฐ์ดCAPTURING_PHASE์ผ ๋ ํธ์ถ๋์ง ์์ต๋๋ค. ์ด๋ ๊ฒฝ์ฐ๋ , callback์ ์ด๋ฒคํธ์eventPhase์์ฑ๊ฐ์ดAT_TARGET์ผ ๋ ํธ์ถ๋ฉ๋๋ค.๋ง์ฝ options์
passive๊ฐ true๋ก ์ค์ ๋๋ฉด, callback์preventDefault()๋ฅผ ํธ์ถํ์ฌ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํ์ง ์์ต๋๋ค. ์ด๋ ยงโฏ2.8 ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๊ด์ฐฐ์ ์ค๋ช ๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.๋ง์ฝ options์
once๊ฐ true๋ก ์ค์ ๋๋ฉด, callback์ ํ ๋ฒ๋ง ํธ์ถ๋๋ฉฐ, ๊ทธ ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ์ ๊ฑฐ๋ฉ๋๋ค.๋ง์ฝ options์
signal์AbortSignal์ด ์ ๋ฌ๋๋ฉด, signal์ด ์ค๋จ๋ ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ์ ๊ฑฐ๋ฉ๋๋ค.ํด๋น ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ target์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก์ ์ถ๊ฐ๋๋ฉฐ, ๋์ผํ type, callback, ๋ฐ capture๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ์๋ ์ถ๊ฐ๋์ง ์์ต๋๋ค.
target . removeEventListener(type, callback [, options])-
target์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก์์ ๋์ผํ type, callback, options๋ฅผ ๊ฐ์ง ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
target . dispatchEvent(event)-
ํฉ์ฑ ์ด๋ฒคํธ event๋ฅผ target์ ๋์คํจ์นํ๋ฉฐ, event์
cancelable์์ฑ๊ฐ์ด false์ด๊ฑฐ๋,preventDefault()๋ฉ์๋๊ฐ ํธ์ถ๋์ง ์์ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
options๋ฅผ ํํํ(flatten)ํ๋ ค๋ฉด, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค:
-
options๊ฐ ๋ถ๋ฆฌ์ธ์ด๋ฉด, options๋ฅผ ๋ฐํํฉ๋๋ค.
-
options["
capture"]๋ฅผ ๋ฐํํฉ๋๋ค.
options๋ฅผ ๋ ํํํ(flatten more)ํ๋ ค๋ฉด, ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค:
-
capture๋ฅผ ํํํ(flatten) options์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
once๋ฅผ false๋ก ์ค์ ํฉ๋๋ค.
-
passive์ signal์ null๋ก ์ค์ ํฉ๋๋ค.
-
options๊ฐ ๋์ ๋๋ฆฌ(dictionary)์ธ ๊ฒฝ์ฐ:
-
capture, passive, once, signal์ ๋ฐํํฉ๋๋ค.
new EventTarget()์์ฑ์์ ๋จ๊ณ๋ ์๋ฌด๊ฒ๋ ํ์ง ์์ต๋๋ค.๋ค๋ฅธ ๊ณณ์์ ๋ช ์๋ ๊ธฐ๋ณธ๊ฐ ๋๋ฌธ์, ๋ฐํ๋
EventTarget์ get the parent ์๊ณ ๋ฆฌ์ฆ์ null์ ๋ฐํํ๋ฉฐ, ํ์ฑํ ๋์, ๋ ๊ฑฐ์ ์ฌ์ ํ์ฑํ ๋์, ๋๋ ๋ ๊ฑฐ์ ์ทจ์๋ ํ์ฑํ ๋์์ ๊ฐ์ง์ง ์์ต๋๋ค.ํฅํ ์ฌ์ฉ์ ์ง์ get the parent ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ ์ ์๋ค. ์ด๊ฒ์ด ์ ์ฉํ๋ค๋ฉด ์ด์ #583์ ์ง์ํ๋ผ. ํ์ฌ๋ ๋ชจ๋ ์์ฑ์๊ฐ ์์ฑํ
EventTarget์ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ฐธ์ฌํ์ง ์๋๋ค.๊ธฐ๋ณธ passive ๊ฐ์ ์ด๋ฒคํธ ํ์ type๊ณผ
EventTargeteventTarget์ด ์ฃผ์ด์ก์ ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ์ ๋ฉ๋๋ค:-
๋ค์ ์กฐ๊ฑด์ด ๋ชจ๋ ์ฐธ์ด๋ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค:
-
type์ด "
touchstart", "touchmove", "wheel" ๋๋ "mousewheel" ์ค ํ๋์ ๋๋ค. [TOUCH-EVENTS] [UIEVENTS] -
eventTarget์ด
Window๊ฐ์ฒด์ด๊ฑฐ๋, ๋ ธ๋(node)์ด๊ณ , ํด๋น ๋ ธ๋ ๋ฌธ์๊ฐ eventTarget์ธ ๊ฒฝ์ฐ์ด๊ฑฐ๋, ๋ ธ๋์ด๊ณ , ํด๋น ๋ ธ๋ ๋ฌธ์์ ๋ฌธ์ ์์๊ฐ eventTarget์ธ ๊ฒฝ์ฐ, ๋๋ ๋ ธ๋์ด๊ณ , ํด๋น ๋ ธ๋ ๋ฌธ์์ body ์์๊ฐ eventTarget์ธ ๊ฒฝ์ฐ. [HTML]
-
-
false๋ฅผ ๋ฐํํฉ๋๋ค.
EventTarget๊ฐ์ฒด eventTarget๊ณผ ์ด๋ฒคํธ ๋ฆฌ์ค๋ listener๊ฐ ์ฃผ์ด์ก์ ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ๋ฅผ ์ํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค:-
๋ง์ฝ eventTarget์ด
ServiceWorkerGlobalScope๊ฐ์ฒด์ด๊ณ , ํด๋น ์๋น์ค ์์ปค์ ์คํฌ๋ฆฝํธ ๋ฆฌ์์ค์ ํ๊ฐ๋ ์ ์์ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์๊ณ , listener์ type์ด์๋น์ค ์์ปค ์ด๋ฒคํธ ์ค ํ๋์ type์์ฑ๊ฐ ์ค ํ๋์ ์ผ์นํ๋ค๋ฉด, ์์ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ ์ ์๋ค๊ณ ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. [SERVICE-WORKERS] -
๋ง์ฝ listener์ signal์ด null์ด ์๋๊ณ aborted๋ผ๋ฉด, returnํ๋ค.
-
๋ง์ฝ listener์ callback์ด null์ด๋ผ๋ฉด, ์ข ๋ฃํฉ๋๋ค.
-
๋ง์ฝ listener์ passive๊ฐ null์ด๋ผ๋ฉด, listener์ type๊ณผ eventTarget์ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๋ณธ passive ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
eventTarget ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก ์ด type ์ด listener ์ type ๊ณผ ๊ฐ๊ณ , callback ์ด listener ์ callback ๊ณผ ๊ฐ์ผ๋ฉฐ, capture ๊ฐ listener ์ capture ์ ๊ฐ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฅผ ํฌํจํ์ง ์์ผ๋ฉด listener ๋ฅผ eventTarget ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก ์ ์ถ๊ฐ ํฉ๋๋ค.
-
๋ง์ฝ listener์ signal์ด null์ด ์๋๋ผ๋ฉด, ๋ค์ ์ค๋จ ๋จ๊ณ๋ฅผ ์ถ๊ฐํฉ๋๋ค:
- ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ๋ฅผ eventTarget๊ณผ listener๋ฅผ ์ฌ์ฉํ์ฌ ์คํํฉ๋๋ค.
์ด ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ ๊ฐ๋ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋์ผํ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค. [HTML]
addEventListener(type, callback, options)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
capture, passive, once, signal์ ๋ ํํํ(flattening more) options์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ๋ฅผ this์ ๋ค์ ์์ฑ์ ๊ฐ์ง ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก ์คํํฉ๋๋ค: type์ type, callback์ callback, capture๋ capture, passive๋ passive, once๋ once, signal์ signal.
์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ๋ฅผ
EventTarget๊ฐ์ฒด eventTarget๊ณผ ์ด๋ฒคํธ ๋ฆฌ์ค๋ listener๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค:-
eventTarget์ด
ServiceWorkerGlobalScope๊ฐ์ฒด์ด๊ณ , ํด๋น ์๋น์ค ์์ปค์ ์ฒ๋ฆฌํ ์ด๋ฒคํธ ํ์ ์งํฉ์ด listener์ type์ ํฌํจํ๋ค๋ฉด, ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. [SERVICE-WORKERS] -
listener์ ์ ๊ฑฐ๋จ ํ๋๊ทธ๋ฅผ true๋ก ์ค์ ํ๊ณ , ์ ๊ฑฐํฉ๋๋ค. listener๋ฅผ eventTarget์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก์์ ์ ๊ฑฐํฉ๋๋ค.
HTML ๋ช ์ธ์์๋ ์ด ๊ธฐ๋ฅ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ ์์ ์ฌ์ฉํฉ๋๋ค. [HTML]
๋ชจ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ๋ฅผ
EventTarget๊ฐ์ฒด eventTarget๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ๋ ค๋ฉด: ๊ฐ listener์ ๋ํด eventTarget์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก์์: ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ๋ฅผ ์คํํฉ๋๋ค.HTML ๋ช ์ธ์์๋ ์ด ๊ธฐ๋ฅ์
document.open()์ ์์ ์ฌ์ฉํฉ๋๋ค. [HTML]removeEventListener(type, callback, options)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
capture๋ฅผ ํํํ(flattening) options์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
this ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก ์ด type ์ด type ๊ณผ ๊ฐ๊ณ , callback ์ด callback ๊ณผ ๊ฐ์ผ๋ฉฐ, capture ๊ฐ capture ์ ๊ฐ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฅผ ํฌํจ ํ๋ฉด this ์ ํด๋น ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฅผ ์ธ์๋ก ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ ๋ฅผ ์คํํฉ๋๋ค.
์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก์ ๋์ผํ type, callback, capture ๊ฐ์ ๊ฐ์ง ์ฌ๋ฌ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํฌํจํ์ง ์์ต๋๋ค. ์ด๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ๊ฐ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
dispatchEvent(event)๋ฉ์๋์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
event์ ๋์คํจ์น ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์๊ฑฐ๋, ์ด๊ธฐํ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ง ์์ผ๋ฉด, "
InvalidStateError"DOMException์ throwํฉ๋๋ค. -
event์
isTrusted์์ฑ์ false๋ก ์ด๊ธฐํํฉ๋๋ค. -
event๋ฅผ ๋์คํจ์นํ๊ณ , this๋ก ๋์คํจ์นํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
2.8. ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๊ด์ฐฐ
์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์กด์ฌ๊ฐ ๊ด์ฐฐ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ์์ต๋๋ค. ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ํฅ์ ์ฝ๋ฐฑ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. ์ฆ, ๊ฐ๋ฐ์๊ฐ ์๋ฌด๋ฐ ๋์์ ํ์ง ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ๋๋ผ๋ ๋ถ์์ฉ์ด ์์ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
๋ถํํ๋, ์ผ๋ถ ์ด๋ฒคํธ API๋ ํจ์จ์ ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๊ด์ฐฐํด์ผ๋ง ํ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ ๋ฆฌ์ค๋์ ์กด์ฌ๋ฅผ ๊ด์ฐฐ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๋ฉฐ, ์ฌ์ง์ด ๋น ๋ฆฌ์ค๋์กฐ์ฐจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์์ ๊ทน์ ์ธ ์ฑ๋ฅ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋น๋๊ธฐ ์คํฌ๋กค๋ง์ ์ฐจ๋จํ ์ ์๋ ํฐ์น ๋ฐ ํ ์ด๋ฒคํธ๊ฐ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๋ฒคํธ๊ฐ ์ ์ด๋ ํ๋์ ๋น-
ํจ์๋ธ(passive)๋ฆฌ์ค๋๊ฐ ์์ ๋๋ง์ทจ์ ๊ฐ๋ฅ(cancelable)ํ๋๋ก ์ง์ ํจ์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋น-ํจ์๋ธ(passive)TouchEvent๋ฆฌ์ค๋๋ ์คํฌ๋กค๋ง์ ์ฐจ๋จํด์ผ ํ์ง๋ง, ๋ชจ๋ ๋ฆฌ์ค๋๊ฐํจ์๋ธ(passive)๋ผ๋ฉด,TouchEvent๋ฅผ ์ทจ์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์คํฌ๋กค๋ง์ ๋ณ๋ ฌ๋ก ์์ํ ์ ์๊ฒ ํ ์ ์์ต๋๋ค (์ฆ,preventDefault()ํธ์ถ์ ๋ฌด์). ๋ฐ๋ผ์ ์ด๋ฒคํธ๋ฅผ ๋์คํจ์นํ๋ ์ฝ๋๋ ๋น-ํจ์๋ธ(passive)๋ฆฌ์ค๋๊ฐ ์๋ ๊ฒ์ ๊ด์ฐฐํ๊ณ , ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋์คํจ์น๋๋ ์ด๋ฒคํธ์์ทจ์ ๊ฐ๋ฅ(cancelable)์์ฑ์ ์ง์ธ ์ ์์ต๋๋ค.์ด์์ ์ผ๋ก๋, ์๋ก์ด ์ด๋ฒคํธ API๋ ์ด๋ฌํ ํน์ฑ์ ํ์๋ก ํ์ง ์๋๋ก ์ ์๋์ด์ผ ํฉ๋๋ค. (whatwg/dom์์ ๋ ผ์์ ์ฐธ์ฌํ์ธ์.)
๋ ๊ฑฐ์-์๋น์ค ์์ปค fetch ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ฝ๋ฐฑ ์ป๊ธฐ๋ฅผ
ServiceWorkerGlobalScopeglobal์ ์ฌ์ฉํ์ฌ ์คํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฆ ๋๋ค. ์ด ๋จ๊ณ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ฉฐ,EventListener๊ฐ์ฒด๋ฅผ ํฌํจํฉ๋๋ค.2.9. ์ด๋ฒคํธ ๋์คํจ์น
์ ํ์ legacy target override flag ๋ฐ ์ ํ์ legacyOutputDidListenersThrowFlag์ ํจ๊ป ์ด๋ฒคํธ event๋ฅผ
EventTarget๊ฐ์ฒด target์ ๋์คํจ์นํ๋ ค๋ฉด:-
event์ ๋์คํจ์น ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ค.
-
legacy target override flag๊ฐ ์ฃผ์ด์ง์ง ์์๋ค๋ฉด targetOverride๋ฅผ target์ผ๋ก ๋๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด target์ ์ฐ๊ด๋
Document๋ก ๋๋ค. [HTML]legacy target override flag๋ HTML์์๋ง ์ฌ์ฉ๋๋ฉฐ, target์ด
Window๊ฐ์ฒด์ผ ๋์๋ง ์ฌ์ฉ๋๋ค. -
activationTarget์ null๋ก ๋๋ค.
-
relatedTarget์ event์ relatedTarget์ target์ ๋ํด ๋ฆฌํ๊ธฐํ ํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
clearTargets๋ฅผ false๋ก ๋๋ค.
-
target์ด relatedTarget์ด ์๋๊ฑฐ๋ target์ด event์ relatedTarget์ด๋ผ๋ฉด:
-
touchTargets๋ฅผ ์ ๋ชฉ๋ก์ผ๋ก ๋๋ค.
-
event์ ํฐ์น ๋์ ๋ชฉ๋ก์ ๊ฐ touchTarget์ ๋ํด: touchTarget์ target์ ๋ํด ๋ฆฌํ๊ธฐํ ํ ๊ฒฐ๊ณผ๋ฅผ touchTargets์ ์ถ๊ฐํ๋ค.
-
event, target, targetOverride, relatedTarget, touchTargets ๋ฐ false๋ก ์ด๋ฒคํธ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค.
-
event๊ฐ
MouseEvent๊ฐ์ฒด์ด๊ณ event์type์์ฑ์ด "click"์ด๋ผ๋ฉด isActivationEvent๋ฅผ true๋ก ๋๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด false๋ก ๋๋ค. -
isActivationEvent๊ฐ true์ด๊ณ target์ ํ์ฑํ ๋์์ด ์๋ค๋ฉด activationTarget์ target์ผ๋ก ์ค์ ํ๋ค.
-
target์ด ์ฌ๋กฏ ๊ฐ๋ฅ ๊ฐ์ฒด์ด๊ณ ํ ๋น๋์ด ์๋ค๋ฉด slottable์ target์ผ๋ก ๋๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด null๋ก ๋๋ค.
-
slotInClosedTree๋ฅผ false๋ก ๋๋ค.
-
parent๋ฅผ target์ ๋ถ๋ชจ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ event์ ํจ๊ป ํธ์ถํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
parent๊ฐ non-null์ธ ๋์:
-
slottable์ด non-null์ด๋ผ๋ฉด:
-
๋จ์ธ: parent๋ ์ฌ๋กฏ์ด๋ค.
-
slottable์ null๋ก ์ค์ ํ๋ค.
-
parent์ ๋ฃจํธ๊ฐ shadow root์ด๊ณ ๊ทธ ๋ชจ๋๊ฐ "
closed"๋ผ๋ฉด, slotInClosedTree๋ฅผ true๋ก ์ค์ ํ๋ค.
-
-
parent๊ฐ ์ฌ๋กฏ ๊ฐ๋ฅ ๊ฐ์ฒด์ด๊ณ ํ ๋น๋์ด ์๋ค๋ฉด slottable์ parent๋ก ์ค์ ํ๋ค.
-
relatedTarget์ event์ relatedTarget์ parent์ ๋ํด ๋ฆฌํ๊ธฐํ ํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
touchTargets๋ฅผ ์ ๋ชฉ๋ก์ผ๋ก ๋๋ค.
-
event์ ํฐ์น ๋์ ๋ชฉ๋ก์ ๊ฐ touchTarget์ ๋ํด: touchTarget์ parent์ ๋ํด ๋ฆฌํ๊ธฐํ ํ ๊ฒฐ๊ณผ๋ฅผ touchTargets์ ์ถ๊ฐํ๋ค.
-
parent๊ฐ
Window๊ฐ์ฒด์ด๊ฑฐ๋, parent๊ฐ ๋ ธ๋์ด๊ณ target์ ๋ฃจํธ๊ฐ parent์ shadow-including ํฌ๊ด ์กฐ์์ด๋ผ๋ฉด:-
isActivationEvent๊ฐ true์ด๊ณ , event์
bubbles์์ฑ์ด true์ด๊ณ , activationTarget์ด null์ด๋ฉฐ, parent์ ํ์ฑํ ๋์์ด ์๋ค๋ฉด activationTarget์ parent๋ก ์ค์ ํ๋ค. -
event, parent, null, relatedTarget, touchTargets ๋ฐ slotInClosedTree๋ก ์ด๋ฒคํธ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ parent๊ฐ relatedTarget์ด๋ผ๋ฉด, parent๋ฅผ null๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์๋ค๋ฉด:
-
target์ parent๋ก ์ค์ ํ๋ค.
-
isActivationEvent๊ฐ true์ด๊ณ , activationTarget์ด null์ด๋ฉฐ target์ ํ์ฑํ ๋์์ด ์๋ค๋ฉด activationTarget์ target์ผ๋ก ์ค์ ํ๋ค.
-
event, parent, target, relatedTarget, touchTargets ๋ฐ slotInClosedTree๋ก ์ด๋ฒคํธ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค.
-
-
parent๊ฐ non-null์ด๋ผ๋ฉด, parent๋ฅผ parent์ ๋ถ๋ชจ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ event์ ํจ๊ป ํธ์ถํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
-
slotInClosedTree๋ฅผ false๋ก ์ค์ ํ๋ค.
-
-
clearTargetsItem์ event์ ๊ฒฝ๋ก์์ shadow-adjusted target์ด non-null์ธ ๋ง์ง๋ง ์ด๋ฒคํธ ๊ฒฝ๋ก ํญ๋ชฉ์ผ๋ก ๋๋ค.
-
clearTargetsItem์ shadow-adjusted target, clearTargetsItem์ relatedTarget, ๋๋ clearTargetsItem์ ํฐ์น ๋์ ๋ชฉ๋ก ์์
EventTarget๊ฐ์ฒด๊ฐ ๋ ธ๋์ด๊ณ ๊ทธ ๋ฃจํธ๊ฐ shadow root๋ผ๋ฉด: clearTargets๋ฅผ true๋ก ์ค์ ํ๋ค. -
activationTarget์ด non-null์ด๊ณ activationTarget์ ๋ ๊ฑฐ์-์ฌ์ -ํ์ฑํ ๋์์ด ์๋ค๋ฉด, activationTarget์ ๋ ๊ฑฐ์-์ฌ์ -ํ์ฑํ ๋์์ ์คํํ๋ค.
-
event์ ๊ฒฝ๋ก์ ๊ฐ item์ ๋ํด, ์ญ์์ผ๋ก:
-
item์ shadow-adjusted target์ด non-null์ด๋ผ๋ฉด, event์
eventPhase์์ฑ์AT_TARGET์ผ๋ก ์ค์ ํ๋ค. -
๊ทธ๋ ์ง ์๋ค๋ฉด, event์
eventPhase์์ฑ์CAPTURING_PHASE๋ก ์ค์ ํ๋ค. -
item, event, "
capturing" ๋ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ legacyOutputDidListenersThrowFlag๋ก ํธ์ถํ๋ค.
-
-
event์ ๊ฒฝ๋ก์ ๊ฐ item์ ๋ํด:
-
item์ shadow-adjusted target์ด non-null์ด๋ผ๋ฉด, event์
eventPhase์์ฑ์AT_TARGET์ผ๋ก ์ค์ ํ๋ค. -
๊ทธ๋ ์ง ์๋ค๋ฉด:
-
event์
eventPhase์์ฑ์BUBBLING_PHASE๋ก ์ค์ ํ๋ค.
-
item, event, "
bubbling" ๋ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ legacyOutputDidListenersThrowFlag๋ก ํธ์ถํ๋ค.
-
-
-
event์
eventPhase์์ฑ์NONE์ผ๋ก ์ค์ ํ๋ค. -
event์
currentTarget์์ฑ์ null๋ก ์ค์ ํ๋ค. -
event์ ๊ฒฝ๋ก๋ฅผ ๋น ๋ชฉ๋ก์ผ๋ก ์ค์ ํ๋ค.
-
event์ ๋์คํจ์น ํ๋๊ทธ, ์ ํ ์ค์ง ํ๋๊ทธ ๋ฐ ์ฆ์ ์ ํ ์ค์ง ํ๋๊ทธ๋ฅผ ํด์ ํ๋ค.
-
clearTargets๊ฐ true๋ผ๋ฉด:
-
event์ target์ null๋ก ์ค์ ํ๋ค.
-
event์ relatedTarget์ null๋ก ์ค์ ํ๋ค.
-
event์ ํฐ์น ๋์ ๋ชฉ๋ก์ ๋น ๋ชฉ๋ก์ผ๋ก ์ค์ ํ๋ค.
-
-
activationTarget์ด non-null์ด๋ผ๋ฉด:
-
event์ ์ทจ์๋จ ํ๋๊ทธ๊ฐ ํด์ ๋์ด ์๋ค๋ฉด, activationTarget์ ํ์ฑํ ๋์์ event์ ํจ๊ป ์คํํ๋ค.
-
๊ทธ๋ ์ง ์๊ณ activationTarget์ ๋ ๊ฑฐ์-์ทจ์๋จ-ํ์ฑํ ๋์์ด ์๋ค๋ฉด, activationTarget์ ๋ ๊ฑฐ์-์ทจ์๋จ-ํ์ฑํ ๋์์ ์คํํ๋ค.
-
-
event์ ์ทจ์๋จ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด false๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด true๋ฅผ ๋ฐํํ๋ค.
์ด๋ฒคํธ event,
EventTarget๊ฐ์ฒด invocationTarget, ์ ์ฌ์ ์ด๋ฒคํธ ๋์ shadowAdjustedTarget, ์ ์ฌ์ ์ด๋ฒคํธ ๋์ relatedTarget, ๋ชฉ๋ก์ธ ์ ์ฌ์ ์ด๋ฒคํธ ๋์๋ค touchTargets ๋ฐ boolean slotInClosedTree๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฒคํธ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ ค๋ฉด:-
invocationTargetInShadowTree๋ฅผ false๋ก ๋๋ค.
-
invocationTarget์ด ๋ ธ๋์ด๊ณ ๊ทธ ๋ฃจํธ๊ฐ shadow root๋ผ๋ฉด, invocationTargetInShadowTree๋ฅผ true๋ก ์ค์ ํ๋ค.
-
rootOfClosedTree๋ฅผ false๋ก ๋๋ค.
-
invocationTarget์ด shadow root์ด๊ณ ๊ทธ ๋ชจ๋๊ฐ "
closed"๋ผ๋ฉด, rootOfClosedTree๋ฅผ true๋ก ์ค์ ํ๋ค. -
์ ์ด๋ฒคํธ ๊ฒฝ๋ก ํญ๋ชฉ์ event์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ค. ์ด ํญ๋ชฉ์ ํธ์ถ ๋์์ invocationTarget, invocation-target-in-shadow-tree๋ invocationTargetInShadowTree, shadow-adjusted target์ shadowAdjustedTarget, relatedTarget์ relatedTarget, ํฐ์น ๋์ ๋ชฉ๋ก์ touchTargets, root-of-closed-tree๋ rootOfClosedTree, ๊ทธ๋ฆฌ๊ณ slot-in-closed-tree๋ slotInClosedTree์ด๋ค.
์ด๋ฒคํธ ๊ฒฝ๋ก ํญ๋ชฉ pathItem, ์ด๋ฒคํธ event, ๋ฌธ์์ด phase ๋ฐ ์ ํ์ legacyOutputDidListenersThrowFlag๊ฐ ์ฃผ์ด์ก์ ๋, ํธ์ถํ๋ ค๋ฉด:
-
targetItem์ pathItem์ผ๋ก ๋๋ค.
-
targetItem์ shadow-adjusted target์ด null์ธ ๋์: targetItem์ event์ ๊ฒฝ๋ก์์ targetItem ์์ ์ค๋ ์ด๋ฒคํธ ๊ฒฝ๋ก ํญ๋ชฉ์ผ๋ก ์ค์ ํ๋ค.
-
event์ target์ targetItem์ shadow-adjusted target์ผ๋ก ์ค์ ํ๋ค.
-
event์ relatedTarget์ pathItem์ relatedTarget์ผ๋ก ์ค์ ํ๋ค.
-
event์ ํฐ์น ๋์ ๋ชฉ๋ก์ pathItem์ ํฐ์น ๋์ ๋ชฉ๋ก์ผ๋ก ์ค์ ํ๋ค.
-
event์ ์ ํ ์ค์ง ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด ๋ฐํํ๋ค.
-
event์
currentTarget์์ฑ์ pathItem์ ํธ์ถ ๋์์ผ๋ก ์ด๊ธฐํํ๋ค. -
listeners๋ฅผ event์
currentTarget์์ฑ ๊ฐ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ชฉ๋ก์ ๋ณต์ ๋ณธ์ผ๋ก ๋๋ค.์ด๋ ์ด ์์ ์ดํ์ ์ถ๊ฐ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์คํ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค. ์ ๊ฑฐ๋ ์ฌ์ ํ removed ํ๋ ๋๋ฌธ์ ํจ๊ณผ๊ฐ ์์์ ์ ์ํ๋ค.
-
invocationTargetInShadowTree๋ฅผ pathItem์ invocation-target-in-shadow-tree๋ก ๋๋ค.
-
found๋ฅผ event, listeners, phase, invocationTargetInShadowTree ๋ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ legacyOutputDidListenersThrowFlag๋ก ๋ด๋ถ ํธ์ถ์ ์คํํ ๊ฒฐ๊ณผ๋ก ๋๋ค.
-
found๊ฐ false์ด๊ณ event์
isTrusted์์ฑ์ด true๋ผ๋ฉด:-
originalEventType์ event์
type์์ฑ ๊ฐ์ผ๋ก ๋๋ค. -
event์
type์์ฑ ๊ฐ์ด ๋ค์ ํ์ ์ฒซ ๋ฒ์งธ ์ด์ ์๋ ๋ฌธ์์ด ์ค ์ด๋ ๊ฒ๊ณผ ์ผ์นํ๋ค๋ฉด, event์type์์ฑ ๊ฐ์ ์ผ์นํ๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ ํ์ ๋ ๋ฒ์งธ ์ด์ ์๋ ๋ฌธ์์ด๋ก ์ค์ ํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐํํ๋ค.์ด๋ฒคํธ ์ ํ ๋ ๊ฑฐ์ ์ด๋ฒคํธ ์ ํ " animationend"" webkitAnimationEnd"" animationiteration"" webkitAnimationIteration"" animationstart"" webkitAnimationStart"" transitionend"" webkitTransitionEnd" -
event, listeners, phase, invocationTargetInShadowTree ๋ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ legacyOutputDidListenersThrowFlag๋ก ๋ด๋ถ ํธ์ถํ๋ค.
-
event์
type์์ฑ ๊ฐ์ originalEventType์ผ๋ก ์ค์ ํ๋ค.
-
๋ด๋ถ ํธ์ถ์ ์ํํ๋ ค๋ฉด, ์ฃผ์ด์ง ์ด๋ฒคํธ event, ๋ชฉ๋ก์ธ ์ด๋ฒคํธ ๋ฆฌ์ค๋ listeners, ๋ฌธ์์ด phase, ๋ถ๋ฆฌ์ธ invocationTargetInShadowTree, ๊ทธ๋ฆฌ๊ณ ์ ํ์ legacyOutputDidListenersThrowFlag๊ฐ ์ฃผ์ด์ก์ ๋ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค:
-
found๋ฅผ false๋ก ๋ก๋๋ค.
-
listeners์ ๊ฐ listener์ ๋ํด, ๊ทธ removed๊ฐ false์ธ ๊ฒฝ์ฐ:
-
event์
type์์ฑ ๊ฐ์ด listener์ type์ด ์๋๋ฉด ๊ณ์ํฉ๋๋ค. -
found๋ฅผ true๋ก ์ค์ ํฉ๋๋ค.
-
phase๊ฐ "
capturing"์ด๊ณ listener์ capture๊ฐ false์ด๋ฉด ๊ณ์ํฉ๋๋ค. -
phase๊ฐ "
bubbling"์ด๊ณ listener์ capture๊ฐ true์ด๋ฉด ๊ณ์ํฉ๋๋ค. -
listener์ once๊ฐ true์ด๋ฉด, ์ฃผ์ด์ง event์
currentTarget์์ฑ ๊ฐ๊ณผ listener์ ๋ํด ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. -
targetGlobal์ event์
currentTarget์ด ๋ ธ๋์ธ ๊ฒฝ์ฐ ํด๋นcurrentTarget์ ๋ ธ๋ ๋ฌธ์์ ๊ด๋ จ ์ ์ญ ๊ฐ์ฒด๋ก ์ค์ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด event์currentTarget์ ๊ด๋ จ ์ ์ญ ๊ฐ์ฒด๋ก ์ค์ ํฉ๋๋ค. -
listenerGlobal์ listener ์ฝ๋ฐฑ์ ์ฐ๊ฒฐ๋ Realm์ ์ ์ญ ๊ฐ์ฒด๋ก ๋ก๋๋ค.
-
targetGlobal ๋๋ listenerGlobal์ด
Window๊ฐ์ฒด์ด๊ณ ๊ทธ ์ฐ๊ฒฐ๋Document๊ฐ ์์ ํ ํ์ฑ ์ํ๊ฐ ์๋๋ฉด ๊ณ์ํฉ๋๋ค. -
currentEvent๋ฅผ undefined๋ก ๋ก๋๋ค.
-
listenerGlobal์ด
Window๊ฐ์ฒด์ธ ๊ฒฝ์ฐ:-
currentEvent๋ฅผ listenerGlobal์ ํ์ฌ ์ด๋ฒคํธ๋ก ์ค์ ํฉ๋๋ค.
-
invocationTargetInShadowTree๊ฐ false์ด๋ฉด listenerGlobal์ ํ์ฌ ์ด๋ฒคํธ๋ฅผ event๋ก ์ค์ ํฉ๋๋ค.
-
-
listener์ passive๊ฐ true์ด๋ฉด event์ ํจ์๋ธ ๋ฆฌ์ค๋ ๋ด๋ถ ํ๋๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค.
-
listenerGlobal์ด
Window๊ฐ์ฒด์ด๋ฉด, event์ listener๊ฐ ์ฃผ์ด์ง ์ํ์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ํ์ด๋ฐ ์ ๋ณด๋ฅผ ๊ธฐ๋กํฉ๋๋ค. -
listener์ ์ฝ๋ฐฑ, "
handleEvent", ยซ event ยป, ๊ทธ๋ฆฌ๊ณ event์currentTarget์์ฑ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๊ฐ์ฒด์ ์ฐ์ฐ์ ํธ์ถํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์์ธ exception์ด ๋ฐ์ํ๋ฉด:-
listener์ ์ฝ๋ฐฑ์ ๋์ํ๋ JavaScript ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ Realm์ ์ ์ญ ๊ฐ์ฒด์ ๋ํด exception์ ๋ณด๊ณ ํฉ๋๋ค.
-
์ ๊ณต๋ ๊ฒฝ์ฐ legacyOutputDidListenersThrowFlag๋ฅผ ์ค์ ํฉ๋๋ค.
legacyOutputDidListenersThrowFlag๋ Indexed Database API์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. [INDEXEDDB]
-
-
event์ ํจ์๋ธ ๋ฆฌ์ค๋ ๋ด๋ถ ํ๋๊ทธ๋ฅผ ํด์ ํฉ๋๋ค.
-
listenerGlobal์ด
Window๊ฐ์ฒด์ด๋ฉด listenerGlobal์ ํ์ฌ ์ด๋ฒคํธ๋ฅผ currentEvent๋ก ์ค์ ํฉ๋๋ค. -
event์ ์ฆ์ ์ ํ ์ค์ง ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด ์ค๋จํฉ๋๋ค.
-
-
found๋ฅผ ๋ฐํํฉ๋๋ค.
2.10. ์ด๋ฒคํธ ๋ฐ์
์ด๋ฒคํธ ๋ฐ์์ ์ํด e๋ผ๋ ์ด๋ฆ์ ์ด๋ฒคํธ๋ฅผ target์์, ์ ํ์ ์ผ๋ก eventConstructor๋ฅผ ์ฌ์ฉํ์ฌ, IDL ์์ฑ ์ด๊ธฐํ ๋ฐฉ๋ฒ์ ์ค๋ช ๊ณผ legacy target override flag์ ํจ๊ป, ๋ค์ ๋จ๊ณ๋ค์ ์คํํ๋ค:
-
recordingTimingAsTask๋ฅผ ๋ค์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ ์์ ์๊ฐ ๊ธฐ๋ก ์์ ์ด๋ target์ ๊ด๋ จ ์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค.
-
eventConstructor๊ฐ ์ฃผ์ด์ง์ง ์์๋ค๋ฉด, eventConstructor๋ฅผ ๋ค์์ผ๋ก ์ค์ ํฉ๋๋ค:
Event. -
event๋ฅผ ์ด๋ฒคํธ ์์ฑ์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ eventConstructor๋ฅผ ์ ๋ฌํ๊ณ , target์ ๊ด๋ จ ๋ ๋ฆ์์ ์์ฑํฉ๋๋ค.
-
event์
type์์ฑ์ e๋ก ์ด๊ธฐํํฉ๋๋ค. -
event์ ๋ค๋ฅธ ๋ชจ๋ IDL ์์ฑ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ํธ์ถ์ ์ค๋ช ๋ ๋๋ก ์ด๊ธฐํํฉ๋๋ค.
์ด๋ฅผ ํตํด
isTrusted์์ฑ์ false๋ก ์ค์ ํ ์๋ ์์ต๋๋ค. -
result๋ฅผ event๋ฅผ target์ ๋ฐ์กํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ legacy target override flag๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ค์ ํฉ๋๋ค.
-
recordingTimingAsTask๊ฐ true์ด๋ฉด:
- ๋จ์ธ: target์ ๊ด๋ จ ์ค์ ๊ฐ์ฒด๋
Document์ ๋๋ค. -
์์ ์ข ๋ฃ ์๊ฐ ๊ธฐ๋ก์ ์ํํฉ๋๋ค. ์ด๋ ์์ ํ์ง ์์ ๊ณต์ ํ์ฌ ์๊ฐ๊ณผ target์ ๊ด๋ จ ์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ๋จ์ธ: target์ ๊ด๋ จ ์ค์ ๊ฐ์ฒด๋
-
result๋ฅผ ๋ฐํํฉ๋๋ค.
DOM์ ๋ฌธ๋งฅ์์ Fire๋ ์์ฑ, ์ด๊ธฐํ, ๊ทธ๋ฆฌ๊ณ ๋์คํจ์น๋ฅผ ํตํด ์ด๋ฒคํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ค์ฌ ์ด๋ฅด๋ ๋ง์ด๋ค. ์ด๋ฒคํธ ๋ฐ์์ํค๊ธฐ๋ ๊ทธ ๊ณผ์ ์ ๋ ์ฝ๊ฒ ์์ฑํ ์ ์๊ฒ ํ๋ค.
์ด๋ฒคํธ์
bubbles๋๋cancelable์์ฑ์ ์ด๊ธฐํํด์ผ ํ๋ค๋ฉด, "target์์submit์ด๋ผ๋ ์ด๋ฆ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ณ , ๊ทธcancelable์์ฑ์ true๋ก ์ด๊ธฐํํ๋ค"๋ผ๊ณ ์์ฑํ ์ ์๋ค.๋๋, ์ฌ์ฉ์ ์ ์ ์์ฑ์๊ฐ ํ์ํ ๋๋, "target์์
click์ด๋ผ๋ ์ด๋ฆ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋MouseEvent๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธdetail์์ฑ์ 1๋ก ์ด๊ธฐํํ๋ค"๋ผ๊ณ ์์ฑํ ์ ์๋ค.๋๋ก๋ ๋ฐํ๊ฐ์ด ์ค์ํ๋ค:
-
doAction์ target์์
like๋ผ๋ ์ด๋ฆ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ๊ฒฐ๊ณผ๋ก ๋๋ค. -
doAction์ด true๋ผ๋ฉด, โฆ
2.11. ๋์๊ณผ ๋ฐ์์ ์ฐจ์ด
์ด๋ฒคํธ๋ ๋์์ด ์๋๋ผ ๋ฐ์์ ๋ํ๋ธ๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด, ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ถํฐ์ ์๋ฆผ์ ๋ํ๋ด๋ฉฐ, ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์ดํ ์งํ ๋ฐฉํฅ์ ์ํฅ์ ์ฃผ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ค (์:
preventDefault()ํธ์ถ์ ํตํด). ์ด๋ฒคํธ๋ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋๊ธฐ ์์ํ๊ฒ ํ๋ ๋์์ด๋ ๊ฐ์์๋ก ์ฌ์ฉ๋์ด์๋ ์ ๋๋ค. ๊ทธ๊ฒ์ ์ด๋ฒคํธ์ ๋ชฉ์ ์ด ์๋๋ค.์ฌ๊ธฐ์ ์ด๋ฅผ ํน๋ณํ ์ธ๊ธํ๋ ์ด์ ๋, ์ด์ DOM ๋ฐ๋ณตํ๋ค์๋ ์ด๋ฒคํธ์ ์ฐ๊ด๋ "๊ธฐ๋ณธ ๋์"์ด๋ผ๋ ๊ฐ๋ ์ด ์์๊ณ , ๊ทธ๊ฒ์ด ์ฌ๋๋ค์๊ฒ ์์ ํ ์๋ชป๋ ์๊ฐ์ ์ฌ์ด ์ฃผ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฒคํธ๋ ๋์์ ๋ํ๋ด๊ฑฐ๋ ์ ๋ฐํ์ง ์์ผ๋ฉฐ, ์งํ ์ค์ธ ๋์์ ์ํฅ์ ์ฃผ๋ ๋ฐ์๋ง ์ฌ์ฉ๋ ์ ์๋ค.
3. ์งํ ์ค์ธ ์์ ์ค๋จ
ํ๋ผ๋ฏธ์ค์๋ ๋ด์ฅ๋ ์ค๋จ ๋ฉ์ปค๋์ฆ์ด ์์ง๋ง, ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ง์ API๋ ์ค๋จ ์๋ฏธ๋ก ์ ํ์๋ก ํ๋ค.
AbortController๋abort()๋ฉ์๋๋ฅผ ์ ๊ณตํ์ฌ ํด๋นAbortSignal๊ฐ์ฒด์ ์ํ๋ฅผ ํ ๊ธํจ์ผ๋ก์จ ์ด๋ฌํ ์๊ตฌ๋ฅผ ์ง์ํ๋ค. ์ค๋จ์ ์ง์ํ๊ณ ์ ํ๋ API๋AbortSignal๊ฐ์ฒด๋ฅผ ๋ฐ์ ๊ทธ ์ํ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋์์ ๊ฒฐ์ ํ ์ ์๋ค.AbortController๋ฅผ ์ฌ์ฉํ๋ API๋abort()ํธ์ถ ์, ํด๊ฒฐ๋์ง ์์ ํ๋ผ๋ฏธ์ค๋ฅผAbortSignal์ ์ค๋จ ์ด์ ๋ก rejectํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.๊ฐ์์
doAmazingness({ ... })๋ฉ์๋๋ ์ค๋จ์ ์ง์ํ๊ธฐ ์ํดAbortSignal๊ฐ์ฒด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ์ ์ ์๋ค:const controller= new AbortController(); const signal= controller. signal; startSpinner(); doAmazingness({ ..., signal}) . then( result=> ...) . catch ( err=> { if ( err. name== 'AbortError' ) return ; showUserErrorMessage(); }) . then(() => stopSpinner()); // โฆ controller. abort(); doAmazingness๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค:function doAmazingness({ signal}) { return new Promise(( resolve, reject) => { signal. throwIfAborted(); // ๋๋ผ์ด ์์ ์ ์์ํ๊ณ , ์๋ฃ ์ resolve(result)๋ฅผ ํธ์ถํ๋ค. // ๋ํ, ์๊ทธ๋์ ๊ฐ์ํ๋ค: signal. addEventListener( 'abort' , () => { // ๋๋ผ์ด ์์ ์ ์ค๋จํ๊ณ : reject( signal. reason); }); }); } ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฐํํ์ง ์๋ API๋ ๋๋ฑํ๊ฒ ๋ฐ์ํ๊ฑฐ๋
AbortSignal์ ์ค๋จ ์ด์ ๋ฅผ ๋ ธ์ถํ์ง ์์ ์๋ ์๋ค.addEventListener()๋ ํ์์ ์์์ด๋ค.๋ ์ธ๋ฐํ ์ ์ด๊ฐ ํ์ํ API๋
AbortController์AbortSignal๊ฐ์ฒด๋ฅผ ํ์์ ๋ฐ๋ผ ํ์ฅํ ์ ์๋ค.3.1. ์ธํฐํ์ด์ค
AbortController[Exposed=*]
interface {AbortController constructor (); [SameObject ]readonly attribute AbortSignal signal ;undefined abort (optional any ); };reason controller = new AbortController()- ์๋ก์ด controller๋ฅผ ๋ฐํํ๋ฉฐ, ๊ทธ
signal์ ์๋ก ์์ฑ๋AbortSignal๊ฐ์ฒด๋ก ์ค์ ๋๋ค. controller . signal- ์ด ๊ฐ์ฒด์ ์ฐ๊ด๋
AbortSignal๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. controller . abort(reason)- ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด reason์ด ์ด ๊ฐ์ฒด์
AbortSignal์ ์ค๋จ ์ด์ ์ ์ ์ฅ๋๊ณ , ๊ด๋ จ ์์ ์ด ์ค๋จ๋์ด์ผ ํจ์ ๊ด์ฐฐ์์๊ฒ ์๋ฆฐ๋ค. reason์ด undefined๋ผ๋ฉด, "AbortError"DOMException์ด ์ ์ฅ๋๋ค.
AbortController๊ฐ์ฒด๋ signal (์ฆ,AbortSignal๊ฐ์ฒด)์ ๊ฐ์ง๋ค.new AbortController()์์ฑ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
signal์ ์๋ก์ด
AbortSignal๊ฐ์ฒด๋ก ํ๋ค.
signalgetter ๋จ๊ณ๋ this์ signal์ ๋ฐํํ๋ค.abort(reason)๋ฉ์๋ ๋จ๊ณ๋ signal abort๋ฅผ this์ reason์ผ๋ก ์คํํ๋ค(์ฃผ์ด์ก์ ๊ฒฝ์ฐ).signal abort๋ฅผ
AbortControllercontroller์ ์ ํ์ reason์ผ๋ก ์คํํ๋ ค๋ฉด, signal abort๋ฅผ controller์ signal๊ณผ reason์ผ๋ก ์คํํ๋ค(์ฃผ์ด์ก์ ๊ฒฝ์ฐ).3.2. ์ธํฐํ์ด์ค
AbortSignal[Exposed=*]
interface :AbortSignal EventTarget { [NewObject ]static AbortSignal abort (optional any ); [reason Exposed =(Window ,Worker ),NewObject ]static AbortSignal timeout ([EnforceRange ]unsigned long long ); [milliseconds NewObject ]static AbortSignal _any (sequence <AbortSignal >);signals readonly attribute boolean aborted ;readonly attribute any reason ;undefined throwIfAborted ();attribute EventHandler onabort ; };AbortSignal . abort(reason)AbortSignal์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ฉฐ, ์ค๋จ ์ด์ ๊ฐ reason์ผ๋ก ์ค์ ๋๋ค(์ ์๋์ง ์์ ๊ฒฝ์ฐ ์ ์ธ); ๊ทธ๋ ์ง ์์ผ๋ฉด "AbortError"DOMException์ด ์ค์ ๋๋ค.AbortSignal . any(signals)AbortSignal์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ฉฐ, signals ์ค ํ๋๋ผ๋ ์ค๋จ๋๋ฉด ํด๋น ์ธ์คํด์ค๋ ์ค๋จ๋๋ค. ์ค๋จ ์ด์ ๋ ์ค๋จ์ ์ ๋ฐํ signals ์ค ํ๋์ ์ด์ ๋ก ์ค์ ๋๋ค.AbortSignal . timeout(milliseconds)AbortSignal์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ฉฐ, milliseconds ๋ฐ๋ฆฌ์ด ํ ์ค๋จ๋๋ค. ์ค๋จ ์ด์ ๋ "TimeoutError"DOMException์ผ๋ก ์ค์ ๋๋ค.signal . aborted- signal์
AbortController๊ฐ ์ค๋จ์ ์๋ ธ์ผ๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํ๋ค. signal . reason- signal์ ์ค๋จ ์ด์ ๋ฅผ ๋ฐํํ๋ค.
signal . throwIfAborted()- signal์ ์ค๋จ ์ด์ ๋ฅผ ๋์ง๋ค. signal์
AbortController๊ฐ ์ค๋จ์ ์๋ ธ์ ๋๋ง ๋์ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฌด ๊ฒ๋ ํ์ง ์๋๋ค.
AbortSignal๊ฐ์ฒด๋ ์ฐ๊ด๋ ์ค๋จ ์ด์ (JavaScript ๊ฐ)๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๊ธฐ๊ฐ์ undefined์ด๋ค.AbortSignal๊ฐ์ฒด๋ ์ฐ๊ด๋ ์ค๋จ ์๊ณ ๋ฆฌ์ฆ(์ค๋จ๋ ๋ ์คํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์งํฉ)์ ๊ฐ์ง๋ฉฐ, ์ด๊ธฐ์๋ ๋น์ด ์๋ค.์ค๋จ ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์กํ ์๊ตฌ์ฌํญ์ ๊ฐ์ง API๊ฐ
abort()์ ํฉ๋ฆฌ์ ์ผ๋ก ๋ฐ์ํ ์ ์๊ฒ ํด์ค๋ค. ์๋ฅผ ๋ค์ด, ํน์ API์ ์ค๋จ ์ด์ ๋ ์๋น์ค ์์ปค์ ๊ฐ์ ์ค๋ ๋ ๊ฐ ํ๊ฒฝ์ผ๋ก ์ ํ๋์ด์ผ ํ ์ ์๋ค.AbortSignal๊ฐ์ฒด๋ ์์กด์ ์ธ(๋ถ๋ฆฌ์ธ ๊ฐ) ์์ฑ์ ๊ฐ์ง๋ฉฐ, ์ด๊ธฐ๊ฐ์ false์ด๋ค.AbortSignal๊ฐ์ฒด๋ ์ฐ๊ด๋ ์์ค ์ ํธ(๊ฐ์ฒด์ ์ค๋จ๋ ์ํ์ ์์กดํ๋AbortSignal๊ฐ์ฒด์ ์ฝํ ์งํฉ)๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๊ธฐ์๋ ๋น์ด ์๋ค.AbortSignal๊ฐ์ฒด๋ ์ฐ๊ด๋ ์์กด ์ ํธ(๊ฐ์ฒด์ ์ค๋จ๋ ์ํ์ ์์กดํ๋AbortSignal๊ฐ์ฒด์ ์ฝํ ์งํฉ)๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๊ธฐ์๋ ๋น์ด ์๋ค.
์ ์
abort(reason)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
signal์ ์๋ก์ด
AbortSignal๊ฐ์ฒด๋ก ํ๋ค. -
signal์ ์ค๋จ ์ด์ ๋ฅผ reason์ด ์ฃผ์ด์ก์ผ๋ฉด ๊ทธ๊ฒ์ผ๋ก ์ค์ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ก์ด "
AbortError"DOMException์ผ๋ก ์ค์ ํ๋ค. - signal์ ๋ฐํํ๋ค.
์ ์
timeout(milliseconds)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
signal์ ์๋ก์ด
AbortSignal๊ฐ์ฒด๋ก ํ๋ค. -
global์ signal์ ๊ด๋ จ ์ ์ญ ๊ฐ์ฒด๋ก ํ๋ค.
-
ํ์์์ ํ ๋จ๊ณ ์คํ์ global, "
AbortSignal-timeout", milliseconds, ๊ทธ๋ฆฌ๊ณ ๋ค์ ๋จ๊ณ์ ํจ๊ป ์คํํ๋ค:-
์ ์ญ ํ์คํฌ ํ์ ์ถ๊ฐ๋ฅผ ํ์ด๋จธ ํ์คํฌ ์์ค์ global๊ณผ ํจ๊ป ์คํํ์ฌ, ์ค๋จ ์ ํธ๋ฅผ signal๊ณผ ์๋ก์ด "
TimeoutError"DOMException์ผ๋ก ๋ณด๋ธ๋ค.
์ด ํ์์์ ๊ธฐ๊ฐ ๋์, signal์
abort์ด๋ฒคํธ์ ๋ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋ฑ๋ก๋์ด ์๋ค๋ฉด, global์์ signal๋ก์ ๊ฐํ ์ฐธ์กฐ๊ฐ ์์ด์ผ ํ๋ค. -
-
signal์ ๋ฐํํ๋ค.
์ ์
any(signals)๋ฉ์๋ ๋จ๊ณ๋ ์์กด์ ์ธ ์ค๋จ ์ ํธ ์์ฑ์ signals๋ก๋ถํฐAbortSignal๊ณผ ํ์ฌ realm์ ์ฌ์ฉํ์ฌ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.abortedgetter ๋จ๊ณ๋ this๊ฐ ์ค๋จ๋์๋ค๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.reasongetter ๋จ๊ณ๋ this์ ์ค๋จ ์ด์ ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.throwIfAborted()๋ฉ์๋ ๋จ๊ณ๋ this๊ฐ ์ค๋จ๋์๋ค๋ฉด this์ ์ค๋จ ์ด์ ๋ฅผ ๋์ง๋ ๊ฒ์ด๋ค.์ด ๋ฉ์๋๋
AbortSignal์ ๋ฐ๋ ํจ์๊ฐAbortSignal์ ๋ค๋ฅธ ๋ฉ์๋์ ์ ๋ฌํ๋ ๋์ ํน์ ์ฒดํฌํฌ์ธํธ์์ ์์ธ๋ฅผ ๋์ง๊ฑฐ๋(๋๋ ๊ฑฐ๋ถ๋ ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฐํ) ์ถ์ ๋ ์ฃผ๋ก ์ ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ํจ์๋ ์กฐ๊ฑด ํด๋ง ์๋ ์ฌ์ด์ ์ค๋จ์ ํ์ฉํ๋ค. ์ด๋ ์ค์ ๋น๋๊ธฐ ์์ (์ฆ,)์ดawait func() AbortSignal์ ๋ฐ์ง ์๋๋ผ๋ ํด๋ง ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ ๊ธฐํ๋ฅผ ์ ๊ณตํ๋ค.async function waitForCondition( func, targetValue, { signal} = {}) { while ( true ) { signal? . throwIfAborted(); const result= await func(); if ( result=== targetValue) { return ; } } } onabort์์ฑ์onabort์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ IDL ์์ฑ์ด๋ฉฐ, ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ด๋ฒคํธ ํ์ ์abort์ด๋ค.AbortSignal๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ํด๋นAbortController๊ฐ์ฒด์ ์๋๋ฅผ ๋ํ๋ด์ง๋ง,AbortSignal๊ฐ์ฒด๋ฅผ ๊ด์ฐฐํ๋ API๋ ์ด๋ฅผ ๋ฌด์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ์์ ์ด ์ด๋ฏธ ์๋ฃ๋ ๊ฒฝ์ฐ์ด๋ค.
AbortSignal๊ฐ์ฒด๋ ๊ทธ ์ค๋จ ์ด์ ๊ฐ undefined๊ฐ ์๋ ๋ ์ค๋จ๋ ๊ฒ์ด๋ค.์๊ณ ๋ฆฌ์ฆ algorithm์
AbortSignal๊ฐ์ฒด signal์ ์ถ๊ฐํ๋ ค๋ฉด:-
signal์ด ์ค๋จ๋์๋ค๋ฉด, ๋ฐํํ๋ค.
-
algorithm์ signal์ ์ค๋จ ์๊ณ ๋ฆฌ์ฆ์ ์ถ๊ฐํ๋ค.
์๊ณ ๋ฆฌ์ฆ algorithm์
AbortSignalsignal์์ ์ ๊ฑฐํ๋ ค๋ฉด, algorithm์ signal์ ์ค๋จ ์๊ณ ๋ฆฌ์ฆ์์ ์ ๊ฑฐํ๋ค.AbortSignal๊ฐ์ฒด signal๊ณผ ์ ํ์ reason์ด ์ฃผ์ด์ก์ ๋, ์ค๋จ ์ ํธ๋ฅผ ๋ณด๋ด๋ ค๋ฉด:-
signal์ด ์ค๋จ๋์๋ค๋ฉด, ๋ฐํํ๋ค.
-
signal์ ์ค๋จ ์ด์ ๋ฅผ reason์ด ์ฃผ์ด์ก์ผ๋ฉด ๊ทธ๊ฒ์ผ๋ก ์ค์ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ก์ด "
AbortError"DOMException์ผ๋ก ์ค์ ํ๋ค. -
dependentSignalsToAbort๋ฅผ ์๋ก์ด ๋ฆฌ์คํธ๋ก ํ๋ค.
-
signal์ ์์กด ์ ํธ์ ๊ฐ dependentSignal์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
dependentSignal์ด ์ค๋จ๋์ง ์์๋ค๋ฉด:
-
dependentSignal์ ์ค๋จ ์ด์ ๋ฅผ signal์ ์ค๋จ ์ด์ ๋ก ์ค์ ํ๋ค.
-
dependentSignal์ dependentSignalsToAbort์ ์ถ๊ฐํ๋ค.
-
-
-
signal์ ๋ํด ์ค๋จ ๋จ๊ณ๋ฅผ ์คํํ๋ค.
-
dependentSignalsToAbort์ ๊ฐ dependentSignal์ ๋ํด ๋ฐ๋ณตํ๋ฉฐ, dependentSignal์ ๋ํด ์ค๋จ ๋จ๊ณ๋ฅผ ์คํํ๋ค.
AbortSignalsignal์ ๋ํด ์ค๋จ ๋จ๊ณ ์คํํ๋ ค๋ฉด:-
signal์ ์ค๋จ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ algorithm์ ๋ํด ๋ฐ๋ณตํ๋ฉฐ algorithm์ ์คํํ๋ค.
-
signal์ ์ค๋จ ์๊ณ ๋ฆฌ์ฆ์ ๋น์ด๋ค.
-
abort๋ผ๋ ์ด๋ฆ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.
AbortSignal๊ฐ์ฒด ๋ชฉ๋ก signals๋ก๋ถํฐ,AbortSignal๋๋ ์ด๋ฅผ ์์ํ๋ ์ธํฐํ์ด์ค์ฌ์ผ ํ๋ signalInterface์ realm์ ์ฌ์ฉํ์ฌ ์์กด์ ์ธ ์ค๋จ ์ ํธ ์์ฑํ๋ ค๋ฉด:-
resultSignal์ realm์ ์ฌ์ฉํ์ฌ signalInterface๋ฅผ ๊ตฌํํ๋ ์๋ก์ด ๊ฐ์ฒด๋ก ํ๋ค.
-
signals์ ๊ฐ signal์ ๋ํด ๋ฐ๋ณตํ๋ค: signal์ด ์ค๋จ๋์๋ค๋ฉด, resultSignal์ ์ค๋จ ์ด์ ๋ฅผ signal์ ์ค๋จ ์ด์ ๋ก ์ค์ ํ๊ณ resultSignal์ ๋ฐํํ๋ค.
-
resultSignal์ ์์กด์ ์ธ ์์ฑ์ true๋ก ์ค์ ํ๋ค.
-
signals์ ๊ฐ signal์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
signal์ ์์กด์ ์ธ ์์ฑ์ด false๋ผ๋ฉด:
-
signal์ resultSignal์ ์์ค ์ ํธ์ ์ถ๊ฐํ๋ค.
-
resultSignal์ signal์ ์์กด ์ ํธ์ ์ถ๊ฐํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, signal์ ์์ค ์ ํธ์ ๊ฐ sourceSignal์ ๋ํด ๋ฐ๋ณตํ๋ค:
-
๋จ์ธ: sourceSignal์ ์ค๋จ๋์ง ์์๊ณ ์์กด์ ์ด์ง ์๋ค.
-
sourceSignal์ resultSignal์ ์์ค ์ ํธ์ ์ถ๊ฐํ๋ค.
-
resultSignal์ sourceSignal์ ์์กด ์ ํธ์ ์ถ๊ฐํ๋ค.
-
-
-
resultSignal์ ๋ฐํํ๋ค.
3.2.1. ๊ฐ๋น์ง ์ปฌ๋ ์
์ค๋จ๋์ง ์์ ์์กด์ ์ธ
AbortSignal๊ฐ์ฒด๋ ์์ค ์ ํธ๊ฐ ๋น์ด์์ง ์๊ณabort์ด๋ฒคํธ์ ๋ํ ๋ฑ๋ก๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์๊ฑฐ๋ ์ค๋จ ์๊ณ ๋ฆฌ์ฆ์ด ๋น์ด์์ง ์์ ๋์์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ด์๋ ์ ๋๋ค.3.3. API์์
AbortController์AbortSignal๊ฐ์ฒด ์ฌ์ฉํ๊ธฐ์ค๋จ๋ ์ ์๋ ์์ ์ ๋ํ๋ด๊ธฐ ์ํด ํ๋ผ๋ฏธ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์น ํ๋ซํผ API๋ ๋ค์์ ์ค์ํด์ผ ํ๋ค:
signal๋์ ๋๋ฆฌ ๋ฉค๋ฒ๋ฅผ ํตํดAbortSignal๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค.AbortSignal๊ฐ์ฒด์ ์ค๋จ ์ด์ ๋ก ํ๋ผ๋ฏธ์ค๋ฅผ ๊ฑฐ๋ถํ์ฌ ์์ ์ด ์ค๋จ๋์์์ ์ ๋ฌํ๋ค.AbortSignal์ด ์ด๋ฏธ ์ค๋จ๋์๋ค๋ฉด ์ฆ์ ๊ฑฐ๋ถํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด:- ์ค๋จ ์๊ณ ๋ฆฌ์ฆ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ
AbortSignal๊ฐ์ฒด์ ๋ณ๊ฒฝ์ฌํญ์ ๊ด์ฐฐํ๋, ๋ค๋ฅธ ๊ด์ฐฐ์๋ค๊ณผ ์ถฉ๋ํ์ง ์๋ ๋ฐฉ์์ผ๋ก ํ๋ค.
ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
doAmazingness(options)์ ๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์๋ค:-
global์ this์ ๊ด๋ จ ์ ์ญ ๊ฐ์ฒด๋ก ํ๋ค.
-
p๋ฅผ ์๋ก์ด ํ๋ผ๋ฏธ์ค๋ก ํ๋ค.
-
options["
signal"]์ด ์กด์ฌํ๋ค๋ฉด:-
signal์ options["
signal"]๋ก ํ๋ค. -
signal์ด ์ค๋จ๋์๋ค๋ฉด, signal์ ์ค๋จ ์ด์ ๋ก p๋ฅผ ๊ฑฐ๋ถํ๊ณ p๋ฅผ ๋ฐํํ๋ค.
-
signal์ ๋ค์ ์ค๋จ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ๋ค:
-
๋๋ผ์ด ์ผ์ ๋ฉ์ถ๋ค.
-
signal์ ์ค๋จ ์ด์ ๋ก p๋ฅผ ๊ฑฐ๋ถํ๋ค.
-
-
-
๋ค์ ๋จ๊ณ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ค:
-
amazingResult๋ฅผ ๋๋ผ์ด ์ผ์ ์ํํ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
global๊ณผ ํจ๊ป ๋๋ผ์ด ํ์คํฌ ์์ค์์ ์ ์ญ ํ์คํฌ๋ฅผ ํ์ ์ถ๊ฐํ์ฌ amazingResult๋ก p๋ฅผ ์ดํํ๋ค.
-
-
p๋ฅผ ๋ฐํํ๋ค.
ํ๋ผ๋ฏธ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ API๋ ๊ฐ๋ฅํ ํ ์์ ๋ด์ฉ์ ์ค์ํด์ผ ํ๋ค.
4. ๋ ธ๋
4.1. "DOM" ์๊ฐ
์๋ ์๋ฏธ์์ "DOM"์ ๋ฌธ์(ํนํ HTML ๋ฐ XML ๋ฌธ์)์ ์ ๊ทผํ๊ณ ์กฐ์ํ๊ธฐ ์ํ API์ ๋๋ค. ์ด ๋ช ์ธ์์ "๋ฌธ์"๋ผ๋ ์ฉ์ด๋ ์งง์ ์ ์ ๋ฌธ์๋ถํฐ ํ๋ถํ ๋ฉํฐ๋ฏธ๋์ด๋ฅผ ๊ฐ์ง ๊ธด ์์ธ์ด ๋๋ ๋ณด๊ณ ์, ๊ทธ๋ฆฌ๊ณ ์์ ํ ์ธํฐ๋ํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ๊น์ง ๋ชจ๋ ๋งํฌ์ ๊ธฐ๋ฐ ๋ฆฌ์์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด๋ฌํ ๊ฐ ๋ฌธ์๋ ๋ ธ๋ ํธ๋ฆฌ๋ก ํํ๋ฉ๋๋ค. ๋ ธ๋ ์ค ์ผ๋ถ๋ ํธ๋ฆฌ์์ ์์์ ๊ฐ์ง ์ ์๊ณ , ๋ค๋ฅธ ๋ ธ๋๋ ํญ์ ๋ฆฌํ(๋)์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ HTML ๋ฌธ์๋ฅผ ์๊ฐํด๋ณด์ธ์:
<!DOCTYPE html> < html class = e > < head >< title > Aliens?</ title ></ head > < body > Why yes.</ body > </ html > ์ด ๋ฌธ์๋ ๋ค์๊ณผ ๊ฐ์ด ํํ๋ฉ๋๋ค:
HTML ํ์ฑ์ ๋ง๋ฒ ๋๋ถ์ ๋ชจ๋ ASCII ๊ณต๋ฐฑ์ด
Text๋ ธ๋๋ก ๋ณํ๋๋ ๊ฒ์ ์๋์ง๋ง, ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ ๋ถ๋ช ํฉ๋๋ค. ๋งํฌ์ ์ด ๋ค์ด๊ฐ๊ณ , ํธ๋ฆฌ์ ๋ ธ๋๊ฐ ์์ฑ๋ฉ๋๋ค.์์ฃผ ํ๋ฅญํ Live DOM Viewer ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ด์ฉ์ ๋ ์์ธํ ํ์ํ ์ ์์ต๋๋ค.
4.2. ๋ ธ๋ ํธ๋ฆฌ
๋ ธ๋๋
Node๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด์ด๋ค. ๋ ธ๋๋ ๋ ธ๋ ํธ๋ฆฌ๋ก ์๋ ค์ง ํธ๋ฆฌ์ ์ฐธ์ฌํ๋ค.์ค์ ๋ก๋ ๋ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฌ๋ค.
Node๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ์์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ๋ค:Document,DocumentType,DocumentFragment,Element,CharacterData, ๋๋Attr.DocumentFragment๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ๋๋กShadowRoot๋ฅผ ๊ตฌํํ๋ค.Element๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ๋ํ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.HTMLAnchorElement.CharacterData๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ์์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ๋ค:Text,ProcessingInstruction, ๋๋Comment.Text๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ๋๋กCDATASection์ ๊ตฌํํ๋ค.๋ฐ๋ผ์ ๋ชจ๋ ๋ ธ๋์ ์ฃผ ์ธํฐํ์ด์ค๋ ๋ค์ ์ค ํ๋๋ค:
Document,DocumentType,DocumentFragment,ShadowRoot,Element๋๋Element์ ์์๋ ์ธํฐํ์ด์ค,Attr,Text,CDATASection,ProcessingInstruction, ๋๋Comment.๊ฐ๊ฒฐํจ์ ์ํด, ์ด ๋ช ์ธ๋
Node์ ์์๋ ์ธํฐํ์ด์คNodeInterface๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ฅผNodeInterface๋ ธ๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.๋ ธ๋ ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฝ๋๋ฉฐ, ์ด๋ ๋ ธ๋์ ๊ทธ ๊ฐ๋ฅํ ์์ ๊ฐ์ ๊ด๊ณ๋ก ํํ๋๋ค:
Document-
ํธ๋ฆฌ ์์์์:
-
0๊ฐ ์ด์์
ProcessingInstruction๋๋Comment๋ ธ๋. -
์ ํ์ ์ผ๋ก ํ๋์
DocumentType๋ ธ๋. -
0๊ฐ ์ด์์
ProcessingInstruction๋๋Comment๋ ธ๋. -
0๊ฐ ์ด์์
ProcessingInstruction๋๋Comment๋ ธ๋.
-
DocumentFragmentElement-
0๊ฐ ์ด์์
Element๋๋CharacterData๋ ธ๋. DocumentTypeCharacterDataAttr-
์์ ์์.
Attr๋ ธ๋๋ ์ญ์ฌ์ ์ธ ์ด์ ๋ก ํธ๋ฆฌ์ ์ฐธ์ฌํฉ๋๋ค. ์ด๋ค์ (null์ด ์๋) ๋ถ๋ชจ๋ ์ด๋ ํ ์์๋ ๊ฐ์ง์ง ์์ผ๋ฏ๋ก ํธ๋ฆฌ์์ ํ๋ก ์กด์ฌํฉ๋๋ค.๋ ธ๋ node์ ๊ธธ์ด๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค:
-
node๊ฐ
DocumentType๋๋Attr๋ ธ๋์ด๋ฉด 0์ ๋ฐํํฉ๋๋ค. -
node๊ฐ
CharacterData๋ ธ๋์ด๋ฉด, node์ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ฅผ ๋ฐํํฉ๋๋ค. -
node์ ์์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
๋ ธ๋๋ ๊ทธ ๋น์ด ์์์ด ๊ธธ์ด๊ฐ 0์ด๋ฉด ์ฑ๋ฆฝํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
4.2.1. ๋ฌธ์ ํธ๋ฆฌ
๋ฌธ์ ํธ๋ฆฌ๋ ๋ ธ๋ ํธ๋ฆฌ์ด๋ฉฐ, ๊ทธ ๋ฃจํธ๋ ๋ฌธ์์ ๋๋ค.
๋ฌธ์์ ๋ฌธ์ ์์๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๊ทธ ๋ฌธ์๋ฅผ ๋ถ๋ชจ๋ก ํ๋ ์์์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋๋ค.
๋ ธ๋ ํธ๋ฆฌ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ, ์ด๋ฌํ ์์๋ ํ๋๋ง ์กด์ฌํ ์ ์์ต๋๋ค.
๋ ธ๋๋ ๊ทธ ๋ฃจํธ๊ฐ ๋ฌธ์์ด๋ฉด ๋ฌธ์ ํธ๋ฆฌ ์์ ์์ต๋๋ค.
๋ ธ๋๋ ๋ฌธ์ ํธ๋ฆฌ ์์ ์์ผ๋ฉด ๋ฌธ์ ์์ ์์ต๋๋ค. ๋ฌธ์ ์์๋ผ๋ ์ฉ์ด๋ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ก ๋์ด ์์ต๋๋ค. ์ด ์ฉ์ด๊ฐ ์ฌ์ฉ๋๊ณ ์๋ค๋ ๊ฒ์ ํด๋น ํ์ค์ด ์๋ ํธ๋ฆฌ๋ฅผ ๊ณ ๋ คํ๋๋ก ์์ง ์ ๋ฐ์ดํธ๋์ง ์์์์ ๋ํ๋ ๋๋ค.
4.2.2. ์๋ ํธ๋ฆฌ
์๋ ํธ๋ฆฌ๋ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ธ ๋ ธ๋ ํธ๋ฆฌ์ด๋ค.
์๋ ๋ฃจํธ๋ ๊ทธ ํธ์คํธ๋ฅผ ํตํด ํญ์ ๋ค๋ฅธ ๋ ธ๋ ํธ๋ฆฌ์ ์ฐ๊ฒฐ๋๋ค. ๋ฐ๋ผ์ ์๋ ํธ๋ฆฌ๋ ํผ์ ์์ง ์๋๋ค. ์๋ ๋ฃจํธ์ ํธ์คํธ์ ๋ ธ๋ ํธ๋ฆฌ๋ ๋๋๋ก ๋ผ์ดํธ ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
์๋ ํธ๋ฆฌ์ ๋์ํ๋ ๋ผ์ดํธ ํธ๋ฆฌ๋ ๊ทธ ์์ฒด๋ก ์๋ ํธ๋ฆฌ์ผ ์ ์๋ค.
๋ ธ๋๋ ๊ทธ ์๋ ํฌํจ ๋ฃจํธ๊ฐ ๋ฌธ์์ผ ๋ ์ฐ๊ฒฐ๋์๋ค๊ณ ํ๋ค.
4.2.2.1. ์ฌ๋กฏ
์๋ ํธ๋ฆฌ๋ ์ฌ๋กฏ์ธ 0๊ฐ ์ด์์ ์์๋ฅผ ํฌํจํ๋ค.
์ฌ๋กฏ์ HTML์
slot์์๋ฅผ ํตํด์๋ง ์์ฑ๋ ์ ์๋ค.์ฌ๋กฏ์ ์ฐ๊ด๋ ์ด๋ฆ(๋ฌธ์์ด)์ ๊ฐ์ง๋ค. ๋ฌ๋ฆฌ ๋ช ์๋์ง ์๋ ํ ๋น ๋ฌธ์์ด์ด๋ค.
์ฌ๋กฏ์ ์ด๋ฆ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๋ค์ ์์ฑ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ๋ค:
-
element๊ฐ ์ฌ๋กฏ์ด๊ณ , localName์ด
name์ด๋ฉฐ, namespace๊ฐ null์ด๋ผ๋ฉด:-
value๊ฐ oldValue์ ๊ฐ๋ค๋ฉด, ๋ฐํํ๋ค.
-
value๊ฐ null์ด๊ณ oldValue๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, ๋ฐํํ๋ค.
-
value๊ฐ ๋น ๋ฌธ์์ด์ด๊ณ oldValue๊ฐ null์ด๋ผ๋ฉด, ๋ฐํํ๋ค.
-
value๊ฐ null์ด๊ฑฐ๋ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, element์ ์ด๋ฆ์ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, element์ ์ด๋ฆ์ value๋ก ์ค์ ํ๋ค.
-
element์ ๋ฃจํธ์ ํจ๊ป ํธ๋ฆฌ์ ๋ํ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ํ ๋น์ ์คํํ๋ค.
-
์๋ ํธ๋ฆฌ์์ ํธ๋ฆฌ ์์๋ก ์ฒซ ๋ฒ์งธ ์ฌ๋กฏ์ด๊ณ ์ด๋ฆ์ด ๋น ๋ฌธ์์ด์ธ ๊ฒ์ ๋๋๋ก "๊ธฐ๋ณธ ์ฌ๋กฏ"์ผ๋ก ์๋ ค์ ธ ์๋ค.
์ฌ๋กฏ์ ์ฐ๊ด๋ ํ ๋น๋ ๋ ธ๋(์ฌ๋กฏ ๊ฐ๋ฅํ ์์์ ๋ชฉ๋ก)๋ฅผ ๊ฐ์ง๋ค. ๋ฌ๋ฆฌ ๋ช ์๋์ง ์๋ ํ ๋น์ด์๋ค.
4.2.2.2. ์ฌ๋กฏ ๊ฐ๋ฅํ ์์
Element์Text๋ ธ๋๋ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์์ด๋ค.์ฌ๋กฏ์ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์๊ฐ ๋ ์ ์๋ค.
์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ ์ฐ๊ด๋ ์ด๋ฆ(๋ฌธ์์ด)์ ๊ฐ์ง๋ค. ๋ฌ๋ฆฌ ๋ช ์๋์ง ์๋ ํ ๋น ๋ฌธ์์ด์ด๋ค.
์ฌ๋กฏ ๊ฐ๋ฅํ ์์์ ์ด๋ฆ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๋ค์ ์์ฑ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ๋ค:
-
localName์ด
slot์ด๊ณ namespace๊ฐ null์ด๋ผ๋ฉด:-
value๊ฐ oldValue์ ๊ฐ๋ค๋ฉด, ๋ฐํํ๋ค.
-
value๊ฐ null์ด๊ณ oldValue๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, ๋ฐํํ๋ค.
-
value๊ฐ ๋น ๋ฌธ์์ด์ด๊ณ oldValue๊ฐ null์ด๋ผ๋ฉด, ๋ฐํํ๋ค.
-
value๊ฐ null์ด๊ฑฐ๋ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, element์ ์ด๋ฆ์ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, element์ ์ด๋ฆ์ value๋ก ์ค์ ํ๋ค.
-
element๊ฐ ํ ๋น๋์๋ค๋ฉด, element์ ํ ๋น๋ ์ฌ๋กฏ์ ๋ํด ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ํ ๋น์ ์คํํ๋ค.
-
element์ ๋ํด ์ฌ๋กฏ ํ ๋น์ ์คํํ๋ค.
-
์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ ์ฐ๊ด๋ ํ ๋น๋ ์ฌ๋กฏ(null ๋๋ ์ฌ๋กฏ)์ ๊ฐ์ง๋ค. ๋ฌ๋ฆฌ ๋ช ์๋์ง ์๋ ํ null์ด๋ค. ์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ ๊ทธ ํ ๋น๋ ์ฌ๋กฏ์ด non-null์ผ ๋ ํ ๋น๋์๋ค๊ณ ํ๋ค.
์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ ์ฐ๊ด๋ ์๋ ์ฌ๋กฏ ํ ๋น(null ๋๋ ์ฌ๋กฏ)์ ๊ฐ์ง๋ค. ๋ฌ๋ฆฌ ๋ช ์๋์ง ์๋ ํ null์ด๋ค.
์ฌ๋กฏ ๊ฐ๋ฅํ ์์์ ์๋ ์ฌ๋กฏ ํ ๋น์ ์ด ๋ณ์๊ฐ ์คํฌ๋ฆฝํธ์์ ์ง์ ์ ๊ทผ ๊ฐ๋ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋กฏ์ ๋ํ ์ฝํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ์ ์๋ค.
4.2.2.3. ์ฌ๋กฏ๊ณผ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ์ฐพ๊ธฐ
์ฃผ์ด์ง ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ slottable๊ณผ ์ ํ์ ๋ถ๋ฆฌ์ธ open(๊ธฐ๋ณธ๊ฐ false)์ ๋ํด ์ฌ๋กฏ ์ฐพ๊ธฐ๋ฅผ ํ๋ ค๋ฉด:
-
slottable์ ๋ถ๋ชจ๊ฐ null์ด๋ผ๋ฉด, null์ ๋ฐํํ๋ค.
-
shadow๋ฅผ slottable์ ๋ถ๋ชจ์ ์๋ ๋ฃจํธ๋ก ํ๋ค.
-
shadow๊ฐ null์ด๋ผ๋ฉด, null์ ๋ฐํํ๋ค.
-
open์ด true์ด๊ณ shadow์ ๋ชจ๋๊ฐ "
open"์ด ์๋๋ผ๋ฉด, null์ ๋ฐํํ๋ค. -
shadow์ ์ฌ๋กฏ ํ ๋น์ด "
manual"์ด๋ผ๋ฉด, shadow์ ํ์ ์ค ์๋์ผ๋ก ํ ๋น๋ ๋ ธ๋๊ฐ slottable์ ํฌํจํ๋ ์ฌ๋กฏ์ ๋ฐํํ๋ค. ์๋ค๋ฉด; ๊ทธ๋ ์ง ์์ผ๋ฉด null. -
shadow์ ํ์ ์ค ํธ๋ฆฌ ์์๋ก ์ฒซ ๋ฒ์งธ์ด๋ฉฐ ์ด๋ฆ์ด slottable์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ฌ๋กฏ์ ๋ฐํํ๋ค. ์๋ค๋ฉด; ๊ทธ๋ ์ง ์์ผ๋ฉด null.
์ฃผ์ด์ง ์ฌ๋กฏ slot์ ๋ํด ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ์ฐพ๊ธฐ๋ฅผ ํ๋ ค๋ฉด:
-
result๋ฅผ ยซ ยป๋ก ํ๋ค.
-
root๋ฅผ slot์ ๋ฃจํธ๋ก ํ๋ค.
-
root๊ฐ ์๋ ๋ฃจํธ๊ฐ ์๋๋ผ๋ฉด, result๋ฅผ ๋ฐํํ๋ค.
-
host๋ฅผ root์ ํธ์คํธ๋ก ํ๋ค.
-
root์ ์ฌ๋กฏ ํ ๋น์ด "
manual"์ด๋ผ๋ฉด:-
slot์ ์๋์ผ๋ก ํ ๋น๋ ๋ ธ๋์ ๊ฐ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ slottable์ ๋ํด ๋ฐ๋ณตํ๋ฉฐ, ๋ง์ฝ slottable์ ๋ถ๋ชจ๊ฐ host๋ผ๋ฉด, slottable์ result์ ์ถ๊ฐํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, host์ ๊ฐ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ์์ slottable์ ๋ํด ํธ๋ฆฌ ์์๋ก:
-
foundSlot์ slottable์ ์ฃผ์ด์ ์ฌ๋กฏ์ ์ฐพ์ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
foundSlot์ด slot์ด๋ผ๋ฉด, slottable์ result์ ์ถ๊ฐํ๋ค.
-
-
result๋ฅผ ๋ฐํํ๋ค.
์ฃผ์ด์ง ์ฌ๋กฏ slot์ ๋ํด ํ๋ฉดํ๋ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ์ฐพ๊ธฐ๋ฅผ ํ๋ ค๋ฉด:
-
result๋ฅผ ยซ ยป๋ก ํ๋ค.
-
slot์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ๊ฐ ์๋๋ผ๋ฉด, result๋ฅผ ๋ฐํํ๋ค.
-
slottables๋ฅผ slot์ ์ฃผ์ด์ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ฅผ ์ฐพ์ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
slottables๊ฐ ๋น ๋ชฉ๋ก์ด๋ผ๋ฉด, slot์ ๊ฐ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ์์์ ํธ๋ฆฌ ์์๋ก slottables์ ์ถ๊ฐํ๋ค.
-
slottables์ ๊ฐ node์ ๋ํด:
-
node๊ฐ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ธ ์ฌ๋กฏ์ด๋ผ๋ฉด:
-
temporaryResult๋ฅผ node๋ฅผ ์ฃผ์ด์ ํ๋ฉดํ๋ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ฅผ ์ฐพ์ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
temporaryResult์ ๊ฐ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ฅผ ์์๋๋ก result์ ์ถ๊ฐํ๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, node๋ฅผ result์ ์ถ๊ฐํ๋ค.
-
-
result๋ฅผ ๋ฐํํ๋ค.
4.2.2.4. ์ฌ๋กฏ ๊ฐ๋ฅํ ์์์ ์ฌ๋กฏ ํ ๋น
์ฌ๋กฏ slot์ ๋ํด ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ํ ๋น์ ํ๋ ค๋ฉด:
-
slottables๋ฅผ slot์ ๋ํด ์ฌ๋กฏ ๊ฐ๋ฅํ ์์๋ฅผ ์ฐพ์ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
slottables์ slot์ ํ ๋น๋ ๋ ธ๋๊ฐ ๋์ผํ์ง ์๋ค๋ฉด, slot์ ๋ํด ์ฌ๋กฏ ๋ณ๊ฒฝ ์ ํธ๋ฅผ ์คํํ๋ค.
-
slot์ ํ ๋น๋ ๋ ธ๋๋ฅผ slottables๋ก ์ค์ ํ๋ค.
-
slottables์ ๊ฐ slottable์ ๋ํด: slottable์ ํ ๋น๋ ์ฌ๋กฏ์ slot์ผ๋ก ์ค์ ํ๋ค.
์ฃผ์ด์ง ๋ ธ๋ root์ ๋ํด ํธ๋ฆฌ์ ๋ํ ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ํ ๋น์ ํ๋ ค๋ฉด, root์ ํฌํจ ํ์์ ๊ฐ ์ฌ๋กฏ์ ๋ํด ํธ๋ฆฌ ์์๋ก ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ํ ๋น์ ์คํํ๋ค.
์ฃผ์ด์ง ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ slottable์ ๋ํด ์ฌ๋กฏ ํ ๋น์ ํ๋ ค๋ฉด:
-
slot์ slottable๊ณผ ํจ๊ป ์ฌ๋กฏ์ ์ฐพ์ ๊ฒฐ๊ณผ๋ก ํ๋ค.
-
slot์ด non-null์ด๋ผ๋ฉด, slot์ ๋ํด ์ฌ๋กฏ ๊ฐ๋ฅํ ์์ ํ ๋น์ ์คํํ๋ค.
4.2.2.5. ์ฌ๋กฏ ๋ณ๊ฒฝ ์ ํธ
๊ฐ ์ ์ฌ ์ถ์ฒ ์๋์ฐ ์์ด์ ํธ๋ ์ ํธ ์ฌ๋กฏ(์ฌ๋กฏ์ ์งํฉ)์ ๊ฐ์ง๋ฉฐ, ์ด๋ ์ด๊ธฐ์ ๋น์ด์๋ค. [HTML]
์ฌ๋กฏ slot์ ๋ํด ์ฌ๋กฏ ๋ณ๊ฒฝ ์ ํธ๋ฅผ ํ๋ ค๋ฉด:
-
slot์ slot์ ๊ด๋ จ ์์ด์ ํธ์ ์ ํธ ์ฌ๋กฏ์ ์ถ๊ฐํ๋ค.
-
๋ฎคํ ์ด์ ์ต์ ๋ฒ ์ปดํ์ด๋ ๋ง์ดํฌ๋กํ์คํฌ๋ฅผ ํ์ ์ถ๊ฐํ๋ค.
4.2.3. ๋ณ๊ฒฝ ์๊ณ ๋ฆฌ์ฆ
์ฃผ์ด์ง ๋ ธ๋ node, ๋ ธ๋ parent, null ๋๋ ๋ ธ๋ child, ๊ทธ๋ฆฌ๊ณ ๋ชฉ๋ก์ธ ๋ ธ๋ childrenToExclude์ ๋ํด ์ฌ์ ์ฝ์ ์ ํจ์ฑ์ ๋ณด์ฅํ๋ ค๋ฉด:
-
parent๊ฐ
Document,DocumentFragment, ๋๋Element๋ ธ๋๊ฐ ์๋๋ฉด, "HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
node๊ฐ parent์ ํธ์คํธ๋ฅผ ํฌํจํ๋ ํฌ๊ด์ ์กฐ์์ด๋ฉด, "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
child๊ฐ null์ด ์๋๊ณ ๊ทธ ๋ถ๋ชจ๊ฐ parent๊ฐ ์๋๋ฉด, "
NotFoundError"DOMException์ ๋์ง๋๋ค. -
node๊ฐ
DocumentFragment,DocumentType,Element, ๋๋CharacterData๋ ธ๋๊ฐ ์๋๋ฉด, "HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
parent๊ฐ ๋ฌธ์๊ฐ ์๋๋ฉด:
-
node๊ฐ doctype์ด๋ฉด, "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
๋ฐํํฉ๋๋ค.
-
-
node๊ฐ
Text๋ ธ๋์ด๋ฉด, "HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
node๊ฐ
CharacterData๋ ธ๋์ด๋ฉด ๋ฐํํฉ๋๋ค. -
node๊ฐ
DocumentFragment๋ ธ๋์ด๋ฉด:-
node์ ๋ ์ด์์ ์์ ์์์ด ์๊ฑฐ๋
Text๋ ธ๋ ์์์ด ์์ผ๋ฉด, "HierarchyRequestError"DOMException์ ๋์ง๋๋ค.
-
-
node๊ฐ
DocumentFragment๋๋Element๋ ธ๋์ด๋ฉด:-
๋ค์ ์ค ํ๋๋ผ๋ ์ฐธ์ด๋ฉด:
-
parent์ childrenToExclude๊ฐ ํฌํจํ์ง ์๋ ์์ ์์์ด ์๋ ๊ฒฝ์ฐ;
-
child๊ฐ null์ด ์๋๊ณ doctype์ด child์ ๋ค์ ์ค๋ ๊ฒฝ์ฐ; ๋๋
-
child๊ฐ childrenToExclude๊ฐ ํฌํจํ์ง ์๋ doctype์ธ ๊ฒฝ์ฐ,
-
-
๋ฐํํฉ๋๋ค.
-
-
๋ค์ ์ค ํ๋๋ผ๋ ์ฐธ์ด๋ฉด:
-
parent์ childrenToExclude๊ฐ ํฌํจํ์ง ์๋ doctype ์์์ด ์๋ ๊ฒฝ์ฐ;
-
child๊ฐ null์ด ์๋๊ณ ์์๊ฐ child์ ์์ ์ค๋ ๊ฒฝ์ฐ; ๋๋
-
child๊ฐ null์ด๊ณ parent์ childrenToExclude๊ฐ ํฌํจํ์ง ์๋ ์์ ์์์ด ์๋ ๊ฒฝ์ฐ,
-
๋ ธ๋ node๋ฅผ ๋ ธ๋ parent ์์ null ๋๋ ๋ ธ๋ child ์์ ์ฌ์ ์ฝ์ ํ๋ ค๋ฉด:
-
node, parent, child, ๊ทธ๋ฆฌ๊ณ ยซ ยป๊ฐ ์ฃผ์ด์ก์ ๋ ์ฌ์ ์ฝ์ ์ ํจ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
-
referenceChild๋ฅผ child๋ก ๋ก๋๋ค.
-
referenceChild๊ฐ node์ด๋ฉด, referenceChild๋ฅผ node์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
node๋ฅผ parent ์์ referenceChild ์์ ์ฝ์ ํฉ๋๋ค.
-
node๋ฅผ ๋ฐํํฉ๋๋ค.
๋ช ์ธ๋ ๋ชจ๋ ๋๋ ์ผ๋ถ ๋ ธ๋์ ๋ํ ์ฝ์ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์๋์ ์ฝ์ ์๊ณ ๋ฆฌ์ฆ์ ํ์๋ ๋๋ก ์๊ณ ๋ฆฌ์ฆ์๋ insertedNode๊ฐ ์ ๋ฌ๋ฉ๋๋ค. ์ด ๋จ๊ณ๋ค์ insertedNode๊ฐ ์ฐธ์ฌํ๋ ๋ ธ๋ ํธ๋ฆฌ๋ฅผ ์์ ํ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ๋ฅผ ์์ฑํ๊ฑฐ๋, ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ฑฐ๋, ๊ทธ ๋ฐ์ ๋ฐฉ์์ผ๋ก JavaScript๋ฅผ ์คํํด์๋ ์ ๋ฉ๋๋ค. ๋ค๋ง ์ด ๋จ๊ณ๋ค์ ์ด๋ฌํ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ๋๋ก ํ์คํฌ๋ฅผ ํ์ ๋ฃ์ ์ ์์ต๋๋ค.
์ฝ์ ๋จ๊ณ๋ JavaScript๋ฅผ ์คํํ ์ ์์ง๋ง(๊ทธ ๋ฐ์ ์ฌ๋ฌ ์์ ๋ ์ํํ ์ ์์ต๋๋ค), ์ค์ ๋ก ์คํฌ๋ฆฝํธ์์ ๊ด์ฐฐ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ํต๋๋ค. ์๋ ์์ ๋ฅผ ์ดํด๋ณด์ญ์์ค:
const h1= document. querySelector( 'h1' ); const fragment= new DocumentFragment(); const script= fragment. appendChild( document. createElement( 'script' )); const style= fragment. appendChild( document. createElement( 'style' )); script. innerText= 'console.log(getComputedStyle(h1).color)' ; // 'rgb(255, 0, 0)'์ ๊ธฐ๋กํฉ๋๋ค style. innerText= 'h1 {color: rgb(255, 0, 0);}' ; document. body. append( fragment); ์ ์์ ์ ์คํฌ๋ฆฝํธ๋ ๋ค์ ์์ ๋ค์ด ์์๋๋ก ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
์ ๊ธฐ๋กํฉ๋๋ค:'rgb(255, 0, 0)' -
์ฝ์ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋๋ฉฐ, ์ด ์๊ณ ๋ฆฌ์ฆ์
script๋ฐstyle์์๋ฅผ ์์๋๋ก ์ฝ์ ํฉ๋๋ค.-
HTML ํ์ค์ ์ฝ์ ๋จ๊ณ๊ฐ
script์์์ ๋ํด ์คํ๋๋ฉฐ, ์๋ฌด ์์ ๋ ์ํํ์ง ์์ต๋๋ค. [HTML] -
HTML ํ์ค์ ์ฝ์ ๋จ๊ณ๊ฐ
style์์์ ๋ํด ์คํ๋๋ฉฐ, ํด๋น ์คํ์ผ ๊ท์น์ ์ฆ์ ๋ฌธ์์ ์ ์ฉํฉ๋๋ค. [HTML] -
HTML ํ์ค์ ์ฐ๊ฒฐ ํ ๋จ๊ณ๊ฐ
script์์์ ๋ํด ์คํ๋๋ฉฐ, ์ด ๋จ๊ณ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ ๋ฐ๋ก ์ ๋จ๊ณ์์ ์ ์ฉ๋ ์คํ์ผ ๊ท์น์ ์ฆ์ ๊ด์ฐฐํฉ๋๋ค. [HTML]
-
๋ช ์ธ๋ ๋ํ ๋ชจ๋ ๋๋ ์ผ๋ถ ๋ ธ๋์ ๋ํ ์ฐ๊ฒฐ ํ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์๋์ ์ฝ์ ์๊ณ ๋ฆฌ์ฆ์ ํ์๋ ๋๋ก ์๊ณ ๋ฆฌ์ฆ์๋ connectedNode๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
์ฐ๊ฒฐ ํ ๋จ๊ณ์ ๋ชฉ์ ์ ๋ ธ๋๊ฐ connectedNode๊ฐ ์ฐธ์ฌํ๋ ๋ ธ๋ ํธ๋ฆฌ๋ฅผ ์์ ํ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ๋ฅผ ์์ฑํ๊ฑฐ๋, ๊ทธ ๋ฐ์ ๋ฐฉ์์ผ๋ก JavaScript๋ฅผ ์คํํ๋ ์ฐ๊ฒฐ ๊ด๋ จ ์์ ์ ์ํํ ๊ธฐํ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด ๋จ๊ณ๋ค์ ๋ ธ๋ ๋ฌถ์์ ์คํฌ๋ฆฝํธ์ ๋ํด ์์์ ์ผ๋ก ์ฝ์ ํ ์ ์๊ฒ ํ๋ฉฐ, ๋ชจ๋ ์ฃผ์ ๋ถ์ ํจ๊ณผ๋ ๋ ธ๋ ํธ๋ฆฌ์ ๋ํ ๋ฌถ์ ์ฝ์ ์ด ์๋ฃ๋ ํ์ ๋ฐ์ํฉ๋๋ค. ์ด๋ ์ถ๊ฐ ์ฝ์ ์ด ๋ฐ์ํ ์ ์๊ธฐ ์ ์ ๋๊ธฐ ์ค์ธ ๋ชจ๋ ๋ ธ๋ ํธ๋ฆฌ ์ฝ์ ์ด ์์ ํ ๋๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ช ์ธ๋ ๋ชจ๋ ๋๋ ์ผ๋ถ ๋ ธ๋์ ๋ํ ์์ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์๋ ์ธ์๊ฐ ์ ๋ฌ๋์ง ์์ผ๋ฉฐ ์ฝ์ , ์ ๊ฑฐ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ๊ต์ฒด์์ ํธ์ถ๋ฉ๋๋ค.
๋ ธ๋ node๋ฅผ ๋ ธ๋ parent ์์ null ๋๋ ๋ ธ๋ child ์์, ์ ํ์ ๋ถ๋ฆฌ์ธ suppressObservers(๊ธฐ๋ณธ๊ฐ false)์ ํจ๊ป ์ฝ์ ํ๋ ค๋ฉด:
-
node๊ฐ
DocumentFragment๋ ธ๋์ด๋ฉด nodes๋ฅผ node์ ์์์ผ๋ก ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ยซ node ยป๋ก ๋ก๋๋ค. -
count๋ฅผ nodes์ ํฌ๊ธฐ๋ก ๋ก๋๋ค.
-
count๊ฐ 0์ด๋ฉด ๋ฐํํฉ๋๋ค.
-
node๊ฐ
DocumentFragment๋ ธ๋์ด๋ฉด:-
suppressObservers๋ฅผ true๋ก ์ค์ ํ์ฌ ๊ทธ ์์์ ์ ๊ฑฐํฉ๋๋ค.
-
node์ ๋ํด ยซ ยป, nodes, null, ๊ทธ๋ฆฌ๊ณ null์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ๋ฃ์ต๋๋ค.
์ด ๋จ๊ณ๋ ์๋์ ์ผ๋ก suppressObservers๋ฅผ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
-
-
child๊ฐ null์ด ์๋๋ฉด:
-
์์ ๋ ธ๋๊ฐ parent์ด๊ณ ์์ ์คํ์ ์ด child์ ์ธ๋ฑ์ค๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ๊ทธ ์์ ์คํ์ ์ count๋งํผ ์ฆ๊ฐ์ํต๋๋ค.
-
๋ ๋ ธ๋๊ฐ parent์ด๊ณ ๋ ์คํ์ ์ด child์ ์ธ๋ฑ์ค๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ๊ทธ ๋ ์คํ์ ์ count๋งํผ ์ฆ๊ฐ์ํต๋๋ค.
-
-
child๊ฐ null์ด ์๋๋ฉด previousSibling์ child์ ์ด์ ํ์ ๋ก ๋๊ณ , child๊ฐ null์ด๋ฉด parent์ ๋ง์ง๋ง ์์์ผ๋ก ๋ก๋๋ค.
-
nodes์ ๊ฐ node์ ๋ํด, ํธ๋ฆฌ ์์๋ก:
-
node๋ฅผ parent์ ๋ ธ๋ ๋ฌธ์๋ก ์ ์ํฉ๋๋ค.
-
child๊ฐ null์ด๋ฉด node๋ฅผ parent์ ์์์ ์ถ๊ฐํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, node๋ฅผ parent์ ์์์์ child์ ์ธ๋ฑ์ค ์์ ์ฝ์ ํฉ๋๋ค.
-
parent๊ฐ ์๋ ํธ์คํธ์ด๊ณ ๊ทธ ์๋ ๋ฃจํธ์ ์ฌ๋กฏ ํ ๋น์ด "
named"์ด๋ฉฐ node๊ฐ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ด๋ฉด, node์ ์ฌ๋กฏ์ ํ ๋นํฉ๋๋ค. -
parent์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ด๊ณ , parent๊ฐ ์ฌ๋กฏ์ด๋ฉฐ ๊ทธ ํ ๋น๋ ๋ ธ๋๊ฐ ๋น ๋ชฉ๋ก์ด๋ฉด, parent์ ๋ํด ์ฌ๋กฏ ๋ณ๊ฒฝ์ ์๋ฆฝ๋๋ค.
-
node์ ๋ฃจํธ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
node์ ๊ฐ ์๋๋ฅผ ํฌํจํ๋ ํฌ๊ด์ ์์ inclusiveDescendant์ ๋ํด, ์๋๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ ์์๋ก:
-
inclusiveDescendant๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
inclusiveDescendant๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฉด ๊ณ์ํฉ๋๋ค.
-
inclusiveDescendant๊ฐ ์์์ด๊ณ inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๊ฐ null์ด ์๋๋ฉด:
-
inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ true์ด๋ฉด, inclusiveDescendant์ ๋ ธ๋ ๋ฌธ์๋ฅผ inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋ฒ์ ์ง์ ๋ฌธ์ ์งํฉ์ ์ถ๊ฐํฉ๋๋ค.
-
inclusiveDescendant๊ฐ ์ฌ์ฉ์ ์ ์์ด๋ฉด, inclusiveDescendant, ์ฝ๋ฐฑ ์ด๋ฆ "
connectedCallback", ๊ทธ๋ฆฌ๊ณ ยซ ยป๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์์ ์ฝ๋ฐฑ ๋ฐ์์ ํ์ ๋ฃ์ต๋๋ค. -
๊ทธ๋ ์ง ์์ผ๋ฉด, inclusiveDescendant๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ค๊ณ ์๋ํฉ๋๋ค.
์ด ์์ ์ด inclusiveDescendant๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด, ๊ทธ
connectedCallback์ ์์ ์ ๊ทธ๋ ์ด๋ ์๊ณ ๋ฆฌ์ฆ ์ค์ ์๋์ผ๋ก ํ์ ๋ค์ด๊ฐ๋๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ inclusiveDescendant๊ฐ ์๋ ๋ฃจํธ์ด๊ณ , inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๊ฐ null์ด ์๋๋ฉฐ, inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ true์ด๋ฉด, inclusiveDescendant์ ๋ ธ๋ ๋ฌธ์๋ฅผ inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋ฒ์ ์ง์ ๋ฌธ์ ์งํฉ์ ์ถ๊ฐํฉ๋๋ค.
-
-
-
suppressObservers๊ฐ false์ด๋ฉด, parent์ ๋ํด nodes, ยซ ยป, previousSibling, ๊ทธ๋ฆฌ๊ณ child๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ๋ฃ์ต๋๋ค.
-
parent์ ๋ํด ์์ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
staticNodeList๋ฅผ ์ฒ์์๋ ยซ ยป์ธ ๋ชฉ๋ก์ธ ๋ ธ๋๋ก ๋ก๋๋ค.
์ฐ๋ฆฌ๋ ๋ ธ๋๋ฅผ ํ๋๋ผ๋ ์ฐ๊ฒฐ ํ ๋จ๊ณ์ ์ ๋ฌํ๊ธฐ ์ ์ ๋ชจ๋ ์์งํฉ๋๋ค. ๋ ธ๋ ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋์ ์ฐ๊ฒฐ ํ ๋จ๊ณ๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค. ์ด๋ ์ฐ๊ฒฐ ํ ๋จ๊ณ๊ฐ ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์์ ํ ์ ์์ด ์ค์๊ฐ ์ํ๋ฅผ ์์ ํ์ง ์๊ฒ ๋ง๋ค๊ณ , ๊ฐ์ ๋ ธ๋์ ๋ํด ์ฐ๊ฒฐ ํ ๋จ๊ณ๊ฐ ์ฌ๋ฌ ๋ฒ ํธ์ถ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
nodes์ ๊ฐ node์ ๋ํด, ํธ๋ฆฌ ์์๋ก:
-
node์ ๊ฐ ์๋๋ฅผ ํฌํจํ๋ ํฌ๊ด์ ์์ inclusiveDescendant์ ๋ํด, ์๋๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ ์์๋ก: inclusiveDescendant๋ฅผ staticNodeList์ ์ถ๊ฐํฉ๋๋ค.
-
-
staticNodeList์ ๊ฐ node์ ๋ํด: node๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด, node๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ ํ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
๋ ธ๋ node๋ฅผ ๋ ธ๋ parent์ ์ถ๊ฐํ๋ ค๋ฉด: node๋ฅผ parent ์์ null ์์ ์ฌ์ ์ฝ์ ํฉ๋๋ค.
๋ช ์ธ๋ ๋ชจ๋ ๋๋ ์ผ๋ถ ๋ ธ๋์ ๋ํ ์ด๋ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์๋ ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์๋ ๋๋ก ์๊ณ ๋ฆฌ์ฆ์๋ ๋ ธ๋ movedNode, ๋ถ๋ฆฌ์ธ isSubtreeRoot, ๊ทธ๋ฆฌ๊ณ ๋ ธ๋ oldAncestor๊ฐ ์ ๋ฌ๋ฉ๋๋ค. ์ฝ์ ๋จ๊ณ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ด ๋จ๊ณ๋ค์ movedNode๊ฐ ์ฐธ์ฌํ๋ ๋ ธ๋ ํธ๋ฆฌ๋ฅผ ์์ ํ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ๋ฅผ ์์ฑํ๊ฑฐ๋, ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ฑฐ๋, ๊ทธ ๋ฐ์ ๋ฐฉ์์ผ๋ก JavaScript๋ฅผ ์คํํด์๋ ์ ๋ฉ๋๋ค. ๋ค๋ง ์ด ๋จ๊ณ๋ค์ ์ด๋ฌํ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ๋๋ก ํ์คํฌ๋ฅผ ํ์ ๋ฃ์ ์ ์์ต๋๋ค.
๋ ธ๋ node๋ฅผ ๋ ธ๋ newParent ์์ null ๋๋ ๋ ธ๋ child ์์ ์ด๋ํ๋ ค๋ฉด:
-
newParent์ ์๋๋ฅผ ํฌํจํ๋ ๋ฃจํธ๊ฐ node์ ์๋๋ฅผ ํฌํจํ๋ ๋ฃจํธ์ ๊ฐ์ง ์์ผ๋ฉด, "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค.์ด๋ ์ด๋์ด newParent์ ์ฐ๊ฒฐ ์ํ๊ฐ node์ ์ฐ๊ฒฐ ์ํ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ์ํ๋๋๋ก ๋ณด์ฅํ๋ ๋ถ์ ํจ๊ณผ๊ฐ ์์ต๋๋ค.
-
node๊ฐ newParent์ ํธ์คํธ๋ฅผ ํฌํจํ๋ ํฌ๊ด์ ์กฐ์์ด๋ฉด, "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
child๊ฐ null์ด ์๋๊ณ ๊ทธ ๋ถ๋ชจ๊ฐ newParent๊ฐ ์๋๋ฉด, "
NotFoundError"DOMException์ ๋์ง๋๋ค. -
node๊ฐ
Element๋๋CharacterData๋ ธ๋๊ฐ ์๋๋ฉด "HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
node๊ฐ
Text๋ ธ๋์ด๊ณ newParent๊ฐ ๋ฌธ์์ด๋ฉด, "HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
newParent๊ฐ ๋ฌธ์์ด๊ณ , node๊ฐ
Element๋ ธ๋์ด๋ฉฐ, newParent์ ์์ ์์์ด ์๊ฑฐ๋, child๊ฐ doctype์ด๊ฑฐ๋, ๋๋ child๊ฐ null์ด ์๋๊ณ doctype์ด child์ ๋ค์ ์ค๋ฉด, "HierarchyRequestError"DOMException์ ๋์ง๋๋ค. -
oldParent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
๋จ์ธ: oldParent๋ null์ด ์๋๋๋ค.
-
node๊ฐ ์ฃผ์ด์ก์ ๋ ๋ผ์ด๋ธ ๋ฒ์ ์ฌ์ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
๋ฃจํธ์ ๋ ธ๋ ๋ฌธ์๊ฐ node์ ๋ ธ๋ ๋ฌธ์์ธ ๊ฐ
NodeIterator๊ฐ์ฒด iterator์ ๋ํด: node์ iterator๊ฐ ์ฃผ์ด์ก์ ๋NodeIterator์ฌ์ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค. -
oldPreviousSibling์ node์ ์ด์ ํ์ ๋ก ๋ก๋๋ค.
-
oldNextSibling์ node์ ๋ค์ ํ์ ๋ก ๋ก๋๋ค.
-
oldParent์ ์์์์ node๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
node๊ฐ ํ ๋น๋์ด ์์ผ๋ฉด, node์ ํ ๋น๋ ์ฌ๋กฏ์ ๋ํด ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
oldParent์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ด๊ณ , oldParent๊ฐ ์ฌ๋กฏ์ด๋ฉฐ ๊ทธ ํ ๋น๋ ๋ ธ๋๊ฐ ๋น์ด ์์ผ๋ฉด, oldParent์ ๋ํด ์ฌ๋กฏ ๋ณ๊ฒฝ์ ์๋ฆฝ๋๋ค.
-
node์ ์ฌ๋กฏ์ธ ํฌ๊ด์ ์์์ด ์์ผ๋ฉด:
-
oldParent์ ๋ฃจํธ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
node๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
-
node์ oldParent๊ฐ ์ฃผ์ด์ก์ ๋ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
-
child๊ฐ null์ด ์๋๋ฉด:
-
์์ ๋ ธ๋๊ฐ newParent์ด๊ณ ์์ ์คํ์ ์ด child์ ์ธ๋ฑ์ค๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ๊ทธ ์์ ์คํ์ ์ 1๋งํผ ์ฆ๊ฐ์ํต๋๋ค.
-
๋ ๋ ธ๋๊ฐ newParent์ด๊ณ ๋ ์คํ์ ์ด child์ ์ธ๋ฑ์ค๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ๊ทธ ๋ ์คํ์ ์ 1๋งํผ ์ฆ๊ฐ์ํต๋๋ค.
-
-
child๊ฐ null์ด ์๋๋ฉด newPreviousSibling์ child์ ์ด์ ํ์ ๋ก ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด newParent์ ๋ง์ง๋ง ์์์ผ๋ก ๋ก๋๋ค.
-
child๊ฐ null์ด๋ฉด node๋ฅผ newParent์ ์์์ ์ถ๊ฐํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, node๋ฅผ newParent์ ์์์์ child์ ์ธ๋ฑ์ค ์์ ์ฝ์ ํฉ๋๋ค.
-
newParent๊ฐ ์๋ ํธ์คํธ์ด๊ณ ๊ทธ ์๋ ๋ฃจํธ์ ์ฌ๋กฏ ํ ๋น์ด "
named"์ด๋ฉฐ node๊ฐ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ด๋ฉด, node์ ๋ํด ์ฌ๋กฏ์ ํ ๋นํฉ๋๋ค. -
newParent์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ด๊ณ , newParent๊ฐ ์ฌ๋กฏ์ด๋ฉฐ ๊ทธ ํ ๋น๋ ๋ ธ๋๊ฐ ๋น์ด ์์ผ๋ฉด, newParent์ ๋ํด ์ฌ๋กฏ ๋ณ๊ฒฝ์ ์๋ฆฝ๋๋ค.
-
node์ ๋ฃจํธ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
node์ ๊ฐ ์๋๋ฅผ ํฌํจํ๋ ํฌ๊ด์ ์์ inclusiveDescendant์ ๋ํด, ์๋๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ ์์๋ก:
-
inclusiveDescendant๊ฐ node์ด๋ฉด isSubtreeRoot๋ฅผ true๋ก ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ก ๋ก๋๋ค.
-
inclusiveDescendant, isSubtreeRoot, ๊ทธ๋ฆฌ๊ณ oldParent๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ์ ๋ฐ ์ ๊ฑฐ์ ๋ณ๊ฐ์ ๊ธฐ๋ณธ ์ฐ์ฐ์ด๋ฏ๋ก, inclusiveDescendant์ ๋ํด ์ฝ์ ๋จ๊ณ ๋๋ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค.
-
inclusiveDescendant๊ฐ ์ฌ์ฉ์ ์ ์์ด๊ณ newParent๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด, inclusiveDescendant, ์ฝ๋ฐฑ ์ด๋ฆ "
connectedMoveCallback", ๊ทธ๋ฆฌ๊ณ ยซ ยป๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์์ ์ฝ๋ฐฑ ๋ฐ์์ ํ์ ๋ฃ์ต๋๋ค.
-
-
oldParent์ ๋ํด ยซ ยป, ยซ node ยป, oldPreviousSibling, ๊ทธ๋ฆฌ๊ณ oldNextSibling์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ๋ฃ์ต๋๋ค.
-
newParent์ ๋ํด ยซ node ยป, ยซ ยป, newPreviousSibling, ๊ทธ๋ฆฌ๊ณ child๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ๋ฃ์ต๋๋ค.
๋ ธ๋ parent ์์์ ๋ ธ๋ child๋ฅผ ๋ ธ๋ node๋ก ๊ต์ฒดํ๋ ค๋ฉด:
-
node, parent, child, ๊ทธ๋ฆฌ๊ณ ยซ child ยป๊ฐ ์ฃผ์ด์ก์ ๋ ์ฌ์ ์ฝ์ ์ ํจ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
-
referenceChild๋ฅผ child์ ๋ค์ ํ์ ๋ก ๋ก๋๋ค.
-
referenceChild๊ฐ node์ด๋ฉด, referenceChild๋ฅผ node์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
previousSibling์ child์ ์ด์ ํ์ ๋ก ๋ก๋๋ค.
-
removedNodes๋ฅผ ๋น ์งํฉ์ผ๋ก ๋ก๋๋ค.
-
node๋ฅผ parent์ ๋ ธ๋ ๋ฌธ์๋ก ์ ์ํฉ๋๋ค.
-
child์ ๋ถ๋ชจ๊ฐ null์ด ์๋๋ฉด:
-
removedNodes๋ฅผ ยซ child ยป๋ก ์ค์ ํฉ๋๋ค.
-
suppressObservers๋ฅผ true๋ก ์ค์ ํ์ฌ child๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ ์กฐ๊ฑด์ด false์ผ ์ ์๋ ๊ฒฝ์ฐ๋ child๊ฐ node์ธ ๊ฒฝ์ฐ๋ฟ์ ๋๋ค.
-
-
node๊ฐ
DocumentFragment๋ ธ๋์ด๋ฉด nodes๋ฅผ node์ ์์์ผ๋ก ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ยซ node ยป๋ก ๋ก๋๋ค. -
suppressObservers๋ฅผ true๋ก ์ค์ ํ์ฌ node๋ฅผ parent ์์ referenceChild ์์ ์ฝ์ ํฉ๋๋ค.
-
parent์ ๋ํด nodes, removedNodes, previousSibling, ๊ทธ๋ฆฌ๊ณ referenceChild๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ๋ฃ์ต๋๋ค.
-
child๋ฅผ ๋ฐํํฉ๋๋ค.
๋ ธ๋ parent ์์์ ๋ ธ๋ ๋๋ null node๋ก ๋ชจ๋ ๊ต์ฒดํ๋ ค๋ฉด:
-
removedNodes๋ฅผ parent์ ์์์ผ๋ก ๋ก๋๋ค.
-
addedNodes๋ฅผ ๋น ์งํฉ์ผ๋ก ๋ก๋๋ค.
-
node๊ฐ
DocumentFragment๋ ธ๋์ด๋ฉด, addedNodes๋ฅผ node์ ์์์ผ๋ก ์ค์ ํฉ๋๋ค. -
๊ทธ๋ ์ง ์๊ณ node๊ฐ null์ด ์๋๋ฉด, addedNodes๋ฅผ ยซ node ยป๋ก ์ค์ ํฉ๋๋ค.
-
suppressObservers๋ฅผ true๋ก ์ค์ ํ์ฌ, parent์ ๋ชจ๋ ์์์ ํธ๋ฆฌ ์์๋ก ์ ๊ฑฐํฉ๋๋ค.
-
node๊ฐ null์ด ์๋๋ฉด, suppressObservers๋ฅผ true๋ก ์ค์ ํ์ฌ node๋ฅผ parent ์์ null ์์ ์ฝ์ ํฉ๋๋ค.
-
addedNodes ๋๋ removedNodes ์ค ํ๋๋ผ๋ ๋น์ด ์์ง ์์ผ๋ฉด, parent์ ๋ํด addedNodes, removedNodes, null, ๊ทธ๋ฆฌ๊ณ null์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ๋ฃ์ต๋๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ ธ๋ ํธ๋ฆฌ ์ ์ฝ ์กฐ๊ฑด์ ๊ดํ ์ด๋ ํ ๊ฒ์ฌ๋ ์ํํ์ง ์์ต๋๋ค. ๋ช ์ธ ์์ฑ์๋ ์ด๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ ธ๋ child๋ฅผ ๋ ธ๋ parent์์ ์ฌ์ ์ ๊ฑฐํ๋ ค๋ฉด:
-
child์ ๋ถ๋ชจ๊ฐ parent๊ฐ ์๋๋ฉด, "
NotFoundError"DOMException์ ๋์ง๋๋ค. -
child๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
child๋ฅผ ๋ฐํํฉ๋๋ค.
๋ช ์ธ๋ ๋ชจ๋ ๋๋ ์ผ๋ถ ๋ ธ๋์ ๋ํ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์๋ ์ ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ์ ํ์๋ ๋๋ก, ์๊ณ ๋ฆฌ์ฆ์๋ ๋ ธ๋ removedNode, ๋ถ๋ฆฌ์ธ isSubtreeRoot, ๊ทธ๋ฆฌ๊ณ ๋ ธ๋ oldAncestor๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
๋ ธ๋ node๋ฅผ, ์ ํ์ ๋ถ๋ฆฌ์ธ suppressObservers(๊ธฐ๋ณธ๊ฐ false)์ ํจ๊ป ์ ๊ฑฐํ๋ ค๋ฉด:
-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
๋จ์ธ: parent๋ null์ด ์๋๋๋ค.
-
node๊ฐ ์ฃผ์ด์ก์ ๋ ๋ผ์ด๋ธ ๋ฒ์ ์ฌ์ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
๋ฃจํธ์ ๋ ธ๋ ๋ฌธ์๊ฐ node์ ๋ ธ๋ ๋ฌธ์์ธ ๊ฐ
NodeIterator๊ฐ์ฒด iterator์ ๋ํด: node์ iterator๊ฐ ์ฃผ์ด์ก์ ๋NodeIterator์ฌ์ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค. -
oldPreviousSibling์ node์ ์ด์ ํ์ ๋ก ๋ก๋๋ค.
-
oldNextSibling์ node์ ๋ค์ ํ์ ๋ก ๋ก๋๋ค.
-
node๋ฅผ ๊ทธ parent์ ์์์์ ์ ๊ฑฐํฉ๋๋ค.
-
node๊ฐ ํ ๋น๋์ด ์์ผ๋ฉด, node์ ํ ๋น๋ ์ฌ๋กฏ์ ๋ํด ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
parent์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ด๊ณ , parent๊ฐ ์ฌ๋กฏ์ด๋ฉฐ ๊ทธ ํ ๋น๋ ๋ ธ๋๊ฐ ๋น ๋ชฉ๋ก์ด๋ฉด, parent์ ๋ํด ์ฌ๋กฏ ๋ณ๊ฒฝ์ ์๋ฆฝ๋๋ค.
-
node์ ์ฌ๋กฏ์ธ ํฌ๊ด์ ์์์ด ์์ผ๋ฉด:
-
parent์ ๋ฃจํธ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
node๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ์ฌ๋กฏ ๊ฐ๋ฅ ํญ๋ชฉ์ ํ ๋นํฉ๋๋ค.
-
-
node, true, ๊ทธ๋ฆฌ๊ณ parent๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
isParentConnected๋ฅผ parent์ ์ฐ๊ฒฐ ์ํ๋ก ๋ก๋๋ค.
-
node๊ฐ ์ฌ์ฉ์ ์ ์์ด๊ณ isParentConnected๊ฐ true์ด๋ฉด, node, ์ฝ๋ฐฑ ์ด๋ฆ "
disconnectedCallback", ๊ทธ๋ฆฌ๊ณ ยซ ยป๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์์ ์ฝ๋ฐฑ ๋ฐ์์ ํ์ ๋ฃ์ต๋๋ค.ํ์ฌ๋ก์๋ ์ฌ์ฉ์ ์ ์ ์์์ parent๊ฐ ์ ๋ฌ๋์ง ์๋ ๊ฒ์ด ์๋๋ ๋์์ ๋๋ค. ํ์๊ฐ ์๊ธฐ๋ฉด ํฅํ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
-
node์ ๊ฐ ์๋๋ฅผ ํฌํจํ๋ ์์ descendant์ ๋ํด, ์๋๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ ์์๋ก:
-
descendant, false, ๊ทธ๋ฆฌ๊ณ parent๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ฑฐ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
descendant๊ฐ ์ฌ์ฉ์ ์ ์์ด๊ณ isParentConnected ๊ฐ true์ด๋ฉด, descendant, ์ฝ๋ฐฑ ์ด๋ฆ "
disconnectedCallback", ๊ทธ๋ฆฌ๊ณ ยซ ยป๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์์ ์ฝ๋ฐฑ ๋ฐ์์ ํ์ ๋ฃ์ต๋๋ค.
-
-
์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ฅผ ์ถ๊ฐํฉ๋๋ค ์ด๋ node์ parent๊ฐ ์ฃผ์ด์ง๋๋ค.
-
suppressObservers๊ฐ false์ด๋ฉด, parent์ ๋ํด ยซ ยป, ยซ node ยป, oldPreviousSibling, ๊ทธ๋ฆฌ๊ณ oldNextSibling์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ๋ฃ์ต๋๋ค.
-
parent์ ๋ํด ์์ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
4.2.4. ๋ฏน์ค์ธ
NonElementParentNode์น ํธํ์ฑ ๋๋ฌธ์
getElementById()๋ฉ์๋๋ ์์์ ๋ ธ์ถ๋์ง ์๋๋ค(๋ฐ๋ผ์ParentNode์๋ ๋ ธ์ถ๋์ง ์๋๋ค).interface mixin {NonElementParentNode Element ?getElementById (DOMString ); };elementId Document includes NonElementParentNode ;DocumentFragment includes NonElementParentNode ;node . getElementById(elementId)-
node์ ์์ ๋ด์์ ID๊ฐ elementId์ธ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค.
๋ ธ๋ node์ ๋ฌธ์์ด elementId๊ฐ ์ฃผ์ด์ก์ ๋, ID๋ก ์์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ node์ ์์ ๋ด์์ ID๊ฐ elementId์ธ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ํธ๋ฆฌ ์์๋ก ๋ฐํํ๋ค; ๊ทธ๋ ์ง ์๊ณ , ๊ทธ๋ฌํ ์์๊ฐ ์์ผ๋ฉด null์ ๋ฐํํ๋ค.
getElementById(elementId)๋ฉ์๋ ๋จ๊ณ๋ this์ elementId๊ฐ ์ฃผ์ด์ก์ ๋ ID๋ก ์์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.4.2.5. ๋ฏน์ค์ธ
DocumentOrShadowRootinterface mixin {DocumentOrShadowRoot readonly attribute CustomElementRegistry ?customElementRegistry ; };Document includes DocumentOrShadowRoot ;ShadowRoot includes DocumentOrShadowRoot ;registry = documentOrShadowRoot .customElementRegistry-
documentOrShadowRoot์
CustomElementRegistry๊ฐ์ฒด๊ฐ ์์ผ๋ฉด ๋ฐํํ๊ณ ; ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ค.
customElementRegistrygetter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
this๊ฐ ๋ฌธ์์ด๋ฉด, this์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ฐํํ๋ค.
-
Assert: this๋
ShadowRoot๋ ธ๋์ด๋ค. -
this์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ฐํํ๋ค.
DocumentOrShadowRootmixin์ ๋ฌธ์์ ์๋ ๋ฃจํธ ์ฌ์ด์ ๊ณต์ ๋๋ API๋ฅผ ์ ์ํ๋ ค๋ ๋ค๋ฅธ ํ์ค์์๋ ์ฌ์ฉ๋ ๊ฒ์ผ๋ก ๊ธฐ๋๋๋ค.4.2.6. ๋ฏน์ค์ธ
ParentNode๋ชฉ๋ก์ธ ๋ ธ๋ ๋ฐ ๋ฌธ์์ด nodes์ ๋ฌธ์ document๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋๋ฅผ ํ๋์ ๋ ธ๋๋ก ๋ณํํ๋ ค๋ฉด:
-
nodes์ ๊ฐ ๋ฌธ์์ด์ document์ ํด๋น ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋ ํ ์คํธ ๋ ธ๋๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ๊ต์ฒดํฉ๋๋ค.
-
nodes์ ํฌ๊ธฐ๊ฐ 1์ด๋ฉด nodes[0]์ ๋ฐํํฉ๋๋ค.
-
fragment๋ฅผ document๊ฐ ์ฃผ์ด์ก์ ๋ ๋ฌธ์ ์กฐ๊ฐ์ ์์ฑํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
nodes์ ๊ฐ node์ ๋ํด: node๋ฅผ fragment์ ์ถ๊ฐํฉ๋๋ค.
-
fragment๋ฅผ ๋ฐํํฉ๋๋ค.
interface mixin { [ParentNode SameObject ]readonly attribute HTMLCollection children ;readonly attribute Element ?firstElementChild ;readonly attribute Element ?lastElementChild ;readonly attribute unsigned long childElementCount ; [CEReactions ,Unscopable ]undefined prepend ((Node or DOMString )...); [nodes CEReactions ,Unscopable ]undefined append ((Node or DOMString )...); [nodes CEReactions ,Unscopable ]undefined replaceChildren ((Node or DOMString )...); [nodes CEReactions ]undefined moveBefore (Node ,node Node ?);child Element ?querySelector (DOMString ); [selectors NewObject ]NodeList querySelectorAll (DOMString ); };selectors Document includes ParentNode ;DocumentFragment includes ParentNode ;Element includes ParentNode ;collection = node .children- ์์ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
element = node .firstElementChild- ์์์ธ ์ฒซ ๋ฒ์งธ ์์์ ๋ฐํํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
element = node .lastElementChild- ์์์ธ ๋ง์ง๋ง ์์์ ๋ฐํํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
node . prepend(nodes)-
nodes๋ฅผ node์ ์ฒซ ๋ฒ์งธ ์์ ์์ ์ฝ์ ํ๋ฉฐ, nodes์ ๋ฌธ์์ด์ ์ด์ ์์ํ๋
Text๋ ธ๋๋ก ๊ต์ฒดํฉ๋๋ค.๋์ง๋๋ค: ๋ ธ๋ ํธ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ฐ๋๋ฉด "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. node . append(nodes)-
nodes๋ฅผ node์ ๋ง์ง๋ง ์์ ๋ค์ ์ฝ์ ํ๋ฉฐ, nodes์ ๋ฌธ์์ด์ ์ด์ ์์ํ๋
Text๋ ธ๋๋ก ๊ต์ฒดํฉ๋๋ค.๋์ง๋๋ค: ๋ ธ๋ ํธ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ฐ๋๋ฉด "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. node . replaceChildren(nodes)-
node์ ๋ชจ๋ ์์์ nodes๋ก ๊ต์ฒดํ๋ฉฐ, nodes์ ๋ฌธ์์ด์ ์ด์ ์์ํ๋
Text๋ ธ๋๋ก ๊ต์ฒดํฉ๋๋ค.๋์ง๋๋ค: ๋ ธ๋ ํธ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ฐ๋๋ฉด "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. node . moveBefore(movedNode, child)-
movedNode๋ฅผ ๋จผ์ ์ ๊ฑฐํ์ง ์๊ณ , child๊ฐ null์ด ์๋๋ฉด child ๋ค์ node ์์ผ๋ก ์ด๋ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด node์ ๋ง์ง๋ง ์์ ๋ค๋ก ์ด๋ํฉ๋๋ค. ์ด ๋ฉ์๋๋ movedNode์ ์ฐ๊ฒฐ๋ ์ํ๋ฅผ ๋ณด์กดํฉ๋๋ค.
๋์ง๋๋ค: ๋ ธ๋ ํธ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ฐ๋๊ฑฐ๋ ์ด๋๋ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์ํ๋ฅผ ๋ณด์กดํ ์ ์์ผ๋ฉด "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. node . querySelector(selectors)-
node์ ์์ ์ค selectors์ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
node . querySelectorAll(selectors)-
node์ ์์ ์ค selectors์ ์ผ์นํ๋ ๋ชจ๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
childrengetter ๋จ๊ณ๋ this๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์๋ง ์ผ์นํ๋HTMLCollection์ปฌ๋ ์ ์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.firstElementChildgetter ๋จ๊ณ๋ ์์์ธ ์ฒซ ๋ฒ์งธ ์์์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.lastElementChildgetter ๋จ๊ณ๋ ์์์ธ ๋ง์ง๋ง ์์์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.childElementCountgetter ๋จ๊ณ๋ this์ ์์ ์ค ์์์ธ ๊ฒ์ ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.prepend(nodes)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๋ฅผ nodes์ this์ ๋ ธ๋ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋๋ฅผ ํ๋์ ๋ ธ๋๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
node๋ฅผ this ์์ this์ ์ฒซ ๋ฒ์งธ ์์ ์์ ์ฌ์ ์ฝ์ ํฉ๋๋ค.
append(nodes)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๋ฅผ nodes์ this์ ๋ ธ๋ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋๋ฅผ ํ๋์ ๋ ธ๋๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
node๋ฅผ this์ ์ถ๊ฐํฉ๋๋ค.
replaceChildren(nodes)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๋ฅผ nodes์ this์ ๋ ธ๋ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋๋ฅผ ํ๋์ ๋ ธ๋๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
node, this, null, ๊ทธ๋ฆฌ๊ณ this์ ์์์ด ์ฃผ์ด์ก์ ๋ ์ฌ์ ์ฝ์ ์ ํจ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
-
this ์์ ๋ชจ๋ ํญ๋ชฉ์ node๋ก ๊ต์ฒดํฉ๋๋ค.
moveBefore(node, child)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
referenceChild๋ฅผ child๋ก ๋ก๋๋ค.
-
referenceChild๊ฐ node์ด๋ฉด, referenceChild๋ฅผ node์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
node๋ฅผ this ์์ referenceChild ์์ ์ด๋ํฉ๋๋ค.
querySelector(selectors)๋ฉ์๋ ๋จ๊ณ๋ selectors๋ฅผ this์ ๋ํด ์ ํ์ ๋ฌธ์์ด์ ๋ฒ์ ์ผ์น์ํจ ๊ฒฐ๊ณผ๊ฐ ๋น ๋ชฉ๋ก์ด ์๋๋ฉด ๊ทธ ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.querySelectorAll(selectors)๋ฉ์๋ ๋จ๊ณ๋ selectors๋ฅผ this์ ๋ํด ์ ํ์ ๋ฌธ์์ด์ ๋ฒ์ ์ผ์น์ํจ ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.4.2.7. ๋ฏน์ค์ธ
NonDocumentTypeChildNode์น ํธํ์ฑ ๋๋ฌธ์
previousElementSibling๋ฐnextElementSibling์์ฑ์ doctype์ ๋ ธ์ถ๋์ง ์๋๋ค(๋ฐ๋ผ์ChildNode์๋ ๋ ธ์ถ๋์ง ์๋๋ค).interface mixin {NonDocumentTypeChildNode readonly attribute Element ?previousElementSibling ;readonly attribute Element ?nextElementSibling ; };Element includes NonDocumentTypeChildNode ;CharacterData includes NonDocumentTypeChildNode ;element = node .previousElementSibling- ์์์ธ ์ฒซ ๋ฒ์งธ ์์ ํ์ ๋ฅผ ๋ฐํํ๋ค; ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ค.
element = node .nextElementSibling- ์์์ธ ์ฒซ ๋ฒ์งธ ๋ค๋ฐ๋ฅด๋ ํ์ ๋ฅผ ๋ฐํํ๋ค; ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ค.
previousElementSiblinggetter ๋จ๊ณ๋ ์์์ธ ์ฒซ ๋ฒ์งธ ์์ ํ์ ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค; ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ค.nextElementSiblinggetter ๋จ๊ณ๋ ์์์ธ ์ฒซ ๋ฒ์งธ ๋ค๋ฐ๋ฅด๋ ํ์ ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค; ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํ๋ค.4.2.8. ๋ฏน์ค์ธ
ChildNodeinterface mixin { [ChildNode CEReactions ,Unscopable ]undefined before ((Node or DOMString )...); [nodes CEReactions ,Unscopable ]undefined after ((Node or DOMString )...); [nodes CEReactions ,Unscopable ]undefined replaceWith ((Node or DOMString )...); [nodes CEReactions ,Unscopable ]undefined remove (); };DocumentType includes ChildNode ;Element includes ChildNode ;CharacterData includes ChildNode ;node .before(...nodes)-
nodes์ ๋ฌธ์์ด์ ์ด์ ์์ํ๋
Text๋ ธ๋๋ก ๊ต์ฒดํ๋ฉด์ nodes๋ฅผ node ๋ฐ๋ก ์์ ์ฝ์ ํฉ๋๋ค.๋์ง๋๋ค: ๋ ธ๋ ํธ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ฐ๋๋ฉด "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. node .after(...nodes)-
nodes์ ๋ฌธ์์ด์ ์ด์ ์์ํ๋
Text๋ ธ๋๋ก ๊ต์ฒดํ๋ฉด์ nodes๋ฅผ node ๋ฐ๋ก ๋ค์ ์ฝ์ ํฉ๋๋ค.๋์ง๋๋ค: ๋ ธ๋ ํธ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ฐ๋๋ฉด "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. node .replaceWith(...nodes)-
nodes์ ๋ฌธ์์ด์ ์ด์ ์์ํ๋
Text๋ ธ๋๋ก ๊ต์ฒดํ๋ฉด์ node๋ฅผ nodes๋ก ๊ต์ฒดํฉ๋๋ค.๋์ง๋๋ค: ๋ ธ๋ ํธ๋ฆฌ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ฐ๋๋ฉด "
HierarchyRequestError"DOMException์ ๋์ง๋๋ค. node .remove()- node๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
before(nodes)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
parent๊ฐ null์ด๋ฉด ๋ฐํํฉ๋๋ค.
-
viablePreviousSibling์ this์ ์์ ์ค๋ ํ์ ์ค nodes์ ํฌํจ๋์ง ์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ผ๋ก ๋๊ณ , ๊ทธ๋ฌํ ํญ๋ชฉ์ด ์์ผ๋ฉด null๋ก ๋ก๋๋ค.
-
node๋ฅผ nodes์ this์ ๋ ธ๋ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋๋ฅผ ํ๋์ ๋ ธ๋๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
viablePreviousSibling์ด null์ด๋ฉด ์ด๋ฅผ parent์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ค์ ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด viablePreviousSibling์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
node๋ฅผ parent ์์ viablePreviousSibling ์์ ์ฌ์ ์ฝ์ ํฉ๋๋ค.
after(nodes)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
parent๊ฐ null์ด๋ฉด ๋ฐํํฉ๋๋ค.
-
viableNextSibling์ this์ ๋ค์ ์ค๋ ํ์ ์ค nodes์ ํฌํจ๋์ง ์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ผ๋ก ๋๊ณ , ๊ทธ๋ฌํ ํญ๋ชฉ์ด ์์ผ๋ฉด null๋ก ๋ก๋๋ค.
-
node๋ฅผ nodes์ this์ ๋ ธ๋ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋๋ฅผ ํ๋์ ๋ ธ๋๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
node๋ฅผ parent ์์ viableNextSibling ์์ ์ฌ์ ์ฝ์ ํฉ๋๋ค.
replaceWith(nodes)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
parent๊ฐ null์ด๋ฉด ๋ฐํํฉ๋๋ค.
-
viableNextSibling์ this์ ๋ค์ ์ค๋ ํ์ ์ค nodes์ ํฌํจ๋์ง ์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ผ๋ก ๋๊ณ , ๊ทธ๋ฌํ ํญ๋ชฉ์ด ์์ผ๋ฉด null๋ก ๋ก๋๋ค.
-
node๋ฅผ nodes์ this์ ๋ ธ๋ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋๋ฅผ ํ๋์ ๋ ธ๋๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค.
-
this์ ๋ถ๋ชจ๊ฐ parent์ด๋ฉด, parent ์์์ this๋ฅผ node๋ก ๊ต์ฒดํฉ๋๋ค.
this๊ฐ node ์์ ์ฝ์ ๋์์ ์๋ ์์ต๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด, node๋ฅผ parent ์์ viableNextSibling ์์ ์ฌ์ ์ฝ์ ํฉ๋๋ค.
remove()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
this๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
4.2.9. ๋ฏน์ค์ธ
Slottableinterface mixin {Slottable readonly attribute HTMLSlotElement ?assignedSlot ; };Element includes Slottable ;Text includes Slottable ;assignedSlotgetter ๋จ๊ณ๋ find a slot์ this์ true๋ฅผ ์ธ์๋ก ํ์ฌ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.4.2.10. ๊ตฌ์ ์ปฌ๋ ์ :
NodeList๋ฐHTMLCollection์ปฌ๋ ์ ์ ๋ ธ๋๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๋๋ค. ์ปฌ๋ ์ ์ ๋ผ์ด๋ธ์ผ ์๋ ์๊ณ , ์ ์ ์ผ ์๋ ์์ต๋๋ค. ๋ฌ๋ฆฌ ๋ช ์๋์ง ์๋ ํ, ์ปฌ๋ ์ ์ ๋ผ์ด๋ธ์ฌ์ผ ํฉ๋๋ค.
์ปฌ๋ ์ ์ด ๋ผ์ด๋ธ์ผ ๊ฒฝ์ฐ, ํด๋น ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋๋ ๋ฐ์ดํฐ์ ์ค๋ ์ท์ด ์๋ ์ค์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ์ ๋ํด ์๋ํด์ผ ํฉ๋๋ค.
์ปฌ๋ ์ ์ด ์์ฑ๋ ๋, ํํฐ์ ๋ฃจํธ๊ฐ ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ปฌ๋ ์ ์ ํด๋น ์ปฌ๋ ์ ์ ๋ฃจํธ๋ฅผ ๋ฟ๋ฆฌ๋ก ํ๋ ์๋ธํธ๋ฆฌ์ ๋ทฐ๋ฅผ ๋ํ๋ด๋ฉฐ , ์ฃผ์ด์ง ํํฐ์ ๋ถํฉํ๋ ๋ ธ๋๋ง ํฌํจํฉ๋๋ค. ์ด ๋ทฐ๋ ์ ํ์ ์ ๋๋ค. ๋ฐ๋๋๋ ๊ตฌ์ฒด์ ์๊ตฌ์ฌํญ์ด ์์ผ๋ฉด ์ปฌ๋ ์ ๋ด์ ๋ ธ๋๋ค์ ํธ๋ฆฌ ์์ ๋ก ์ ๋ ฌ๋์ด์ผ ํฉ๋๋ค.
4.2.10.1. ์ธํฐํ์ด์ค
NodeListNodeList๊ฐ์ฒด๋ ๋ ธ๋์ ์ปฌ๋ ์ ์ ๋๋ค.[
Exposed =Window ]interface {NodeList getter Node ?item (unsigned long );index readonly attribute unsigned long length ;iterable <Node >; };- collection .
length - ์ปฌ๋ ์ ์ ์๋ ๋ ธ๋์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
- element = collection .
item(index)- element = collection[index]
- ์ปฌ๋ ์ ์์ ์ธ๋ฑ์ค index์ธ ๋ ธ๋๋ฅผ ๋ฐํํฉ๋๋ค. ๋ ธ๋๋ ํธ๋ฆฌ ์์๋ก ์ ๋ ฌ๋ฉ๋๋ค.
๊ฐ์ฒด์ ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์ปฌ๋ ์ ์ด ๋ํ๋ด๋ ๋ ธ๋ ์๋ณด๋ค ํ๋ ์์ ๊ฐ๊น์ง์ ๋ฒ์์ ์๋ ์ซ์์ ๋๋ค. ๊ทธ๋ฌํ ์์๊ฐ ์์ผ๋ฉด ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๋ ์์ต๋๋ค.
length์์ฑ์ ์ปฌ๋ ์ ์ด ๋ํ๋ด๋ ๋ ธ๋์ ์๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.item(index)๋ฉ์๋๋ ์ปฌ๋ ์ ์ index๋ฒ์งธ ๋ ธ๋๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. ์ปฌ๋ ์ ์ index๋ฒ์งธ ๋ ธ๋๊ฐ ์์ผ๋ฉด, ์ด ๋ฉ์๋๋ null์ ๋ฐํํด์ผ ํฉ๋๋ค.4.2.10.2. ์ธํฐํ์ด์ค
HTMLCollection[
Exposed =Window ,LegacyUnenumerableNamedProperties ]interface {HTMLCollection readonly attribute unsigned long length ;getter Element ?item (unsigned long );index getter Element ?(namedItem DOMString ); };name HTMLCollection๊ฐ์ฒด๋ ์์์ ์ปฌ๋ ์ ์ด๋ค.HTMLCollection์ ์น์์ ์ ๊ฑฐํ ์ ์๋ ์ญ์ฌ์ ์ฐ๋ฌผ์ด๋ค. ๊ฐ๋ฐ์๊ฐ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฌผ๋ก ๊ด์ฐฎ์ง๋ง, ์๋ก์ด API ํ์ค ์ค๊ณ์๋ ์ด๋ฅผ ์ฌ์ฉํด์๋ ์ ๋๋ค (๋์ IDL์์sequence<T>๋ฅผ ์ฌ์ฉํ๋ค).- collection .
length - ์ปฌ๋ ์ ์์ ์์ ์๋ฅผ ๋ฐํํ๋ค.
- element = collection .
item(index)- element = collection[index]
- ์ปฌ๋ ์ ์์ ์ธ๋ฑ์ค index๋ฅผ ๊ฐ์ง ์์๋ฅผ ๋ฐํํ๋ค. ์์๋ค์ ํธ๋ฆฌ ์์๋ก ์ ๋ ฌ๋๋ค.
- element = collection .
namedItem(name)- element = collection[name]
- ์ปฌ๋ ์ ์์ ID ๋๋ ์ด๋ฆ์ด name์ธ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค.
๊ฐ์ฒด์ ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๋ ์ปฌ๋ ์ ์ด ๋ํ๋ด๋ ์์ ์๋ณด๋ค ํ๋ ์์ ์๊น์ง์ 0๋ถํฐ์ ๋ฒ์์ ์๋ ์ซ์์ด๋ค. ๊ทธ๋ฌํ ์์๊ฐ ์์ผ๋ฉด, ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๋ ์๋ค.
lengthgetter ๋จ๊ณ๋ ์ปฌ๋ ์ ์ด ๋ํ๋ด๋ ๋ ธ๋ ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.item(index)๋ฉ์๋ ๋จ๊ณ๋ ์ปฌ๋ ์ ์์ index๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค. ์ปฌ๋ ์ ์์ index๋ฒ์งธ ์์๊ฐ ์์ผ๋ฉด, ๋ฉ์๋๋ null์ ๋ฐํํด์ผ ํ๋ค.์ง์๋๋ ์์ฑ ์ด๋ฆ์ ๋ค์ ๋จ๊ณ๊ฐ ๋ฐํํ๋ ๋ชฉ๋ก์ ๊ฐ์ด๋ค:
-
result๋ฅผ ๋น ๋ชฉ๋ก์ผ๋ก ํ๋ค.
-
์ปฌ๋ ์ ์ด ๋ํ๋ด๋ ๊ฐ element์ ๋ํด, ํธ๋ฆฌ ์์๋ก:
-
element๊ฐ result ์์ ์๋ ID๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด, element์ ID๋ฅผ result์ ์ถ๊ฐํ๋ค.
-
element๊ฐ HTML ๋ค์์คํ์ด์ค ์์ ์๊ณ , ๋น ๋ฌธ์์ด๋ ์๋๊ณ result ์์๋ ์๋ ๊ฐ์ ๊ฐ์ง
name์์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด, element์name์์ฑ ๊ฐ์ result์ ์ถ๊ฐํ๋ค.
-
-
result๋ฅผ ๋ฐํํ๋ค.
namedItem(key)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
key๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด null์ ๋ฐํํ๋ค.
-
๋ค์ ์ค ์ ์ด๋ ํ๋๊ฐ true์ธ ์ปฌ๋ ์ ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค:
- key์ธ ID๋ฅผ ๊ฐ์ง๊ณ ์๋ค;
- HTML ๋ค์์คํ์ด์ค ์์ ์๊ณ , key์ธ
๊ฐ์ ๊ฐ์ง
name์์ฑ์ ๊ฐ์ง๊ณ ์๋ค;
๋๋ ๊ทธ๋ฌํ ์์๊ฐ ์์ผ๋ฉด null์ ๋ฐํํ๋ค.
4.3. ๋ณ์ด ์ต์ ๋ฒ(Mutation observers)
๊ฐ ๋์ผ ์ถ์ฒ ์๋์ฐ ์์ด์ ํธ(similar-origin window agent)๋ ๋ณ์ด ์ต์ ๋ฒ ๋ง์ดํฌ๋กํ์คํฌ ๋๊ธฐ(mutation observer microtask queued) (๋ถ๋ฆฌ์ธ) ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๊ธฐ๊ฐ์ false์ ๋๋ค. [HTML]
๊ฐ ๋์ผ ์ถ์ฒ ์๋์ฐ ์์ด์ ํธ๋ ๋ํ ๋๊ธฐ ์ค์ธ ๋ณ์ด ์ต์ ๋ฒ(pending mutation observers) (0๊ฐ ์ด์์ ์งํฉ(set)
MutationObserver๊ฐ์ฒด)๋ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๊ธฐ๊ฐ์ ๋น ์งํฉ์ ๋๋ค.๊ฐ ์ ์ฌ ์ถ์ฒ ์ฐฝ ์์ด์ ํธ์๋ ๋ณ๊ฒฝ ๊ด์ฐฐ์ ์นด์ดํฐ๊ฐ ์์ผ๋ฉฐ, ์ด๋ ์ด๊น๊ฐ์ด 0์ธ ์ซ์์ ๋๋ค.
๋ณ์ด ๊ด์ฐฐ์ ๋ง์ดํฌ๋กํ์คํฌ๋ฅผ ํ์ ์ถ๊ฐํ๋ค๋ฅผ ์ํํ๋ ค๋ฉด:
-
์ฃผ๋ณ ์์ด์ ํธ์ ๋ณ์ด ๊ด์ฐฐ์ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์ถ๊ฐ๋จ์ด true์ด๋ฉด, ๋ฐํํ๋ค.
-
์ฃผ๋ณ ์์ด์ ํธ์ ๋ณ์ด ๊ด์ฐฐ์ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์ถ๊ฐ๋จ์ true๋ก ์ค์ ํ๋ค.
-
๋ง์ดํฌ๋กํ์คํฌ๋ฅผ ํ์ ๋ฃ๊ณ ๋ง์ดํฌ๋กํ์คํฌ๋ฅผ ๋ณ์ด ๊ด์ฐฐ์์๊ฒ ์๋ฆผ์ ํ ๋นํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ๊ด์ฐฐ์์๊ฒ ์๋ฆฝ๋๋ค:
-
๋ค์ ์ฃผ๋ณ ์์ด์ ํธ์ ๋ณ๊ฒฝ ๊ด์ฐฐ์ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์ถ๊ฐ๋จ์ false๋ก ์ค์ ํฉ๋๋ค.
-
notifyList๋ฅผ ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ๋์์ ์ฃผ๋ณ ์์ด์ ํธ์ ๋๊ธฐ ์ค์ธ ๋ณ๊ฒฝ ๊ด์ฐฐ์์ด๋ฉฐ, ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค. a๊ฐ b๋ณด๋ค ์๋ค๋ ๊ฒ์ a์ ์์ฑ ์ธ๋ฑ์ค๊ฐ b์ ์์ฑ ์ธ๋ฑ์ค๋ณด๋ค ์๋ค๋ ๋ป์ ๋๋ค.
-
๋น์๋๋ค. ๋์์ ์ฃผ๋ณ ์์ด์ ํธ์ ๋๊ธฐ ์ค์ธ ๋ณ๊ฒฝ ๊ด์ฐฐ์ ๋ชฉ๋ก์ ๋๋ค.
-
signalSet์ ๋ณต์ ๋ณธ์ผ๋ก ์ค์ ํฉ๋๋ค. ๋์์ ์ฃผ๋ณ ์์ด์ ํธ์ ์ ํธ ์ฌ๋กฏ์ ๋๋ค.
-
๋น์๋๋ค. ๋์์ ์ฃผ๋ณ ์์ด์ ํธ์ ์ ํธ ์ฌ๋กฏ์ ๋๋ค.
-
๊ฐ๊ฐ์ ๋ํด notifyList์ mo๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค:
-
records๋ฅผ ๋ณต์ ๋ณธ์ผ๋ก ์ค์ ํฉ๋๋ค. ๋ณต์ ๋์์ mo์ ๋ ์ฝ๋ ํ์ ๋๋ค.
-
๋น์๋๋ค. ๋์์ mo์ ๋ ์ฝ๋ ํ์ ๋๋ค.
-
์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋์์ mo์ ๋๋ค.
-
records๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด, ํธ์ถํฉ๋๋ค. mo์ ์ฝ๋ฐฑ์ ยซ records, mo ยป๋ฅผ ์ ๋ฌํ๊ณ "
report"์ ํจ๊ป, ์ฝ๋ฐฑ this ๊ฐ์ mo๋ก ์ง์ ํฉ๋๋ค.
-
-
๊ฐ๊ฐ์ ๋ํด signalSet์ slot์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด๋ฒคํธ ์ด๋ฆ์
slotchange์ด๋ฉฐ,bubbles์์ฑ์ true๋ก ์ค์ ํ๊ณ , slot์์ ๋ฐ์์ํต๋๋ค.
๊ฐ ๋ ธ๋์๋ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์ด ์์ผ๋ฉฐ(0๊ฐ ์ด์์ ๋ชฉ๋ก์ผ๋ก, ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ฅผ ํฌํจํฉ๋๋ค), ์ด๊ธฐ์๋ ๋น์ด ์์ต๋๋ค.
๋ฑ๋ก๋ ๊ด์ฐฐ์๋ ๊ด์ฐฐ์(
MutationObserver๊ฐ์ฒด)์ ์ต์ (MutationObserverInit์ฌ์ )์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ ๋ฑ๋ก๋ ๊ด์ฐฐ์์ด๋ฉฐ, ์ถ๊ฐ๋ก ์๋ณธ(๋ฑ๋ก๋ ๊ด์ฐฐ์ ์ค ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๊ฐ ์๋ ๊ฒ)๋ ํฌํจํฉ๋๋ค.
์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ ํน์ ๋ ธ๋์ ์์์์ ๋ ธ๋๊ฐ ์ ๊ฑฐ๋๊ฑฐ๋ ์ด๋๋ ํ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ฅผ ํตํด
subtree๊ฐ ๋ ธ๋์ ์ด์ ๋ถ๋ชจ์์ true๋ก ์ค์ ๋์์ ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋๋ฝ๋์ง ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ๊ด์ฐฐ์๋ ๋ค์์ ๋ณ๊ฒฝ ๊ด์ฐฐ์์๊ฒ ์๋ฆด ๋ ์ ๊ฑฐ๋ฉ๋๋ค.๋ ธ๋ node์ ๋ ธ๋ parent๊ฐ ์ฃผ์ด์ก์ ๋ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด:
-
parent์ ๊ฐ ํฌ๊ด์ ์กฐ์ inclusiveAncestor์ ๋ํด, ์ด์ด์ ๊ฐ๊ฐ์ ๋ํด registered๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋์์ inclusiveAncestor์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์ ๋๋ค:
-
registered์ ์ต์ ["
subtree"]๊ฐ false์ด๋ฉด, ๊ณ์ํฉ๋๋ค. -
observer๋ฅผ registered์ ๊ด์ฐฐ์๋ก ์ค์ ํฉ๋๋ค.
-
registered๊ฐ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ผ๋ฉด ์๋ณธ์ source๋ก ์ค์ ํฉ๋๋ค. ํด๋น registered๊ฐ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๊ฐ ์๋๋ฉด registered ์์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
node์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์ ํฌํจ๋์ด ์๋ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์์ ์๋ณธ์ด source๋ผ๋ฉด ๊ณ์ํฉ๋๋ค.
-
์ถ๊ฐํฉ๋๋ค. ์๋ก์ด ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์์ ๊ด์ฐฐ์๋ observer, ์ต์ ์ source์ ์ต์ , ์๋ณธ์ source์ด๋ฉฐ, node์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
-
์ถ๊ฐํฉ๋๋ค. node์ ๋ํ ์ฝํ ์ฐธ์กฐ๋ฅผ observer์ ์ผ์์ ๋ ธ๋ ์งํฉ์ ์ถ๊ฐํฉ๋๋ค.
-
์ถ๊ฐํฉ๋๋ค. observer๋ฅผ ์ฃผ๋ณ ์์ด์ ํธ์ ๋๊ธฐ ์ค์ธ ๋ณ๊ฒฝ ๊ด์ฐฐ์์ ์ถ๊ฐํฉ๋๋ค.
์ด๋ฅผ ํตํด node์ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๊ฐ ์ ๊ฑฐ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ค์์ ๋ณ๊ฒฝ ๊ด์ฐฐ์์๊ฒ ์๋ฆด ๋,
MutationRecord๊ฐ์ฒด๊ฐ ํ์ ์ถ๊ฐ๋์ง ์๋๋ผ๋ observer์ ๋ํด ์ ๊ฑฐ๋ฉ๋๋ค. -
๋ณ๊ฒฝ ๊ด์ฐฐ์ ๋ง์ดํฌ๋กํ์คํฌ๋ฅผ ํ์ ์ถ๊ฐํฉ๋๋ค.
-
MutationObserver๊ฐ์ฒด observer์ ๋ํด ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด:-
๊ฐ๊ฐ์ ๋ํด observer์ ์ผ์์ ๋ ธ๋ ์งํฉ์ ์๋ ๊ฐ node์์ ์ ๊ฑฐํฉ๋๋ค. ๋ชจ๋ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์ ์ค ๊ด์ฐฐ์๊ฐ observer์ธ ํญ๋ชฉ์ node์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์์ ์ ๊ฑฐํฉ๋๋ค.
-
๋น์๋๋ค. ๋์์ observer์ ์ผ์์ ๋ ธ๋ ์งํฉ์ ๋๋ค.
4.3.1. ์ธํฐํ์ด์ค
MutationObserver[
Exposed =Window ]interface {MutationObserver constructor (MutationCallback );callback undefined observe (Node ,target optional MutationObserverInit = {});options undefined disconnect ();sequence <MutationRecord >takeRecords (); };callback =MutationCallback undefined (sequence <MutationRecord >,mutations MutationObserver );observer dictionary {MutationObserverInit boolean =childList false ;boolean ;attributes boolean ;characterData boolean =subtree false ;boolean ;attributeOldValue boolean ;characterDataOldValue sequence <DOMString >; };attributeFilter MutationObserver๊ฐ์ฒด๋ ํธ๋ฆฌ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด์ฐฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ์ ๋๋ค.๊ฐ
MutationObserver๊ฐ์ฒด์๋ ๋ค์๊ณผ ๊ฐ์ ๊ด๋ จ ๊ฐ๋ ์ด ์์ต๋๋ค.- ์์ฑ ์ ์ค์ ๋๋ ์ฝ๋ฐฑ์ ๋๋ค.
- ์์ฑ ์ ์ค์ ๋๋ ์์ฑ ์ธ๋ฑ์ค(์ซ์)์ ๋๋ค.
- ๋ ธ๋ ๋ชฉ๋ก(์ฝํ ์ฐธ์กฐ์ ๋ชฉ๋ก์ด๋ฉฐ, ๋ ธ๋์ ๋ํ ์ฐธ์กฐ๋ฅผ ํฌํจํฉ๋๋ค)์ ์ด๊ธฐ์๋ ๋น์ด ์์ต๋๋ค.
- ์ผ์์ ๋ ธ๋ ์งํฉ(์ฝํ ์ฐธ์กฐ์ ์งํฉ์ด๋ฉฐ, ๋ค์์ ๋ํ ์ฐธ์กฐ๋ฅผ ํฌํจํฉ๋๋ค. ๋ ธ๋)์ด๋ฉฐ, ์ด๊ธฐ์๋ ๋น์ด ์์ต๋๋ค.
- ๋ ์ฝ๋ ํ(0๊ฐ ์ด์์ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ํ์ด๋ฉฐ,
๋ค์ ๊ฐ์ฒด๋ฅผ ํฌํจํฉ๋๋ค.
MutationRecord๊ฐ์ฒด)์ด๋ฉฐ, ์ด๊ธฐ์๋ ๋น์ด ์์ต๋๋ค.
observer = newMutationObserver(callback)MutationObserver๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฝ๋ฐฑ์ callback์ผ๋ก ์ค์ ํฉ๋๋ค. callback์MutationRecord๊ฐ์ฒด์ ๋ชฉ๋ก์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก, ์์ฑ๋MutationObserver๊ฐ์ฒด๋ฅผ ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์ ํธ์ถ๋ฉ๋๋ค. ์ด ์ฝ๋ฐฑ์ ๋ ธ๋๊ฐobserve()๋ฉ์๋๋ก ๋ฑ๋ก๋ ํ ๋ณ๊ฒฝ๋๋ฉด ํธ์ถ๋ฉ๋๋ค.observer .observe(target, options)-
์ฌ์ฉ์ ์์ด์ ํธ์ ์ง์ ๋ target์ ๊ด์ฐฐํ๊ณ
(๋
ธ๋) ๋ฐ์ํ๋ ๋ชจ๋
๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๊ณ ํ๋๋ก ์ง์ํฉ๋๋ค. ๋ณด๊ณ ๊ธฐ์ค์
options(๊ฐ์ฒด)๋ก ์ง์ ํฉ๋๋ค.
options ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ๋ฉค๋ฒ๋ฅผ ํตํด ๋ณ๊ฒฝ ์ฌํญ ๊ด์ฐฐ ์ต์ ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด ๋ฉค๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
childList- target์ ์์์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด์ฐฐํ๋ ค๋ฉด true๋ก ์ค์ ํฉ๋๋ค.
attributes- target์
์์ฑ์ ๋ํ ๋ณ๊ฒฝ
์ฌํญ์
๊ด์ฐฐํ๋ ค๋ฉด true๋ก ์ค์ ํฉ๋๋ค.
๋ค์ ํญ๋ชฉ์ ์ง์ ํ ๊ฒฝ์ฐ ์๋ตํ ์ ์์ต๋๋ค.
attributeOldValue๋๋attributeFilter๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ์ ๋๋ค. characterData- target์
๋ฐ์ดํฐ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์
๊ด์ฐฐํ๋ ค๋ฉด true๋ก ์ค์ ํฉ๋๋ค.
๋ค์ ํญ๋ชฉ์ด ์ง์ ๋ ๊ฒฝ์ฐ ์๋ตํ ์ ์์ต๋๋ค.
characterDataOldValue๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ์ ๋๋ค. subtree- target๋ฟ๋ง ์๋๋ผ target์ ์์์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ๋ ๊ด์ฐฐํ๋ ค๋ฉด true๋ก ์ค์ ํฉ๋๋ค.
attributeOldValue- ๋ค์ ์กฐ๊ฑด์ ํด๋นํ๋ฉด true๋ก ์ค์ ํฉ๋๋ค.
attributes๊ฐ true์ด๊ฑฐ๋ ์๋ต๋์์ผ๋ฉฐ, target์ ์์ฑ ๊ฐ์ ๋ณ๊ฒฝ ์ ์ ๊ธฐ๋กํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. characterDataOldValue- ๋ค์ ์กฐ๊ฑด์ ํด๋นํ๋ฉด true๋ก ์ค์ ํฉ๋๋ค.
characterData๊ฐ true๋ก ์ค์ ๋๊ฑฐ๋ ์๋ต๋์์ผ๋ฉฐ, target์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ ์ ์ ๊ธฐ๋กํด์ผ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค. attributeFilter- ์์ฑ์
๋ก์ปฌ ์ด๋ฆ ๋ชฉ๋ก์ผ๋ก ์ค์ ํฉ๋๋ค(๋ค์์คํ์ด์ค ์ ์ธ).
๋ชจ๋
์์ฑ
๋ณ๊ฒฝ ์ฌํญ์
๊ด์ฐฐํ ํ์๊ฐ ์๊ณ
attributes๊ฐ true์ด๊ฑฐ๋ ์๋ต๋ ๊ฒฝ์ฐ์ ๋๋ค.
observer .disconnect()- observer๊ฐ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด์ฐฐํ์ง ์๋๋ก ์ค์งํฉ๋๋ค.
observe()๋ฉ์๋๋ฅผ ๋ค์ ์ฌ์ฉํ ๋๊น์ง observer์ ์ฝ๋ฐฑ์ ํธ์ถ๋์ง ์์ต๋๋ค. observer .takeRecords()- ๋ ์ฝ๋ ํ๋ฅผ ๋น์ฐ๊ณ ํ์ ์๋ ๋ด์ฉ์ ๋ฐํํฉ๋๋ค.
new MutationObserver(callback)์์ฑ์์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
this์ ์์ฑ ์ธ๋ฑ์ค๋ฅผ this์ ๊ด๋ จ ์์ด์ ํธ์ ๋ณ๊ฒฝ ๊ด์ฐฐ์ ์นด์ดํฐ๋ก ์ค์ ํฉ๋๋ค.
-
this์ ๊ด๋ จ ์์ด์ ํธ์ ๋ณ๊ฒฝ ๊ด์ฐฐ์ ์นด์ดํฐ๋ฅผ 1 ์ฆ๊ฐ์ํต๋๋ค.
observe(target, options)๋ฉ์๋์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
options["
attributeOldValue"] ๋๋ options["attributeFilter"] ์ค ํ๋๊ฐ ์กด์ฌํ๊ณ , options["attributes"]๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด, options["attributes"]๋ฅผ true๋ก ์ค์ ํฉ๋๋ค. -
options["
characterDataOldValue"]๊ฐ ์กด์ฌํ๊ณ options["characterData"]๊ฐ ๋ค์ ์กฐ๊ฑด์ ํด๋นํ๋ฉด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, options["characterData"]๋ฅผ true๋ก ์ค์ ํฉ๋๋ค. -
options["
childList"], options["attributes"], ๊ทธ๋ฆฌ๊ณ options["characterData"] ์ค true์ธ ํญ๋ชฉ์ด ํ๋๋ ์์ผ๋ฉด ์์ธ๋ฅผ ๋์ง๋๋ค.TypeError์ ๋๋ค. -
options["
attributeOldValue"]๊ฐ true์ด๊ณ options["attributes"]๊ฐ false์ด๋ฉด ์์ธ๋ฅผ ๋์ง๋๋ค.TypeError์ ๋๋ค. -
options["
attributeFilter"]๊ฐ ์กด์ฌํ๊ณ , options["attributes"]๊ฐ false์ด๋ฉด ์์ธ๋ฅผ ๋์ง๋๋ค.TypeError์ ๋๋ค. -
options["
characterDataOldValue"]๊ฐ true์ด๊ณ options["characterData"]๊ฐ false์ด๋ฉด ์์ธ๋ฅผ ๋์ง๋๋ค.TypeError์ ๋๋ค. -
registered๋ฅผ target์ ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์ ์์ผ๋ฉฐ, ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๊ฐ ์๋๊ณ ๊ด์ฐฐ์๊ฐ this์ธ ํญ๋ชฉ์ ๋๋ค. ํด๋น ํญ๋ชฉ์ด ์์ผ๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
target์ด this๊ฐ ๊ด์ฐฐํ๋ ํ์ ํธ๋ฆฌ์ ์์๊ณ ์ ๊ฑฐ๋๊ฑฐ๋ ์ด๋๋์๋ค๋ฉด, target์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์๋ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๊ฐ ํฌํจ๋ ์ ์์ผ๋ฉฐ, ์ด๋ค์ ๊ด์ฐฐ์๋ this์ ๋๋ค. ์ด๋ฌํ ํญ๋ชฉ์ ๋ค์์ ๋ณ๊ฒฝ ๊ด์ฐฐ์์๊ฒ ์๋ฆด ๋ ์ ๊ฑฐ๋๋ฏ๋ก ๋ฌด์ํฉ๋๋ค.
-
registered๊ฐ null์ด ์๋๋ฉด:
-
๊ฐ๊ฐ์ ๋ํด this์ ์ผ์์ ๋ ธ๋ ์งํฉ์ ์๋ ๊ฐ node์์ ์ ๊ฑฐํฉ๋๋ค. ๋ชจ๋ ์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์ ์ค ์๋ณธ์ด registered์ธ ํญ๋ชฉ์ node์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์์ ์ ๊ฑฐํฉ๋๋ค.
-
registered์ ์ต์ ์ options๋ก ์ค์ ํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
์ถ๊ฐํฉ๋๋ค. ์๋ก์ด ๋ฑ๋ก๋ ๊ด์ฐฐ์์ ๊ด์ฐฐ์๋ this์ด๊ณ ์ต์ ์ options์ด๋ฉฐ, target์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
-
์ถ๊ฐํฉ๋๋ค. target์ ๋ํ ์ฝํ ์ฐธ์กฐ๋ฅผ this์ ๋ ธ๋ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
-
disconnect()๋ฉ์๋์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
๊ฐ๊ฐ์ ๋ํด this์ ๋ ธ๋ ๋ชฉ๋ก์ ์๋ ๊ฐ node์์ ์ ๊ฑฐํฉ๋๋ค. ๋ชจ๋ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ์ค node์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์์ this๊ฐ ๊ด์ฐฐ์์ธ ํญ๋ชฉ์ ์ ๊ฑฐํฉ๋๋ค.
-
์ผ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ด์ฐฐ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋์์ this์ ๋๋ค.
-
๋น์๋๋ค. ๋์์ this์ ๋ ธ๋ ๋ชฉ๋ก์ ๋๋ค.
-
๋น์๋๋ค. ๋์์ this์ ๋ ์ฝ๋ ํ์ ๋๋ค.
takeRecords()๋ฉ์๋์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
records๋ฅผ ๋ณต์ ๋ณธ์ผ๋ก ์ค์ ํฉ๋๋ค. ๋์์ this์ ๋ ์ฝ๋ ํ์ ๋๋ค.
-
๋น์๋๋ค. ๋์์ this์ ๋ ์ฝ๋ ํ์ ๋๋ค.
-
records๋ฅผ ๋ฐํํฉ๋๋ค.
4.3.2. ๋ณ์ด ๋ ์ฝ๋ ํ์
๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ๋ ์ฝ๋๋ฅผ ํ์ ์ถ๊ฐํฉ๋๋ค. type์ ์ ํ์ผ๋ก, target์ ๋์์ผ๋ก ํ๋ฉฐ name, namespace, oldValue, addedNodes, removedNodes, previousSibling, nextSibling์ด ์ฃผ์ด์ง๋๋ค:
-
interestedObservers๋ฅผ ๋น ๋งต์ผ๋ก ์ค์ ํฉ๋๋ค.
-
nodes๋ฅผ target์ ํฌ๊ด์ ์กฐ์์ผ๋ก ์ค์ ํฉ๋๋ค.
-
nodes์ ๊ฐ node์ ๋ํด, ์ด์ด์ ๊ฐ๊ฐ์ ๋ํด node์ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก์ ์๋ registered๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค:
-
options๋ฅผ registered์ ์ต์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
๋ค์ ์กฐ๊ฑด ์ค ์ด๋ ๊ฒ๋ ์ฐธ์ด ์๋๋ฉด
- node๊ฐ target์ด ์๋๊ณ
options["
subtree"]๊ฐ false์ธ ๊ฒฝ์ฐ - type์ด "
attributes"์ด๊ณ options["attributes"]๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋ false์ธ ๊ฒฝ์ฐ - type์ด "
attributes"์ด๊ณ , options["attributeFilter"]๊ฐ ์กด์ฌํ๋ฉฐ, options["attributeFilter"]์ name์ด ํฌํจ๋์ด ์์ง ์๊ฑฐ๋ namespace๊ฐ null์ด ์๋ ๊ฒฝ์ฐ - type์ด "
characterData"์ด๊ณ options["characterData"]๊ฐ ๋ค์ ์ค ํ๋์ ํด๋นํ๋ ๊ฒฝ์ฐ: ์กด์ฌํ์ง ์๊ฑฐ๋ false์ธ ๊ฒฝ์ฐ - type์ด "
childList"์ด๊ณ options["childList"]๊ฐ false์ธ ๊ฒฝ์ฐ
๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค:
-
mo๋ฅผ registered์ ๊ด์ฐฐ์๋ก ์ค์ ํฉ๋๋ค.
-
interestedObservers[mo]๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด, interestedObservers[mo]๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ์ null์ ๋๋ค.
-
type์ด "
attributes"์ด๊ณ options["attributeOldValue"]๊ฐ true์ด๊ฑฐ๋, type์ด "characterData"์ด๊ณ options["characterDataOldValue"]๊ฐ true์ด๋ฉด, interestedObservers[mo]๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ์ oldValue์ ๋๋ค.
- node๊ฐ target์ด ์๋๊ณ
options["
-
-
interestedObservers๊ฐ ๋น์ด ์์ผ๋ฉด, ๋ฐํํฉ๋๋ค.
-
๊ฐ๊ฐ์ ๋ํด interestedObservers์ observer โ mappedOldValue๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค:
-
record๋ฅผ ์๋ก์ด
MutationRecord๊ฐ์ฒด๋ก ์ค์ ํฉ๋๋ค. ์ด ๊ฐ์ฒด์type์ type์ผ๋ก,target์ target์ผ๋ก,attributeName์ name์ผ๋ก,attributeNamespace๋ namespace๋ก,oldValue๋ mappedOldValue๋ก,addedNodes๋ addedNodes๋ก,removedNodes๋ removedNodes๋ก,previousSibling์ previousSibling์ผ๋ก, ๊ทธ๋ฆฌ๊ณnextSibling์ nextSibling์ผ๋ก ์ค์ ํฉ๋๋ค. -
record๋ฅผ observer์ ํ์ ์ถ๊ฐํฉ๋๋ค. ๋์์ ๋ ์ฝ๋ ํ์ ๋๋ค.
-
observer๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋์์ ์ฃผ๋ณ ์์ด์ ํธ์ ๋๊ธฐ ์ค์ธ ๋ณ๊ฒฝ ๊ด์ฐฐ์์ ๋๋ค.
-
-
๋ณ๊ฒฝ ๊ด์ฐฐ์ ๋ง์ดํฌ๋กํ์คํฌ๋ฅผ ํ์ ์ถ๊ฐํฉ๋๋ค.
ํธ๋ฆฌ ๊ตฌ์กฐ ๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ์ถ๊ฐํ๋ค๋ฅผ target๊ณผ addedNodes, removedNodes, previousSibling, nextSibling์ผ๋ก ์ํํ๋ ค๋ฉด:
-
Assert: addedNodes ๋๋ removedNodes๊ฐ ๋น์ด์์ง ์์์ ๋ณด์ฅํ๋ค.
-
๋ณ์ด ๋ ์ฝ๋๋ฅผ ํ์ ์ถ๊ฐํ๋ค๋ฅผ "
childList" ํ์ ์ผ๋ก, target์ ๋ํด, null, null, null, addedNodes, removedNodes, previousSibling, nextSibling๊ณผ ํจ๊ป ์ํํ๋ค.
4.3.3. ์ธํฐํ์ด์ค
MutationRecord[
Exposed =Window ]interface {MutationRecord readonly attribute DOMString type ; [SameObject ]readonly attribute Node target ; [SameObject ]readonly attribute NodeList addedNodes ; [SameObject ]readonly attribute NodeList removedNodes ;readonly attribute Node ?previousSibling ;readonly attribute Node ?nextSibling ;readonly attribute DOMString ?attributeName ;readonly attribute DOMString ?attributeNamespace ;readonly attribute DOMString ?oldValue ; };record .type- "
attributes"๋ ์์ฑ ๋ณ๊ฒฝ์ผ ๋ ๋ฐํํฉ๋๋ค. "characterData"๋CharacterData๋ ธ๋๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ "childList"๋ ํธ๋ฆฌ์ ์ํ ๋ ธ๋์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฐํํฉ๋๋ค. record .target- ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ์ ๋
ธ๋๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐํ๊ฐ์ ๋ณ๊ฒฝ
์ ํ์ธ
type์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. "attributes"์ธ ๊ฒฝ์ฐ์๋ ์์์ด๋ฉฐ, ํด๋น ์์์ ์์ฑ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ํ "characterData"์ธ ๊ฒฝ์ฐ์๋CharacterData๋ ธ๋์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ "childList"์ธ ๊ฒฝ์ฐ์๋ ๋ ธ๋์ด๋ฉฐ, ํด๋น ๋ ธ๋์ ์์์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. record .addedNodesrecord .removedNodes- ์ถ๊ฐ๋ ๋ ธ๋์ ์ ๊ฑฐ๋ ๋ ธ๋๋ฅผ ๊ฐ๊ฐ ๋ฐํํฉ๋๋ค.
record .previousSiblingrecord .nextSibling- ๊ฐ๊ฐ ์ด์ ํ์ ๋ ธ๋์ ๋ค์ ํ์ ๋ ธ๋๋ฅผ ๋ฐํํ๋ฉฐ, ์ด๋ ์ถ๊ฐ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค. ๊ทธ ์ธ์๋ null์ ๋ฐํํฉ๋๋ค.
record .attributeName- ๋ณ๊ฒฝ๋ ์์ฑ์ ๋ก์ปฌ ์ด๋ฆ์ ๋ฐํํ๋ฉฐ, ํด๋น ์์ฑ์ด ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
record .attributeNamespace- ๋ณ๊ฒฝ๋ ์์ฑ์ ๋ค์์คํ์ด์ค๋ฅผ ๋ฐํํ๋ฉฐ, ํด๋น ์์ฑ์ด ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
record .oldValue- ๋ฐํ๊ฐ์
type์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, "attributes"์ ๊ฒฝ์ฐ ๊ฐ์ ๋ฐํํฉ๋๋ค. ์ด๋ ๋ณ๊ฒฝ๋ ์์ฑ์ ๋ณ๊ฒฝ ์ ๊ฐ์ ๋๋ค. "characterData"์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ฉฐ, ์ด๋ ๋ณ๊ฒฝ๋ ๋ ธ๋์ ๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ "childList"์ ๊ฒฝ์ฐ null์ ๋๋ค.
type,target,addedNodes,removedNodes,previousSibling,nextSibling,attributeName,attributeNamespace, ๊ทธ๋ฆฌ๊ณoldValue์์ฑ์ ์ด๊ธฐํ๋ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค.4.4. ์ธํฐํ์ด์ค
Node[
Exposed =Window ]interface :Node EventTarget {const unsigned short ELEMENT_NODE = 1;const unsigned short ATTRIBUTE_NODE = 2;const unsigned short TEXT_NODE = 3;const unsigned short CDATA_SECTION_NODE = 4;const unsigned short = 5; // legacyENTITY_REFERENCE_NODE const unsigned short = 6; // legacyENTITY_NODE const unsigned short PROCESSING_INSTRUCTION_NODE = 7;const unsigned short COMMENT_NODE = 8;const unsigned short DOCUMENT_NODE = 9;const unsigned short DOCUMENT_TYPE_NODE = 10;const unsigned short DOCUMENT_FRAGMENT_NODE = 11;const unsigned short = 12; // legacyNOTATION_NODE readonly attribute unsigned short nodeType ;readonly attribute DOMString nodeName ;readonly attribute USVString baseURI ;readonly attribute boolean isConnected ;readonly attribute Document ?ownerDocument ;Node getRootNode (optional GetRootNodeOptions = {});options readonly attribute Node ?parentNode ;readonly attribute Element ?parentElement ;boolean hasChildNodes (); [SameObject ]readonly attribute NodeList childNodes ;readonly attribute Node ?firstChild ;readonly attribute Node ?lastChild ;readonly attribute Node ?previousSibling ;readonly attribute Node ?nextSibling ; [CEReactions ]attribute DOMString ?nodeValue ; [CEReactions ]attribute DOMString ?textContent ; [CEReactions ]undefined normalize (); [CEReactions ,NewObject ]Node cloneNode (optional boolean =subtree false );boolean isEqualNode (Node ?);otherNode boolean isSameNode (Node ?); // legacy alias of ===otherNode const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;unsigned short compareDocumentPosition (Node );other boolean contains (Node ?);other DOMString ?lookupPrefix (DOMString ?);namespace DOMString ?lookupNamespaceURI (DOMString ?);prefix boolean isDefaultNamespace (DOMString ?); [namespace CEReactions ]Node insertBefore (Node ,node Node ?); [child CEReactions ]Node appendChild (Node ); [node CEReactions ]Node replaceChild (Node ,node Node ); [child CEReactions ]Node removeChild (Node ); };child dictionary {GetRootNodeOptions boolean =composed false ; };Node๋ ๋ชจ๋ ๋ ธ๋์์ ์ฌ์ฉํ๋ ์ถ์ ์ธํฐํ์ด์ค์ ๋๋ค. ์ด ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์ง์ ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค.๊ฐ ๋ ธ๋์๋ ์ฐ๊ฒฐ๋ ๋ ธ๋ ๋ฌธ์๊ฐ ์์ผ๋ฉฐ, ์์ฑ ์ ์ค์ ๋๊ณ ๋ฌธ์์ ๋๋ค.
๋ ธ๋์ ๋ ธ๋ ๋ฌธ์๋ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ ธ๋์ ๋ถ๋ชจ ๊ฐ์ ธ์ค๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ event๊ฐ ์ฃผ์ด์ง๋ฉด ๋ ธ๋๊ฐ ํ ๋น๋ ๊ฒฝ์ฐ ๋ ธ๋์ ํ ๋น๋ ์ฌ๋กฏ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ ธ๋์ ๋ถ๋ชจ๋ฅผ ๋ฐํํฉ๋๋ค.
๊ฐ ๋ ธ๋์๋ ๋ฑ๋ก๋ ๊ด์ฐฐ์ ๋ชฉ๋ก๋ ์์ต๋๋ค.
์ธํฐํ์ด์ค interface๋ฅผ ๊ตฌํํ๋ ๋ ธ๋๋ฅผ ์์ฑํ๋ ค๋ฉด, ๋ฌธ์ document๊ฐ ์ฃผ์ด์ก์ ๋ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
-
๋จ์ธ: interface๋
Document๋ ์๋๊ณ ๋ค์๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค๋ ์๋๋๋ค: ์์ ๋์์ดDocument์ธ ์ธํฐํ์ด์ค. ์ ๋ฌธ์๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ฌธ์ ์์ฑ์ ๋์ ์ฌ์ฉํฉ๋๋ค. -
์ ๋ ธ๋๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๋ ธ๋๋ ๊ตฌํ ๋์์ด interface์ด๋ฉฐ, document์ ๊ด๋ จ ๋ ๋ฆ์ ์๊ณ , ๋ ธ๋ ๋ฌธ์๊ฐ document๋ก ์ค์ ๋์ด ์์ต๋๋ค.
node .nodeType-
node์ ์ ํ์ ํด๋นํ๋ ์ซ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ฐํํฉ๋๋ค.
Element(1).Node.ELEMENT_NODEAttr(2).Node.ATTRIBUTE_NODE- ๋ฐฐํ์
Text๋ ธ๋ (3).Node.TEXT_NODECDATASection(4).Node.CDATA_SECTION_NODEProcessingInstruction(7).Node.PROCESSING_INSTRUCTION_NODEComment(8).Node.COMMENT_NODEDocument(9).Node.DOCUMENT_NODEDocumentType(10).Node.DOCUMENT_TYPE_NODEDocumentFragment(11).Node.DOCUMENT_FRAGMENT_NODE
node .nodeName-
node์ ์ ํ์ ํด๋นํ๋ ๋ฌธ์์ด์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐํํฉ๋๋ค.
Element- ํด๋น ์์์ HTML ๋๋ฌธ์ํ๋ ํ์ ์ด๋ฆ์ ๋๋ค.
Attr- ํด๋น ์์ฑ์ ํ์ ์ด๋ฆ์ ๋๋ค.
- ๋ฐฐํ์
Text๋ ธ๋ - "
#text"์ ๋๋ค. CDATASection- "
#cdata-section"์ ๋๋ค. ProcessingInstruction- ํด๋น ์ฒ๋ฆฌ ๋ช ๋ น์ ๋์์ ๋๋ค.
Comment- "
#comment"์ ๋๋ค. Document- "
#document"์ ๋๋ค. DocumentType- ํด๋น ๋ฌธ์ ์ ํ์ ์ด๋ฆ์ ๋๋ค.
DocumentFragment- "
#document-fragment"์ ๋๋ค.
nodeType๊ฒํฐ ๋จ๊ณ์์๋ this๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ถ๊ธฐํ์ฌ ์ฒ์ ์ผ์นํ๋ ํญ๋ชฉ์ ๋ฐํํฉ๋๋ค.ElementELEMENT_NODE(1)AttrATTRIBUTE_NODE(2);- ๋ฐฐํ์
Text๋ ธ๋ TEXT_NODE(3);CDATASectionCDATA_SECTION_NODE(4);ProcessingInstructionPROCESSING_INSTRUCTION_NODE(7);CommentCOMMENT_NODE(8);DocumentDOCUMENT_NODE(9);DocumentTypeDOCUMENT_TYPE_NODE(10);DocumentFragmentDOCUMENT_FRAGMENT_NODE(11).
nodeName๊ฒํฐ ๋จ๊ณ์์๋ this๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ถ๊ธฐํ์ฌ ์ฒ์ ์ผ์นํ๋ ํญ๋ชฉ์ ๋ฐํํฉ๋๋ค.Element- ํด๋น ์์์ HTML ๋๋ฌธ์ํ๋ ํ์ ์ด๋ฆ์ ๋๋ค.
Attr- ํด๋น ์์ฑ์ ํ์ ์ด๋ฆ์ ๋๋ค.
- ๋ฐฐํ์
Text๋ ธ๋ - "
#text"์ ๋๋ค. CDATASection- "
#cdata-section"์ ๋๋ค. ProcessingInstruction- ํด๋น ์ฒ๋ฆฌ ๋ช ๋ น์ ๋์์ ๋๋ค.
Comment- "
#comment"์ ๋๋ค. Document- "
#document"์ ๋๋ค. DocumentType- ํด๋น ๋ฌธ์ ์ ํ์ ์ด๋ฆ์ ๋๋ค.
DocumentFragment- "
#document-fragment"์ ๋๋ค.
node .baseURI- node์ ๋ ธ๋ ๋ฌธ์์ ๊ธฐ์ค URL์ ๋ฐํํฉ๋๋ค.
The
baseURIgetter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
baseURL์ this์ ๋ ธ๋ ๋ฌธ์์ ๊ธฐ์ค URL ๊ฐ์ ธ์ค๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
baseURL์ด null์ด๋ฉด baseURL์ this์ ๋ ธ๋ ๋ฌธ์์ URL๋ก ์ค์ ํฉ๋๋ค.
-
baseURL์ ์ง๋ ฌํํ์ฌ ๋ฐํํฉ๋๋ค.
node .isConnected-
node๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
node .ownerDocument- ๋ ธ๋ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฌธ์์ ๋ํด์๋ null์ ๋ฐํํฉ๋๋ค.
node .getRootNode()- node์ ๋ฃจํธ๋ฅผ ๋ฐํํฉ๋๋ค.
node . getRootNode({ composed:true })- node์ ์๋๋ฅผ ํฌํจํ๋ ๋ฃจํธ๋ฅผ ๋ฐํํฉ๋๋ค.
node .parentNode- ๋ถ๋ชจ๋ฅผ ๋ฐํํฉ๋๋ค.
node .parentElement- ๋ถ๋ชจ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
node .hasChildNodes()- node์ ์์์ด ์๋์ง ๋ฐํํฉ๋๋ค.
node .childNodes- ์์์ ๋ฐํํฉ๋๋ค.
node .firstChild- ์ฒซ ๋ฒ์งธ ์์์ ๋ฐํํฉ๋๋ค.
node .lastChild- ๋ง์ง๋ง ์์์ ๋ฐํํฉ๋๋ค.
node .previousSibling- ์ด์ ํ์ ๋ฅผ ๋ฐํํฉ๋๋ค.
node .nextSibling- ๋ค์ ํ์ ๋ฅผ ๋ฐํํฉ๋๋ค.
isConnectedgetter ๋จ๊ณ๋ this๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.ownerDocumentgetter ๋จ๊ณ๋ this๊ฐ ๋ฌธ์์ด๋ฉด null์, ๊ทธ๋ ์ง ์์ผ๋ฉด this์ ๋ ธ๋ ๋ฌธ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.๋ฌธ์์ ๋ ธ๋ ๋ฌธ์๋ ํด๋น ๋ฌธ์ ์์ฒด์ ๋๋ค. ๋ชจ๋ ๋ ธ๋์๋ ๋ ธ๋ ๋ฌธ์๊ฐ ํญ์ ์กด์ฌํฉ๋๋ค.
getRootNode(options)๋ฉ์๋ ๋จ๊ณ๋ options["composed"] ๊ฐ true์ด๋ฉด this์ ์๋๋ฅผ ํฌํจํ๋ ๋ฃจํธ๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด this์ ๋ฃจํธ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.parentNodegetter ๋จ๊ณ๋ this์ ๋ถ๋ชจ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.parentElementgetter ๋จ๊ณ๋ this์ ๋ถ๋ชจ ์์๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.hasChildNodes()๋ฉ์๋ ๋จ๊ณ๋ this์ ์์์ด ์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.childNodesgetter ๋จ๊ณ๋ this๋ฅผ ๋ฃจํธ๋ก ํ๋ฉฐ ์์๋ง ์ผ์น์ํค๋NodeList๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.firstChildgetter ๋จ๊ณ๋ this์ ์ฒซ ๋ฒ์งธ ์์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.lastChildgetter ๋จ๊ณ๋ this์ ๋ง์ง๋ง ์์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.previousSiblinggetter ๋จ๊ณ๋ this์ ์ด์ ํ์ ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.nextSiblinggetter ๋จ๊ณ๋ this์ ๋ค์ ํ์ ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
nodeValuegetter ๋จ๊ณ๋ this๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค์ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.Attr- this์ ๊ฐ.
CharacterData- this์ ๋ฐ์ดํฐ.
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
- Null.
nodeValuesetter ๋จ๊ณ๋ ์ฃผ์ด์ง ๊ฐ์ด null์ด๋ฉด ๋์ ๋น ๋ฌธ์์ด์ธ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ ๋ค์, this๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ์ํํ๋ ๊ฒ์ ๋๋ค.Attr-
๊ธฐ์กด ์์ฑ ๊ฐ ์ค์ ํ๊ธฐ๋ฅผ this ์ ์ฃผ์ด์ง ๊ฐ์ ์ฌ์ฉํ์ฌ ์ํํฉ๋๋ค.
CharacterData-
๋ฐ์ดํฐ ๋ฐ๊พธ๊ธฐ๋ฅผ this์ ๋ํด 0, this์ ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ ์ฃผ์ด์ง ๊ฐ์ ์ฌ์ฉํ์ฌ ์ํํฉ๋๋ค.
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
-
์๋ฌด ์์ ๋ ํ์ง ์์ต๋๋ค.
๋ ธ๋ node์ ๋ํด ํ ์คํธ ์ฝํ ์ธ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํํ๋ ค๋ฉด, node๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
DocumentFragmentElement- node์ ์์ ํ ์คํธ ์ฝํ ์ธ .
Attr- node์ ๊ฐ.
CharacterData- node์ ๋ฐ์ดํฐ.
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
- Null.
textContentgetter ๋จ๊ณ๋ this์ ๋ํด ํ ์คํธ ์ฝํ ์ธ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.๋ฌธ์์ด ์ ์ฒด ๋ฐ๊พธ๊ธฐ๋ฅผ ๋ฌธ์์ด string์ ์ฌ์ฉํ์ฌ ๋ ธ๋ parent ๋ด์์ ์ํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
node๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
string์ด ๋น ๋ฌธ์์ด์ด ์๋๋ฉด node๋ฅผ ํ ์คํธ ๋ ธ๋ ์์ฑํ๊ธฐ๋ฅผ parent์ ๋ ธ๋ ๋ฌธ์์ string์ ์ฌ์ฉํ์ฌ ์ํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
parent ๋ด์์ node๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ๋ฐ๊พธ๊ธฐ๋ฅผ ์ํํฉ๋๋ค.
๋ ธ๋ node์ ๋ฌธ์์ด value๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ์ฝํ ์ธ ์ค์ ํ๊ธฐ๋ฅผ ์ํํ๋ ค๋ฉด, node๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ์๋์ ์ ์๋ ๋๋ก ์ํํฉ๋๋ค.
DocumentFragmentElement-
node ๋ด์์ value๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ์ ์ฒด ๋ฐ๊พธ๊ธฐ๋ฅผ ์ํํฉ๋๋ค.
Attr-
node์ value๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ์์ฑ ๊ฐ ์ค์ ํ๊ธฐ๋ฅผ ์ํํฉ๋๋ค.
CharacterData-
node์ ๋ํด 0, node์ ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ value๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ฐ๊พธ๊ธฐ๋ฅผ ์ํํฉ๋๋ค.
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
-
์๋ฌด ์์ ๋ ํ์ง ์์ต๋๋ค.
textContentsetter ๋จ๊ณ๋ ์ฃผ์ด์ง ๊ฐ์ด null์ด๋ฉด ๋์ ๋น ๋ฌธ์์ด์ธ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ ๋ค์, ํ ์คํธ ์ฝํ ์ธ ์ค์ ํ๊ธฐ๋ฅผ this์ ์ฃผ์ด์ง ๊ฐ์ ์ฌ์ฉํ์ฌ ์คํํ๋ ๊ฒ์ ๋๋ค.
node .normalize()- ๋น์ด ์๋ ๋ฐฐํ์
Text๋ ธ๋๋ฅผ ์ ๊ฑฐํ๊ณ , ๋จ์ ์๋ ์ฐ์๋ ๋ฐฐํ์ Text๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ํด๋น ๋ ธ๋ ์ค ์ฒซ ๋ฒ์งธ ๋ ธ๋์ ์ฐ๊ฒฐํฉ๋๋ค.
normalize()๋ฉ์๋ ๋จ๊ณ๋ this์ ๊ฐ ์์ ๋ฐฐํ์ Text๋ ธ๋ node์ ๋ํด ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค.-
length๋ฅผ node์ ๊ธธ์ด๋ก ์ค์ ํฉ๋๋ค.
-
length๊ฐ 0์ด๋ฉด node๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ค์ ๋ฐฐํ์
Text๋ ธ๋๊ฐ ์์ผ๋ฉด ํด๋น ๋ ธ๋๋ก ๊ณ์ ์งํํฉ๋๋ค. -
data๋ฅผ node์ ์ฐ์๋ ๋ฐฐํ์
Text๋ ธ๋(์๊ธฐ ์์ ์ ์ธ)์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌ ์์๋๋ก ์ฐ๊ฒฐํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. -
node์ ๋ฐ์ดํฐ ๋ฐ๊พธ๊ธฐ๋ฅผ length, 0, data๋ฅผ ์ฌ์ฉํ์ฌ ์ํํฉ๋๋ค.
-
currentNode๋ฅผ node์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
currentNode๊ฐ ๋ฐฐํ์
Text๋ ธ๋์ธ ๋์:-
์์ ๋ ธ๋๊ฐ currentNode์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ํด๋น ์์ ์คํ์ ์ length๋ฅผ ๋ํ๊ณ ์์ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํฉ๋๋ค.
-
๋ ๋ ธ๋๊ฐ currentNode์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ํด๋น ๋ ์คํ์ ์ length๋ฅผ ๋ํ๊ณ ๋ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํฉ๋๋ค.
-
์์ ๋ ธ๋๊ฐ currentNode์ ๋ถ๋ชจ์ด๊ณ ์์ ์คํ์ ์ด currentNode์ ์ธ๋ฑ์ค์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ํด๋น ์์ ๋ ธ๋๋ฅผ node๋ก, ํด๋น ์์ ์คํ์ ์ length๋ก ์ค์ ํฉ๋๋ค.
-
๋ ๋ ธ๋๊ฐ currentNode์ ๋ถ๋ชจ์ด๊ณ ๋ ์คํ์ ์ด currentNode์ ์ธ๋ฑ์ค์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด: ํด๋น ๋ ๋ ธ๋๋ฅผ node๋ก, ํด๋น ๋ ์คํ์ ์ length๋ก ์ค์ ํฉ๋๋ค.
-
currentNode์ ๊ธธ์ด๋ฅผ length์ ๋ํฉ๋๋ค.
-
currentNode๋ฅผ ํด๋น ๋ ธ๋์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
-
node์ ์ฐ์๋ ๋ฐฐํ์
Text๋ ธ๋๋ฅผ (์๊ธฐ ์์ ์ ์ธ) ํธ๋ฆฌ ์์๋๋ก ์ ๊ฑฐํฉ๋๋ค.
node . cloneNode([subtree = false])- node์ ๋ณต์ฌ๋ณธ์ ๋ฐํํฉ๋๋ค. subtree๊ฐ true์ด๋ฉด ๋ณต์ฌ๋ณธ์ node์ ์์๋ ํฌํจ๋ฉ๋๋ค.
node . isEqualNode(otherNode)- node์ otherNode๊ฐ ๋์ผํ ์์ฑ์ ๊ฐ๋์ง ๋ฐํํฉ๋๋ค.
๋ช ์ธ๋ ๋ชจ๋ ๋ ธ๋ ๋๋ ์ผ๋ถ ๋ ธ๋์ ๋ํด ๋ณต์ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์๋ ๋ ธ๋ ๋ณต์ ํ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ช ์๋ ๋๋ก node, copy, subtree๊ฐ ์ ๋ฌ๋ฉ๋๋ค.HTML์
input,script, ๊ทธ๋ฆฌ๊ณtemplate๋ฑ์ ์ฌ๋ฌ ์์์ ๋ํด ๋ณต์ ๋จ๊ณ๋ฅผ ์ ์ํฉ๋๋ค. SVG๋ ํด๋นscript์์์ ๋ํด ๋์ผํ๊ฒ ์ ์ํด์ผ ํ์ง๋ง, ์ ์ํ์ง ์์ต๋๋ค.๋ ธ๋ node์ ์ ํ์ ๋ฌธ์ document (๊ธฐ๋ณธ๊ฐ์ node์ ๋ ธ๋ ๋ฌธ์), ๋ถ๋ฆฌ์ธ subtree(๊ธฐ๋ณธ๊ฐ false), ๋ ธ๋ ๋๋ null์ธ parent(๊ธฐ๋ณธ๊ฐ null), ๊ทธ๋ฆฌ๊ณ null ๋๋
CustomElementRegistry๊ฐ์ฒด fallbackRegistry (๊ธฐ๋ณธ๊ฐ null)๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ๋ณต์ ํ๊ธฐ๋ฅผ ์ํํ๋ ค๋ฉด:-
๋จ์ธ: node๋ ๋ฌธ์๊ฐ ์๋๊ฑฐ๋ node๊ฐ document์ ๋๋ค.
-
copy๋ฅผ node, document, fallbackRegistry๊ฐ ์ฃผ์ด์ก์ ๋ ๋จ์ผ ๋ ธ๋ ๋ณต์ ํ๊ธฐ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
node์ ๋ํด ์ ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ ๋ช ์ธ์ ์ ์๋ ๋ชจ๋ ๋ณต์ ๋จ๊ณ๋ฅผ ์คํํ๊ณ , node, copy, ๊ทธ๋ฆฌ๊ณ subtree๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํฉ๋๋ค.
-
parent๊ฐ null์ด ์๋๋ฉด copy๋ฅผ parent์ ์ถ๊ฐํฉ๋๋ค.
-
subtree๊ฐ true์ด๋ฉด node์ ์์ ๊ฐ๊ฐ์ ๋ํด ํธ๋ฆฌ ์์๋๋ก: child๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ๋ณต์ ํ๊ธฐ๋ฅผ ์ํํ๋, document๋ document๋ก, subtree๋ subtree๋ก, parent๋ copy๋ก, ๊ทธ๋ฆฌ๊ณ fallbackRegistry๋ fallbackRegistry๋ก ์ค์ ํฉ๋๋ค.
-
node๊ฐ ์์์ด๊ณ , node๊ฐ ์๋ ํธ์คํธ์ด๋ฉฐ, node์ ์๋ ๋ฃจํธ์ ๋ณต์ ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ true์ด๋ฉด:
-
๋จ์ธ: copy๋ ์๋ ํธ์คํธ๊ฐ ์๋๋๋ค.
-
shadowRootRegistry๋ฅผ node์ ์๋ ๋ฃจํธ์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค.
-
shadowRootRegistry๊ฐ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ด๋ฉด, shadowRootRegistry๋ฅผ document์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ์ ํจํ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค.
-
copy, node์ ์๋ ๋ฃจํธ์ ๋ชจ๋, node์ ์๋ ๋ฃจํธ์ ํฌ์ปค์ค ์์ ์ฌ๋ถ, node์ ์๋ ๋ฃจํธ์ ์ง๋ ฌํ ๊ฐ๋ฅ ์ฌ๋ถ, node์ ์๋ ๋ฃจํธ์ ์ฌ๋กฏ ํ ๋น, true, ๊ทธ๋ฆฌ๊ณ shadowRootRegistry๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ๋ฃจํธ ์ฐ๊ฒฐํ๊ธฐ๋ฅผ ์ํํฉ๋๋ค.
-
copy์ ์๋ ๋ฃจํธ์ ์ ์ธ์ ์ฌ๋ถ๋ฅผ node์ ์๋ ๋ฃจํธ์ ์ ์ธ์ ์ฌ๋ถ๋ก ์ค์ ํฉ๋๋ค.
-
copy์ ์๋ ๋ฃจํธ์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ null๋ก ์ ์ง๋ฅผ node์ ์๋ ๋ฃจํธ์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ null๋ก ์ ์ง๋ก ์ค์ ํฉ๋๋ค.
-
node์ ์๋ ๋ฃจํธ์ ์์ ๊ฐ๊ฐ์ ๋ํด ํธ๋ฆฌ ์์๋๋ก: child๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ๋ณต์ ํ๊ธฐ๋ฅผ ์ํํ๋, document๋ document๋ก, subtree๋ true๋ก, ๊ทธ๋ฆฌ๊ณ parent๋ copy์ ์๋ ๋ฃจํธ๋ก ์ค์ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ์๋์ ์ผ๋ก fallbackRegistry ์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ต๋๋ค.
-
-
copy๋ฅผ ๋ฐํํฉ๋๋ค.
๋ ธ๋ node, ๋ฌธ์ document, ๊ทธ๋ฆฌ๊ณ null ๋๋
CustomElementRegistry๊ฐ์ฒด fallbackRegistry๊ฐ ์ฃผ์ด์ก์ ๋ ๋จ์ผ ๋ ธ๋ ๋ณต์ ํ๊ธฐ๋ฅผ ์ํํ๋ ค๋ฉด:-
copy๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
node๊ฐ ์์์ด๋ฉด:
-
registry๋ฅผ node์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค.
-
registry๊ฐ null์ด๋ฉด registry๋ฅผ fallbackRegistry๋ก ์ค์ ํฉ๋๋ค.
-
registry๊ฐ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ด๋ฉด, registry๋ฅผ document์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ์ ํจํ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค.
-
copy๋ฅผ document, node์ ์ง์ญ ์ด๋ฆ, node์ ๋ค์์คํ์ด์ค, node์ ๋ค์์คํ์ด์ค ์ ๋์ฌ, node์
is๊ฐ, false, ๊ทธ๋ฆฌ๊ณ registry๊ฐ ์ฃผ์ด์ก์ ๋ ์์ ์์ฑํ๊ธฐ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. -
node์ ์์ฑ ๋ชฉ๋ก์ ์๋ attribute ๊ฐ๊ฐ์ ๋ํด ๋ค์์ ์ํํฉ๋๋ค:
-
copyAttribute๋ฅผ attribute, document, null์ด ์ฃผ์ด์ก์ ๋ ๋จ์ผ ๋ ธ๋ ๋ณต์ ํ๊ธฐ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
copyAttribute๋ฅผ copy์ ์ถ๊ฐํฉ๋๋ค.
-
-
-
๊ทธ๋ ์ง ์๊ณ node๊ฐ ๋ฌธ์์ด๋ฉด, copy๋ฅผ document์ ๊ด๋ จ ์์ญ์ด ์ฃผ์ด์ก์ ๋ ๋ฌธ์ ์์ฑํ๊ธฐ๋ฅผ ์ํํ์ฌ node์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฌธ์๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด copy๋ฅผ document๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ์์ฑํ๊ธฐ๋ฅผ ์ํํ์ฌ node์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ ธ๋๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
node๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค์ ์ถ๊ฐ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
Document-
-
copy์ ์ธ์ฝ๋ฉ, ์ฝํ ์ธ ์ ํ, URL, ์ถ์ฒ, ์ ํ, ๋ชจ๋, ๊ทธ๋ฆฌ๊ณ ์ ์ธ์ ์๋ ๋ฃจํธ ํ์ฉ ์ฌ๋ถ๋ฅผ node์ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
copy์ ๊ธฐ์ค URL ์ฌ์ ์๋ฅผ node์ ๊ธฐ์ค URL ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
node์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ true์ด๋ฉด, copy์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ node์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค.
-
DocumentType-
copy์ ์ด๋ฆ, ๊ณต๊ฐ ID, ๊ทธ๋ฆฌ๊ณ ์์คํ ID๋ฅผ node์ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
Attr-
copy์ ๋ค์์คํ์ด์ค, ๋ค์์คํ์ด์ค ์ ๋์ฌ, ์ง์ญ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ node์ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
TextComment-
copy์ ๋ฐ์ดํฐ๋ฅผ node์ ๋ฐ์ดํฐ๋ก ์ค์ ํฉ๋๋ค.
ProcessingInstruction-
copy์ ๋์๊ณผ ๋ฐ์ดํฐ๋ฅผ node์ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
-
์๋ฌด ์์ ๋ ํ์ง ์์ต๋๋ค.
-
node๊ฐ ๋ฌธ์์ด๋ฉด document๋ฅผ copy๋ก ์ค์ ํฉ๋๋ค.
-
copy์ ๋ ธ๋ ๋ฌธ์๋ฅผ document๋ก ์ค์ ํฉ๋๋ค.
-
copy๋ฅผ ๋ฐํํฉ๋๋ค.
cloneNode(subtree)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
this๊ฐ ์๋ ๋ฃจํธ์ด๋ฉด "
NotSupportedError"DOMException์ ๋์ง๋๋ค. -
this๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ๋ณต์ ํ๊ธฐ๋ฅผ ์ํํ๋, subtree๋ฅผ subtree๋ก ์ค์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๋ ธ๋ A๋ ๋ค์ ์กฐ๊ฑด์ด ๋ชจ๋ ์ฐธ์ด๋ฉด ๋ ธ๋ B์ ๋๋ฑํฉ๋๋ค.
-
A์ B๊ฐ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
-
A๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค์ ํญ๋ชฉ์ด ์๋ก ๊ฐ์ต๋๋ค.
DocumentType- ํด๋น ์ด๋ฆ, ๊ณต๊ฐ ID, ๊ทธ๋ฆฌ๊ณ ์์คํ ID.
Element- ํด๋น ๋ค์์คํ์ด์ค, ๋ค์์คํ์ด์ค ์ ๋์ฌ, ์ง์ญ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ ํด๋น ์์ฑ ๋ชฉ๋ก์ ํฌ๊ธฐ.
Attr- ํด๋น ๋ค์์คํ์ด์ค, ์ง์ญ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ ๊ฐ.
ProcessingInstruction- ํด๋น ๋์๊ณผ ๋ฐ์ดํฐ.
TextComment- ํด๋น ๋ฐ์ดํฐ.
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
- โ
-
A๊ฐ ์์์ด๋ฉด, ํด๋น ์์ฑ ๋ชฉ๋ก์ ๊ฐ ์์ฑ์ B์ ์์ฑ ๋ชฉ๋ก์ ์๋ ์์ฑ๊ณผ ๋๋ฑํฉ๋๋ค.
-
A์ B๋ ๋์ผํ ์์ ์์์ ๊ฐ์ต๋๋ค.
-
A์ ๊ฐ ์์์ ๋์ผํ ์ธ๋ฑ์ค์ ์๋ B์ ์์๊ณผ ๋๋ฑํฉ๋๋ค.
isEqualNode(otherNode)๋ฉ์๋ ๋จ๊ณ๋ otherNode๊ฐ null์ด ์๋๊ณ this๊ฐ otherNode์ ๋๋ฑํ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.isSameNode(otherNode)๋ฉ์๋ ๋จ๊ณ๋ otherNode๊ฐ this์ด๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
node .compareDocumentPosition(other)-
node์ ๋ํ other์ ์๋์ ์์น๋ฅผ ๋ํ๋ด๋
๋นํธ๋ง์คํฌ๋ฅผ ๋ฐํํฉ๋๋ค. ์ค์ ํ ์ ์๋ ๋นํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(1)Node.DOCUMENT_POSITION_DISCONNECTED- node์ other๊ฐ ๋์ผํ ํธ๋ฆฌ์ ์์ง ์์ผ๋ฉด ์ค์ ๋ฉ๋๋ค.
(2)Node.DOCUMENT_POSITION_PRECEDING- other๊ฐ node๋ณด๋ค ์์ ์์ผ๋ฉด ์ค์ ๋ฉ๋๋ค.
(4)Node.DOCUMENT_POSITION_FOLLOWING- other๊ฐ node๋ณด๋ค ๋ค์ ์์ผ๋ฉด ์ค์ ๋ฉ๋๋ค.
(8)Node.DOCUMENT_POSITION_CONTAINS- other๊ฐ node์ ์กฐ์์ด๋ฉด ์ค์ ๋ฉ๋๋ค.
(16, 16์ง์๋ก 10)Node.DOCUMENT_POSITION_CONTAINED_BY- other๊ฐ node์ ์์์ด๋ฉด ์ค์ ๋ฉ๋๋ค.
node .contains(other)- other๊ฐ node์ ์๊ธฐ ์์ ์ ํฌํจํ ์์์ด๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์์
compareDocumentPosition()์ด ๋ง์คํฌ๋ก ๋ฐํํ๋ ์์์ ๋๋ค.DOCUMENT_POSITION_DISCONNECTED(1);DOCUMENT_POSITION_PRECEDING(2);DOCUMENT_POSITION_FOLLOWING(4);DOCUMENT_POSITION_CONTAINS(8);DOCUMENT_POSITION_CONTAINED_BY(16, 16์ง์๋ก 10);DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC(32, 16์ง์๋ก 20).
compareDocumentPosition(other)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
this ๊ฐ other์ด๋ฉด 0์ ๋ฐํํฉ๋๋ค.
-
node1์ other๋ก, node2๋ฅผ this๋ก ์ค์ ํฉ๋๋ค.
-
attr1๊ณผ attr2๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
node1์ด ์์ฑ์ด๋ฉด attr1์ node1๋ก, node1์ attr1์ ์์๋ก ์ค์ ํฉ๋๋ค.
-
node2๊ฐ ์์ฑ์ด๋ฉด:
-
attr2๋ฅผ node2๋ก, node2๋ฅผ attr2์ ์์๋ก ์ค์ ํฉ๋๋ค.
-
attr1๊ณผ node1์ด null์ด ์๋๊ณ node2๊ฐ node1์ด๋ฉด:
-
node2์ ์์ฑ ๋ชฉ๋ก์ ์๋ attr ๊ฐ๊ฐ์ ๋ํด ๋ค์์ ์ํํฉ๋๋ค:
-
attr์ด attr1๊ณผ ๋๋ฑํ๋ฉด,
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC์DOCUMENT_POSITION_PRECEDING์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. -
attr์ด attr2์ ๋๋ฑํ๋ฉด,
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC์DOCUMENT_POSITION_FOLLOWING์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
-
-
node1 ๋๋ node2๊ฐ null์ด๊ฑฐ๋ node1์ ๋ฃจํธ๊ฐ node2์ ๋ฃจํธ์ ๋ค๋ฅด๋ฉด,
DOCUMENT_POSITION_DISCONNECTED,DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, ๊ทธ๋ฆฌ๊ณDOCUMENT_POSITION_PRECEDING๋๋DOCUMENT_POSITION_FOLLOWING์ค ํ๋๋ฅผ ์ผ๊ด์ฑ์ด ์ ์ง๋์ด์ผ ํ๋ค๋ ์ ์ฝ์ ๋ฐ๋ผ ๋ชจ๋ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.DOCUMENT_POSITION_PRECEDING๋๋DOCUMENT_POSITION_FOLLOWING์ค ๋ฌด์์ ๋ฐํํ ์ง๋ ์ผ๋ฐ์ ์ผ๋ก ํฌ์ธํฐ ๋น๊ต๋ก ๊ตฌํํฉ๋๋ค. JavaScript ๊ตฌํ์์๋ ์บ์๋Math๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.. random() -
node1์ด node2์ ์กฐ์์ด๊ณ attr1์ด null์ด๊ฑฐ๋, node1์ด node2์ด๊ณ attr2๊ฐ null์ด ์๋๋ฉด,
DOCUMENT_POSITION_CONTAINS๋ฅผDOCUMENT_POSITION_PRECEDING์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. -
node1์ด node2์ ์์์ด๊ณ attr2๊ฐ null์ด๊ฑฐ๋, node1์ด node2์ด๊ณ attr1์ด null์ด ์๋๋ฉด,
DOCUMENT_POSITION_CONTAINED_BY๋ฅผDOCUMENT_POSITION_FOLLOWING์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. -
node1์ด node2๋ณด๋ค ์์ ์์ผ๋ฉด,
DOCUMENT_POSITION_PRECEDING์ ๋ฐํํฉ๋๋ค.์ด ์๊ณ ๋ฆฌ์ฆ์์ ์์ฑ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ ๋๋ฌธ์, ๋ ธ๋์ ์์ฑ์ ํด๋น ๋ ธ๋์ ์์๋ณด๋ค ์์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด๋ ์์ฑ์ด ๋์ผํ ํธ๋ฆฌ์ ์ฐธ์ฌํ์ง ์์์๋ ๊ทธ๋ ์ต๋๋ค.
-
DOCUMENT_POSITION_FOLLOWING์ ๋ฐํํฉ๋๋ค.
contains(other)๋ฉ์๋ ๋จ๊ณ๋ other๊ฐ this์ ์๊ธฐ ์์ ์ ํฌํจํ ์์์ด๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ (other๊ฐ null์ธ ๊ฒฝ์ฐ ํฌํจ) ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
namespace๋ฅผ ์ฌ์ฉํ์ฌ element์ ๋ค์์คํ์ด์ค ์ ๋์ฌ ์ฐพ๊ธฐ๋ฅผ ์ํํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
element์ ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ํด๋น ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ null์ด ์๋๋ฉด, ํด๋น ๋ค์์คํ์ด์ค ์ ๋์ฌ๋ฅผ ๋ฐํํฉ๋๋ค.
-
element์ ์์ฑ์ด ์๊ณ , ํด๋น ์์ฑ์ ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ "
xmlns"์ด๊ณ ๊ฐ์ด namespace์ด๋ฉด, element์์ ๊ทธ๋ฌํ ์ฒซ ๋ฒ์งธ ์์ฑ์ ์ง์ญ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค. -
element์ ๋ถ๋ชจ ์์๊ฐ null์ด ์๋๋ฉด, ํด๋น ์์์ ๋ํด namespace๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ ๋์ฌ ์ฐพ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
null์ ๋ฐํํฉ๋๋ค.
prefix๋ฅผ ์ฌ์ฉํ์ฌ node์ ๋ค์์คํ์ด์ค ์ฐพ๊ธฐ๋ฅผ ์ํํ๋ ค๋ฉด node๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ถ๊ธฐํฉ๋๋ค.
Element-
-
prefix๊ฐ "
xml"์ด๋ฉด XML ๋ค์์คํ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค. -
prefix๊ฐ "
xmlns"์ด๋ฉด XMLNS ๋ค์์คํ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค. -
ํด๋น ๋ค์์คํ์ด์ค๊ฐ null์ด ์๋๊ณ ํด๋น ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ prefix์ด๋ฉด ๋ค์์คํ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
-
ํด๋น ์์์ ์์ฑ์ด ์๊ณ , ๊ทธ ์์ฑ์ ๋ค์์คํ์ด์ค๊ฐ XMLNS ๋ค์์คํ์ด์ค์ด๊ณ , ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ "
xmlns"์ด๋ฉฐ, ์ง์ญ ์ด๋ฆ์ด prefix์ด๊ฑฐ๋, prefix๊ฐ null์ด๊ณ ํด๋น ์์์ ์์ฑ์ด ์์ผ๋ฉฐ, ๊ทธ ์์ฑ์ ๋ค์์คํ์ด์ค๊ฐ XMLNS ๋ค์์คํ์ด์ค์ด๊ณ , ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ null์ด๋ฉฐ, ์ง์ญ ์ด๋ฆ์ด "xmlns"์ด๋ฉด, ํด๋น ๊ฐ์ด ๋น ๋ฌธ์์ด์ด ์๋ ๊ฒฝ์ฐ ๊ทธ ๊ฐ์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค. -
ํด๋น ๋ถ๋ชจ ์์๊ฐ null์ด๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
ํด๋น ๋ถ๋ชจ ์์์ ๋ํด prefix๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ฐพ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
Document-
-
ํด๋น ๋ฌธ์ ์์๊ฐ null์ด๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
ํด๋น ๋ฌธ์ ์์์ ๋ํด prefix๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ฐพ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
DocumentTypeDocumentFragment-
null์ ๋ฐํํฉ๋๋ค.
Attr-
-
ํด๋น ์์๊ฐ null์ด๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
ํด๋น ์์์ ๋ํด prefix๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ฐพ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
-
-
ํด๋น ๋ถ๋ชจ ์์๊ฐ null์ด๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
ํด๋น ๋ถ๋ชจ ์์์ ๋ํด prefix๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ฐพ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
lookupPrefix(namespace)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
namespace๊ฐ null์ด๊ฑฐ๋ ๋น ๋ฌธ์์ด์ด๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
this๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ถ๊ธฐํฉ๋๋ค.
Element-
this์ ๋ํด namespace๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ ๋์ฌ ์ฐพ๊ธฐ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
Document-
-
this์ ๋ฌธ์ ์์๊ฐ null์ด๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
this์ ๋ฌธ์ ์์์ ๋ํด namespace๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ ๋์ฌ ์ฐพ๊ธฐ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
DocumentTypeDocumentFragment-
null์ ๋ฐํํฉ๋๋ค.
Attr-
-
this์ ์์์ ๋ํด namespace๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ ๋์ฌ ์ฐพ๊ธฐ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
- ๊ทธ ๋ฐ์ ๊ฒฝ์ฐ
-
-
this์ ๋ถ๋ชจ ์์๊ฐ null์ด๋ฉด null์ ๋ฐํํฉ๋๋ค.
-
this์ ๋ถ๋ชจ ์์์ ๋ํด namespace๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ ๋์ฌ ์ฐพ๊ธฐ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
-
lookupNamespaceURI(prefix)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
prefix๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
this์ ๋ํด prefix๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ฐพ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
isDefaultNamespace(namespace)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
namespace๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
defaultNamespace๋ฅผ this์ ๋ํด null์ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์ฐพ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
defaultNamespace๊ฐ namespace์ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
insertBefore(node, child)๋ฉ์๋ ๋จ๊ณ๋ child ์์์ node๋ฅผ this์ ์ฌ์ ์ฝ์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.appendChild(node)๋ฉ์๋ ๋จ๊ณ๋ node๋ฅผ this์ ์ถ๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.replaceChild(node, child)๋ฉ์๋ ๋จ๊ณ๋ this ๋ด์์ child๋ฅผ node๋ก ๊ต์ฒดํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.removeChild(child)๋ฉ์๋ ๋จ๊ณ๋ child๋ฅผ this์์ ์ฌ์ ์ ๊ฑฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
๋ ธ๋ root์ ๋ํ ํ์ ์ด๋ฆ์ด qualifiedName์ธ ์์ ๋ชฉ๋ก์ ๋ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐํ๋๋
HTMLCollection์ ๋๋ค.-
qualifiedName์ด U+002A (*)์ด๋ฉด, root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์๋ง ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค. -
๊ทธ๋ ์ง ์๊ณ root์ ๋ ธ๋ ๋ฌธ์๊ฐ HTML ๋ฌธ์์ด๋ฉด, root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ๋ค์ ์์ ์์๋ฅผ ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค.-
๋ค์์คํ์ด์ค๊ฐ HTML ๋ค์์คํ์ด์ค์ด๊ณ ํ์ ์ด๋ฆ์ด qualifiedName๊ณผ ASCII ์๋ฌธ์๋ก ์ผ์นํ๋ ์์.
-
๋ค์์คํ์ด์ค๊ฐ HTML ๋ค์์คํ์ด์ค๊ฐ ์๋๊ณ ํ์ ์ด๋ฆ์ด qualifiedName์ธ ์์.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์ ์ค ํ์ ์ด๋ฆ์ด qualifiedName์ธ ์์๋ฅผ ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค.
๋์ผํ ์ธ์๋ก ํธ์ถํ๊ณ root์ ๋ ธ๋ ๋ฌธ์์ ์ ํ์ด ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด, ์ด์ ํธ์ถ์์ ๋ฐํํ๋ ๊ฒ๊ณผ ๋์ผํ
HTMLCollection๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.๋ ธ๋ root์ ๋ํ ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ์ง์ญ ์ด๋ฆ์ด localName์ธ ์์ ๋ชฉ๋ก์ ๋ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐํ๋๋
HTMLCollection์ ๋๋ค.-
namespace๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
namespace์ localName์ด ๋ชจ๋ U+002A (*)์ด๋ฉด, root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์๋ง ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค. -
namespace๊ฐ U+002A (*)์ด๋ฉด, root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์ ์ค ์ง์ญ ์ด๋ฆ์ด localName์ธ ์์๋ฅผ ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค. -
localName์ด U+002A (*)์ด๋ฉด, root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์ ์ค ๋ค์์คํ์ด์ค๊ฐ namespace์ธ ์์๋ฅผ ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค. -
root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์ ์ค ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ์ง์ญ ์ด๋ฆ์ด localName์ธ ์์๋ฅผ ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค.
๋์ผํ ์ธ์๋ก ํธ์ถํ๋ฉด ๋์ผํ
HTMLCollection๊ฐ์ฒด๋ฅผ ์ด์ ํธ์ถ์์ ๋ฐํํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ฐํํ ์ ์์ต๋๋ค.๋ ธ๋ root์ ๋ํ ํด๋์ค ์ด๋ฆ์ด classNames์ธ ์์ ๋ชฉ๋ก์ ๋ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐํ๋๋
HTMLCollection์ ๋๋ค.- classes๋ฅผ classNames์ ๋ํด ์์๊ฐ ์๋ ์งํฉ ํ์๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
classes๊ฐ ๋น ์งํฉ์ด๋ฉด ๋น
HTMLCollection์ ๋ฐํํฉ๋๋ค. -
root๋ฅผ ๋ฃจํธ๋ก ํ๊ณ ์์ ์์ ์ค ๋ชจ๋ ํด๋์ค๊ฐ classes์ ํฌํจ๋๋ ์์๋ฅผ ์ผ์น์ํค๋ ํํฐ๋ฅผ ๊ฐ์ง
HTMLCollection์ ๋ฐํํฉ๋๋ค.root์ ๋ ธ๋ ๋ฌธ์์ ๋ชจ๋๊ฐ "
quirks"์ด๋ฉด ํด๋์ค ๋น๊ต๋ ASCII ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ํํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ ํ ๋์ผํ์ง ๋น๊ตํ๋ ๋ฐฉ์์ผ๋ก ์ํํด์ผ ํฉ๋๋ค.
๋์ผํ ์ธ์๋ก ํธ์ถํ๋ฉด ๋์ผํ
HTMLCollection๊ฐ์ฒด๋ฅผ ์ด์ ํธ์ถ์์ ๋ฐํํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ฐํํ ์ ์์ต๋๋ค.4.5. ์ธํฐํ์ด์ค
Document[
Exposed =Window ]interface :Document Node {constructor (); [SameObject ]readonly attribute DOMImplementation implementation ;readonly attribute USVString URL ;readonly attribute USVString documentURI ;readonly attribute DOMString compatMode ;readonly attribute DOMString characterSet ;readonly attribute DOMString charset ; // legacy alias of .characterSetreadonly attribute DOMString inputEncoding ; // legacy alias of .characterSetreadonly attribute DOMString contentType ;readonly attribute DocumentType ?doctype ;readonly attribute Element ?documentElement ;HTMLCollection getElementsByTagName (DOMString );qualifiedName HTMLCollection getElementsByTagNameNS (DOMString ?,namespace DOMString );localName HTMLCollection getElementsByClassName (DOMString ); [classNames CEReactions ,NewObject ]Element createElement (DOMString ,localName optional (DOMString or ElementCreationOptions )= {}); [options CEReactions ,NewObject ]Element createElementNS (DOMString ?,namespace DOMString ,qualifiedName optional (DOMString or ElementCreationOptions )= {}); [options NewObject ]DocumentFragment createDocumentFragment (); [NewObject ]Text createTextNode (DOMString ); [data NewObject ]CDATASection createCDATASection (DOMString ); [data NewObject ]Comment createComment (DOMString ); [data NewObject ]ProcessingInstruction createProcessingInstruction (DOMString ,target DOMString ); [data CEReactions ,NewObject ]Node importNode (Node ,node optional (boolean or ImportNodeOptions )=options false ); [CEReactions ]Node adoptNode (Node ); [node NewObject ]Attr createAttribute (DOMString ); [localName NewObject ]Attr createAttributeNS (DOMString ?,namespace DOMString ); [qualifiedName NewObject ]Event createEvent (DOMString ); // legacy [interface NewObject ]Range createRange (); // NodeFilter.SHOW_ALL = 0xFFFFFFFF [NewObject ]NodeIterator createNodeIterator (Node ,root optional unsigned long = 0xFFFFFFFF,whatToShow optional NodeFilter ?=filter null ); [NewObject ]TreeWalker createTreeWalker (Node ,root optional unsigned long = 0xFFFFFFFF,whatToShow optional NodeFilter ?=filter null ); }; [Exposed =Window ]interface :XMLDocument Document {};dictionary {ElementCreationOptions CustomElementRegistry ?;customElementRegistry DOMString ; };is dictionary {ImportNodeOptions CustomElementRegistry ;customElementRegistry boolean =selfOnly false ; };Document๋ ธ๋๋ ๋จ์ํ ๋ฌธ์๋ผ๊ณ ํฉ๋๋ค.๋ฌธ์์ ๋ ธ๋ ๋ฌธ์๋ ํด๋น ๋ฌธ์ ์์ฒด์ ๋๋ค.
๊ฐ ๋ฌธ์์๋ ๋ค์์ด ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์ธ์ฝ๋ฉ(์ธ์ฝ๋ฉ), ์ฝํ ์ธ ์ ํ(๋ฌธ์์ด), URL(URL), ์ถ์ฒ(์ถ์ฒ), ์ ํ("
xml" ๋๋ "html"), ๋ชจ๋("no-quirks", "quirks" ๋๋ "limited-quirks"), ์ ์ธ์ ์๋ ๋ฃจํธ ํ์ฉ ์ฌ๋ถ(๋ถ๋ฆฌ์ธ), ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ(null ๋๋CustomElementRegistry๊ฐ์ฒด)๊ฐ ์์ต๋๋ค. [ENCODING] [URL] [HTML]๋ฌ๋ฆฌ ๋ช ์ํ์ง ์๋ ํ, ๋ฌธ์์ ์ธ์ฝ๋ฉ์ utf-8 ์ธ์ฝ๋ฉ์ด๊ณ , ์ฝํ ์ธ ์ ํ์ "
application/xml"์ด๋ฉฐ, URL์ "about:blank"์ด๊ณ , ์ถ์ฒ๋ ๋ถํฌ๋ช ์ถ์ฒ์ด๋ฉฐ, ์ ํ์ "xml"์ด๊ณ , ๋ชจ๋๋ "no-quirks"์ด๋ฉฐ, ์ ์ธ์ ์๋ ๋ฃจํธ ํ์ฉ ์ฌ๋ถ๋ false์ด๊ณ , ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ null์ ๋๋ค.๋ฌธ์์ ์ ํ์ด "
xml"์ด๋ฉด ํด๋น ๋ฌธ์๋ฅผ XML ๋ฌธ์๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด HTML ๋ฌธ์๋ผ๊ณ ํฉ๋๋ค. ๋ฌธ์๊ฐ HTML ๋ฌธ์์ธ์ง XML ๋ฌธ์์ธ์ง์ ๋ฐ๋ผ ์ผ๋ถ API์ ๋์์ด ๋ฌ๋ผ์ง๋๋ค.๊ฐ ๋ฌธ์์๋ ๊ธฐ๋ณธ URL ๊ฐ์ ธ์ค๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ด ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, ์ด ์๊ณ ๋ฆฌ์ฆ์ URL ๋๋ null์ ๋ฐํํฉ๋๋ค. ๋ฌ๋ฆฌ ๋ช ์ํ์ง ์๋ ํ null์ ๋ฐํํฉ๋๋ค.
๊ฐ ๋ฌธ์์๋ ๊ธฐ๋ณธ URL ์ฌ์ ์(URL ๋๋ null)๊ฐ ์์ผ๋ฉฐ, ์ด๊ธฐ๊ฐ์ null์ ๋๋ค.
๊ธฐ๋ณธ URL ์ฌ์ ์๋ ๋ณต์ ๋ฅผ ํตํด ๋ฌธ์๋ฅผ ๋ณต์ ํ ๋ ์ค์ ๋ฉ๋๋ค. HTML์ ๊ธฐ๋ณธ URL ๊ฐ์ ธ์ค๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ ์ํ์ฌ
base์์์ ๊ธฐ๋ณธ URL์ด "about:" ์คํด์ธ ๋ฌธ์์์ ์์๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. [HTML]๋ฌธ์์ ๋ชจ๋๊ฐ ๋น์ฟผํฌ ๋ชจ๋์ด๋ฉด ํด๋น ๋ฌธ์๋ ๋น์ฟผํฌ ๋ชจ๋์ ์๋ค๊ณ ํฉ๋๋ค. ๋ชจ๋๊ฐ "
no-quirks"์ธ ๊ฒฝ์ฐ์ ๋๋ค. ์ฟผํฌ ๋ชจ๋๋ ๋ชจ๋๊ฐ "quirks"์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ์ ํ๋ ์ฟผํฌ ๋ชจ๋๋ ๋ชจ๋๊ฐ "limited-quirks"์ธ ๊ฒฝ์ฐ์ ๋๋ค.๋ชจ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์๊ฐ ์์ฑ๋ ๋์ ๊ธฐ๋ณธ๊ฐ์์ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๊ฐ ๋งค์ฐ ์ ํ์ ์ ๋๋ค. HTML ํ์๊ฐ DOCTYPE ๋ฌธ์์ด์ ์กด์ฌ ์ฌ๋ถ, ๋ถ์ฌ ๋๋ ๊ฐ์ ๋ฐ๋ผ ์์ฑํ ๋ฌธ์์ ์๋ก์ด ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ(์ด๊ธฐ๊ฐ "
about:blank")์ ํํด์ ๋ณ๊ฒฝ๋ฉ๋๋ค. [HTML]๋น์ฟผํฌ ๋ชจ๋๋ ์๋ "ํ์ค ๋ชจ๋"๋ผ๊ณ ๋ถ๋ ธ๊ณ , ์ ํ๋ ์ฟผํฌ ๋ชจ๋๋ ํ๋ "๊ฑฐ์ ํ์ค ๋ชจ๋"๋ผ๊ณ ๋ถ๋ ธ์ต๋๋ค. ์ธ๋ถ ์ฌํญ์ด ์ด์ ํ์ค์ผ๋ก ์ ์๋๊ธฐ ๋๋ฌธ์ ๋ช ์นญ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. (๋ํ Ian Hickson์ด ๊ธฐ์กด ๋ช ์นญ์ ์๋ฏธ๊ฐ ํตํ์ง ์๋๋ค๋ ์ด์ ๋ก ๊ฑฐ๋ถํ๊ธฐ ๋๋ฌธ์ ๋๋ค.)
๋ฌธ์์ ๋ถ๋ชจ ๊ฐ์ ธ์ค๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ event๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์, event์
type์์ฑ ๊ฐ์ด "load"์ด๊ฑฐ๋ ๋ฌธ์์ ๋ธ๋ผ์ฐ์ง ์ปจํ ์คํธ๊ฐ ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌธ์์ ๊ด๋ จ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.interface ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์ญ realm์ด ์ฃผ์ด์ง๋๋ค.
-
๋จ์ธ: interface๋
Document๋๋ ๋ค์์ ์์ํ๋ ์ธํฐํ์ด์ค์ ๋๋ค:Document. -
์๋ก์ด ๋ ธ๋๋ฅผ ๋ฐํํฉ๋๋ค. ํด๋น ๋ ธ๋๊ฐ ๊ตฌํํ๋ ์ธํฐํ์ด์ค๋ interface์ด๋ฉฐ, ํด๋น ๋ ธ๋๋ realm์ ์ํฉ๋๋ค.
document = newDocument()- ์ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
document .implementation- document์ ์ฐ๊ฒฐ๋
DOMImplementation๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. document .URLdocument .documentURI- document์ URL์ ๋ฐํํฉ๋๋ค.
document .compatMode-
document์ ๋ชจ๋๊ฐ
"
quirks"์ด๋ฉด ๋ฌธ์์ด "BackCompat"๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด "CSS1Compat"๋ฅผ ๋ฐํํฉ๋๋ค. document .characterSet- document์ ์ธ์ฝ๋ฉ์ ๋ฐํํฉ๋๋ค.
document .contentType- document์ ์ฝํ ์ธ ์ ํ์ ๋ฐํํฉ๋๋ค.
new Document()์์ฑ์์ ๋จ๊ณ๋ this์ ์ถ์ฒ๋ฅผ ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ์ฐ๊ฒฐ๋Document์ ์ถ์ฒ๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค. [HTML]createDocument()์ ๋ฌ๋ฆฌ, ์ด ์์ฑ์๋XMLDocument๊ฐ์ฒด๊ฐ ์๋๋ผ ๋ฌธ์ (Document๊ฐ์ฒด)๋ฅผ ๋ฐํํฉ๋๋ค.implementation์ getter ๋จ๊ณ๋ this์ ์ฐ๊ฒฐ๋DOMImplementation๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.URL๋ฐdocumentURI์ getter ๋จ๊ณ๋ this์ URL์ ์ง๋ ฌํํ์ฌ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.compatMode์ getter ๋จ๊ณ๋ this์ ๋ชจ๋๊ฐ "quirks"์ด๋ฉด "BackCompat"๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด "CSS1Compat"๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.characterSet,charset๋ฐinputEncoding์ getter ๋จ๊ณ๋ this์ ์ธ์ฝ๋ฉ์ ์ด๋ฆ์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.contentType์ getter ๋จ๊ณ๋ this์ ์ฝํ ์ธ ์ ํ์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
- document .
doctype - doctype์ ๋ฐํํ๋ฉฐ, doctype์ด ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
- document .
documentElement - ๋ฌธ์ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
collection = document . getElementsByTagName(qualifiedName)-
qualifiedName์ด "
*"์ด๋ฉด ๋ชจ๋ ํ์ ์์ ์์์HTMLCollection์ ๋ฐํํฉ๋๋ค.๊ทธ๋ ์ง ์์ผ๋ฉด qualifiedName์ด ์ ๊ทํ๋ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ๋ชจ๋ ํ์ ์์ ์์์
HTMLCollection์ ๋ฐํํฉ๋๋ค. (HTML ๋ฌธ์ ๋ด HTML ๋ค์์คํ์ด์ค์ ์ํ๋ ์์์๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ผ์นํฉ๋๋ค.) collection = document . getElementsByTagNameNS(namespace, localName)-
namespace์ localName์ด ๋ชจ๋ "
*"์ด๋ฉด ๋ชจ๋ ํ์ ์์ ์์์HTMLCollection์ ๋ฐํํฉ๋๋ค.namespace๋ง "
*"์ด๋ฉด ํ์ ์์ ์ค ์์์ ๋ก์ปฌ ์ด๋ฆ์ด localName์ธ ๋ชจ๋ ์์์HTMLCollection์ ๋ฐํํฉ๋๋ค.localName๋ง "
*"์ด๋ฉด ํ์ ์์ ์ค ์์์ ๋ค์์คํ์ด์ค๊ฐ namespace์ธ ๋ชจ๋ ์์์HTMLCollection์ ๋ฐํํฉ๋๋ค.๊ทธ๋ ์ง ์์ผ๋ฉด
HTMLCollection์ ๋ฐํํฉ๋๋ค. ์ด ์ปฌ๋ ์ ์๋ ํ์ ์์ ์ค ์์์ ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ด localName์ธ ๋ชจ๋ ์์๊ฐ ํฌํจ๋ฉ๋๋ค. collection = document . getElementsByClassName(classNames)collection = element . getElementsByClassName(classNames)-
๋ฐํ๊ฐ์
HTMLCollection์ด๋ฉฐ, ๋ค์ ์์๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ๋ ๊ฐ์ฒด(๋ฌธ์ ๋๋ ์์) ๋ด์ ์์ผ๋ฉฐ, ๋ชจ๋ ํด๋์ค๋ฅผ ๊ฐ์ง๋๋ค. ์ด ํด๋์ค๋ค์ ์ง์ ํ๋ ๊ฒ์ classNames์ ๋๋ค. classNames ์ธ์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ผ๋ก ํด์๋๋ฉฐ, ๊ฐ ํญ๋ชฉ์ ํด๋์ค์ ๋๋ค.
๋ค์
doctypegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์์ ์ค this์ ์ํ๋ฉฐ ๋ฌธ์ ์ ํ์ธ ๊ฒ. ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋๋ค.๋ค์
documentElementgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ฌธ์ ์์.๋ค์
getElementsByTagName(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ค์ ํ์ ์ด๋ฆ์ ๊ฐ์ง ์์ ๋ชฉ๋ก: qualifiedName ๋์์ this์ ๋๋ค.๋ฐ๋ผ์ HTML ๋ฌธ์์์,
document๋ ๋ค์๊ณผ ์ผ์นํฉ๋๋ค:. getElementsByTagName( "FOO" ) <FOO>์์ ์ค ๋ค์์ ์ํ์ง ์๋ ์์: HTML ๋ค์์คํ์ด์ค, ๊ทธ๋ฆฌ๊ณ<foo>์์ ์ค ๋ค์์ ์ํ๋ ์์: ํด๋น HTML ๋ค์์คํ์ด์ค. ๊ทธ๋ฌ๋<FOO>์์ ์ค ๋ค์์ ์ํ๋ ์์์๋ ์ผ์นํ์ง ์์ต๋๋ค: HTML ๋ค์์คํ์ด์ค.๋ค์
getElementsByTagNameNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ด localName์ธ ์์ ๋ชฉ๋ก. ๋์์ this์ ๋๋ค.๋ค์
getElementsByClassName(classNames)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ํด๋์ค ์ด๋ฆ์ด classNames์ธ ์์ ๋ชฉ๋ก ๋์์ this์ ๋๋ค.๋ค์ XHTML ์กฐ๊ฐ์ด ์ฃผ์ด์ก๋ค๊ณ ๊ฐ์ ํฉ๋๋ค:< div id = "example" > < p id = "p1" class = "aaa bbb" /> < p id = "p2" class = "aaa ccc" /> < p id = "p3" class = "bbb ccc" /> </ div > ๋ค์์ ํธ์ถํ๋ฉด:
document๋ฐํ๊ฐ์. getElementById( "example" ). getElementsByClassName( "aaa" ) HTMLCollection์ด๋ฉฐ, ๋ค์ ๋ ๋ฌธ๋จ์ ํฌํจํฉ๋๋ค:p1๊ณผp2.๋ค์์ ํธ์ถํ๋ฉด:
getElementsByClassName๊ทธ๋ฌ๋ ํ๋์ ๋ ธ๋, ์ฆ( "ccc bbb" ) p3๋ง ๋ฐํํฉ๋๋ค. ๋ค์์ ํธ์ถํ๋ฉด:document๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.. getElementById( "example" ). getElementsByClassName( "bbb ccc " ) ๋ค์์ ํธ์ถํ๋ฉด:
getElementsByClassName์๋ฌด ๋ ธ๋๋ ๋ฐํํ์ง ์์ต๋๋ค. ์์ ์์ ์ค ์ด๋ ๊ฒ๋ ๋ค์ ํด๋์ค์ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค:( "aaa,bbb" ) aaa,bbbํด๋์ค.
element = document . createElement(localName [, options])-
๋ฐํ๊ฐ์ ์์์ด๋ฉฐ, localName์ ๋ค์์ผ๋ก ๊ฐ์ง๋๋ค: ๋ก์ปฌ ์ด๋ฆ (document๊ฐ HTML ๋ฌธ์์ด๋ฉด, localName์ ์๋ฌธ์๋ก ๋ณํ๋ฉ๋๋ค). ์ด ์์์ ๋ค์์คํ์ด์ค๋ HTML ๋ค์์คํ์ด์ค์ด๋ฉฐ, ๊ทธ ์กฐ๊ฑด์ document๊ฐ HTML ๋ฌธ์์ด๊ฑฐ๋ document์ ์ฝํ ์ธ ์ ํ์ด "
application/xhtml+xml"์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋๋ค.์ ๊ณต๋ ๊ฒฝ์ฐ, options์
customElementRegistry๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์ ๋์์CustomElementRegistry์ ๋๋ค.์ ๊ณต๋ ๊ฒฝ์ฐ, options์
is๋ ๋ค์์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค: ์ฌ์ฉ์ ์ ์ ๋ด์ฅ ์์.localName์ด ์ ํจํ ์์ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด "
InvalidCharacterError"DOMException์ด ๋ฐ์ํฉ๋๋ค.options์
customElementRegistry์ options์is๊ฐ ๋ชจ๋ ์ ๊ณต๋ ๊ฒฝ์ฐ, "NotSupportedError"DOMException์ด ๋ฐ์ํฉ๋๋ค. element = document . createElementNS(namespace, qualifiedName [, options])-
๋ฐํ๊ฐ์ ์์์ด๋ฉฐ, ๊ทธ ๋ค์์คํ์ด์ค๋ namespace์ ๋๋ค. ํด๋น ์์์ ๋ค์์คํ์ด์ค ์ ๋์ฌ๋ ๋ค์ ๋ฌธ์ ์์ ๋ชจ๋ ๋ถ๋ถ์ ๋๋ค: U+003A (:). ํด๋น ๋ฌธ์๋ qualifiedName ๋ด์ ๋ฌธ์์ด๋ฉฐ, ์์ผ๋ฉด null์ ๋๋ค. ํด๋น ์์์ ๋ก์ปฌ ์ด๋ฆ์ ๋ค์ ๋ฌธ์ ๋ค์ ๋ชจ๋ ๋ถ๋ถ์ ๋๋ค: qualifiedName ๋ด์ U+003A (:). ํด๋น ๋ฌธ์๊ฐ ์์ผ๋ฉด qualifiedName์ ๋๋ค.
์ ๊ณต๋ ๊ฒฝ์ฐ, options์
customElementRegistry๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์ ๋์์CustomElementRegistry์ ๋๋ค.์ ๊ณต๋ ๊ฒฝ์ฐ, options์
is๋ ๋ค์์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค: ์ฌ์ฉ์ ์ ์ ๋ด์ฅ ์์.qualifiedName์ด (์ ๋์ฌ๊ฐ ์์ ์๋ ์๋) ์ ํจํ ์์ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด "
InvalidCharacterError"DOMException์ด ๋ฐ์ํฉ๋๋ค.๋ค์ ์กฐ๊ฑด ์ค ํ๋๊ฐ ์ฐธ์ด๋ฉด "
NamespaceError"DOMException์ด ๋ฐ์ํฉ๋๋ค:- ๋ค์์คํ์ด์ค ์ ๋์ฌ ๊ฐ null์ด ์๋๊ณ namespace๊ฐ ๋น ๋ฌธ์์ด์ ๋๋ค.
- ๋ค์์คํ์ด์ค ์ ๋์ฌ
๊ฐ "
xml"์ด๊ณ namespace๊ฐ ๋ค์์ด ์๋๋๋ค: XML ๋ค์์คํ์ด์ค. - qualifiedName ๋๋
๋ค์์คํ์ด์ค ์ ๋์ฌ
๊ฐ "
xmlns"์ด๊ณ namespace๊ฐ ๋ค์์ด ์๋๋๋ค: XMLNS ๋ค์์คํ์ด์ค. - namespace๊ฐ XMLNS
๋ค์์คํ์ด์ค์ด๊ณ
qualifiedName๋
๋ค์์คํ์ด์ค ์ ๋์ฌ๋
"
xmlns"๊ฐ ์๋๋๋ค.
options์
customElementRegistry์ options์is๊ฐ ๋ชจ๋ ์ ๊ณต๋ ๊ฒฝ์ฐ, "NotSupportedError"DOMException์ด ๋ฐ์ํฉ๋๋ค. documentFragment = document .createDocumentFragment()- ๋ฐํ๊ฐ์
DocumentFragment๋ ธ๋์ ๋๋ค. text = document .createTextNode(data)- ๋ฐํ๊ฐ์
Text๋ ธ๋์ด๋ฉฐ, ํด๋น ๋ ธ๋์ ๋ฐ์ดํฐ๋ data์ ๋๋ค. text = document .createCDATASection(data)- ๋ฐํ๊ฐ์
CDATASection๋ ธ๋์ด๋ฉฐ, ํด๋น ๋ ธ๋์ ๋ฐ์ดํฐ๋ data์ ๋๋ค. comment = document .createComment(data)- ๋ฐํ๊ฐ์
Comment๋ ธ๋์ด๋ฉฐ, ํด๋น ๋ ธ๋์ ๋ฐ์ดํฐ๋ data์ ๋๋ค. processingInstruction = document .createProcessingInstruction(target, data)-
๋ฐํ๊ฐ์
ProcessingInstruction๋ ธ๋์ด๋ฉฐ, ํด๋น ๋ ธ๋์ ๋์์ target์ด๊ณ ๋ฐ์ดํฐ๋ data์ ๋๋ค. target์ด ๋ค์๊ณผ ์ผ์นํ์ง ์์ผ๋ฉด:Name์์ฑ ๊ท์น, "InvalidCharacterError"DOMException์ด ๋ฐ์ํฉ๋๋ค. data์ "?>"๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด "InvalidCharacterError"DOMException์ด ๋ฐ์ํฉ๋๋ค.
๋ค์ ์์ ์ธํฐํ์ด์ค๋ ์์์ name๊ณผ namespace์ ๋ํด
Element์ ๋๋ค. ๋จ, ๋ฌ๋ฆฌ ๋ช ์๋ ๊ฒฝ์ฐ๋ ์ ์ธํฉ๋๋ค.์๋ฅผ ๋ค์ด HTML ํ์ค์์๋
html๊ณผ HTML ๋ค์์คํ์ด์ค์ ๋ํดHTMLHtmlElement์ธํฐํ์ด์ค๊ฐ ์ฌ์ฉ๋๋ค๊ณ ์ ์ํฉ๋๋ค. [HTML]๋ค์
createElement(localName, options)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
localName์ด ์ ํจํ ์์ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException. -
๋ง์ฝ this๊ฐ HTML ๋ฌธ์์ด๋ฉด, localName์ ๋ค์์ผ๋ก ์ค์ ํฉ๋๋ค: localName์ ASCII ์๋ฌธ์๋ก ๋ณํํ ๊ฐ.
-
registry์ is๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์์ ์์ฑ ์ต์ ํํํ. ์ฃผ์ด์ง ๊ฐ์ options์ this์ ๋๋ค.
-
namespace๋ฅผ HTML ๋ค์์คํ์ด์ค๋ก ๋ก๋๋ค. ๊ทธ ์กฐ๊ฑด์ this๊ฐ HTML ๋ฌธ์์ด๊ฑฐ๋ this์ ์ฝํ ์ธ ์ ํ์ด "
application/xhtml+xml"์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด null๋ก ๋ก๋๋ค. -
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์์ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this, localName, namespace, null, is, true, ๊ทธ๋ฆฌ๊ณ registry์ ๋๋ค.
๋ค์ ๋ด๋ถ
createElementNS๋จ๊ณ๋, ์ฃผ์ด์ง ๊ฐ์ด document, namespace, qualifiedName, options์ผ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
(namespace, prefix, localName)์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ถ์ถ. ๋์์ namespace์ qualifiedName์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ "
element"์ ๋๋ค. -
registry์ is๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์์ ์์ฑ ์ต์ ํํํ. ์ฃผ์ด์ง ๊ฐ์ options์ this์ ๋๋ค.
-
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์์ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ document, localName, namespace, prefix, is, true, ๊ทธ๋ฆฌ๊ณ registry์ ๋๋ค.
๋ค์
createElementNS(namespace, qualifiedName, options)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ด๋ถcreateElementNS๋จ๊ณ. ์ฃผ์ด์ง ๊ฐ์ this, namespace, qualifiedName, ๊ทธ๋ฆฌ๊ณ options์ ๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์์ ์์ฑ ์ต์ ์ ํํํํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ ๋ฌธ์์ด ๋๋
ElementCreationOptions๋์ ๋๋ฆฌ options์ ๋ฌธ์ document์ ๋๋ค:-
registry๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ ์กฐํ ์ฃผ์ด์ง ๊ฐ์ document์ ๋๋ค.
-
is๋ฅผ null๋ก ๋ก๋๋ค.
-
options๊ฐ ๋์ ๋๋ฆฌ์ด๋ฉด:
-
๋ง์ฝ options["
is"] ๊ฐ ์กด์ฌํ๋ฉด, ๋ค์์ ์ค์ ํฉ๋๋ค: is๋ฅผ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. -
๋ง์ฝ options["
customElementRegistry"] ๊ฐ ์กด์ฌํ๋ฉด:-
is๊ฐ null์ด ์๋๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
registry๋ฅผ ๋ค์์ผ๋ก ์ค์ ํฉ๋๋ค: options["
customElementRegistry"].
-
-
registry๊ฐ null์ด ์๋๊ณ , registry์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ false์ด๋ฉฐ, registry๊ฐ ๋ค์์ด ์๋๋ฉด: document์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ, ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException.
-
-
registry์ is๋ฅผ ๋ฐํํฉ๋๋ค.
createElement()์createElementNS()์ options ๋งค๊ฐ๋ณ์๋ ์น ํธํ์ฑ์ ์ํด ๋ฌธ์์ด์ผ ์ ์์ต๋๋ค.๋ค์
createDocumentFragment()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ฌธ์ ์กฐ๊ฐ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this์ ๋๋ค.๋ค์
createTextNode(data)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ํ ์คํธ ๋ ธ๋ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this์ data์ ๋๋ค.๋ค์
createCDATASection(data)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๋ง์ฝ this ๊ฐ HTML ๋ฌธ์์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
data์ ๋ฌธ์์ด "
]]>"๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "InvalidCharacterError"DOMException. -
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: CDATA ์น์ ๋ ธ๋ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this ์ data์ ๋๋ค.
๋ค์
createComment(data)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์ฃผ์ ๋ ธ๋ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this์ data์ ๋๋ค.๋ค์
createProcessingInstruction(target, data)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์์ฑํ๋ ์ฒ๋ฆฌ ๋ช ๋ น ๋ ธ๋. ์ฃผ์ด์ง ๊ฐ์ this, target, ๊ทธ๋ฆฌ๊ณ data์ ๋๋ค.
clone = document . importNode(node [, options = false])-
node์ ๋ณต์ฌ๋ณธ์ ๋ฐํํฉ๋๋ค. options๊ฐ true์ด๊ฑฐ๋ options๊ฐ ๋์ ๋๋ฆฌ์ด๋ฉฐ ๊ทธ
selfOnly๊ฐ false์ด๋ฉด, ๋ณต์ฌ๋ณธ์๋ ๋ค์๋ ํฌํจ๋ฉ๋๋ค: node์ ์์.options์
customElementRegistry๋ ๋ค์์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค:CustomElementRegistry๋ฅผ ๊ฐ์ง์ง ์์ ์์์ ํด๋น ๋ ์ง์คํธ๋ฆฌ.node๊ฐ ๋ฌธ์ ๋๋ ์๋ ๋ฃจํธ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. node = document . adoptNode(node)-
node๋ฅผ ๋ค๋ฅธ ๋ฌธ์์์ ์ด๋ํ๊ณ ๋ฐํํฉ๋๋ค.
node๊ฐ ๋ฌธ์์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException๋๋, node๊ฐ ์๋ ๋ฃจํธ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "HierarchyRequestError"DOMException.
๋ค์
importNode(node, options)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๊ฐ ๋ฌธ์ ๋๋ ์๋ ๋ฃจํธ์ด๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: ๋ค์ "
NotSupportedError"DOMException. -
subtree๋ฅผ false๋ก ๋ก๋๋ค.
-
registry๋ฅผ null๋ก ๋ก๋๋ค.
-
options๊ฐ ๋ถ๋ฆฌ์ธ์ด๋ฉด, subtree๋ฅผ options๋ก ์ค์ ํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
subtree๋ฅผ ๋ค์์ ๋ ผ๋ฆฌ ๋ถ์ ์ผ๋ก ์ค์ ํฉ๋๋ค: options["
selfOnly"]. -
๋ง์ฝ options["
customElementRegistry"] ๊ฐ ์กด์ฌํ๋ฉด, registry๋ฅผ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. -
registry์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ false์ด๊ณ registry๊ฐ this์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๊ฐ ์๋๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException.
-
-
registry๊ฐ null์ด๋ฉด, registry๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ ์กฐํ ์ฃผ์ด์ง ๊ฐ์ this์ ๋๋ค.
-
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ๋ ธ๋ ๋ณต์ . ์ฃผ์ด์ง ๊ฐ์ node์ด๋ฉฐ, document๋ this๋ก ์ค์ ํ๊ณ , subtree๋ subtree๋ก ์ค์ ํ๋ฉฐ, fallbackRegistry๋ registry๋ก ์ค์ ํฉ๋๋ค.
๋ช ์ธ๋ ๋ค์์ ์ ์ํ ์ ์์ต๋๋ค: ์ฑํ ๋จ๊ณ. ๋์์ ๋ชจ๋ ๋๋ ์ผ๋ถ ๋ ธ๋์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์๋ node์ oldDocument๊ฐ ์ ๋ฌ๋๋ฉฐ, ์ด๋ ๋ค์์ ๋ช ์๋ ๋๋ก์ ๋๋ค: ์ฑํ ์๊ณ ๋ฆฌ์ฆ.
๋ค์๊ณผ ๊ฐ์ด ์ฑํํฉ๋๋ค. ๋ ธ๋ node๋ฅผ ๋ฐ์๋ค์ด๋ ๊ฒ์ ๋ค์ ๋ฌธ์ document์ ๋๋ค:
-
oldDocument๋ฅผ node์ ๋ ธ๋ ๋ฌธ์๋ก ๋ก๋๋ค.
-
node์ ๋ถ๋ชจ๊ฐ null์ด ์๋๋ฉด, ์ ๊ฑฐํฉ๋๋ค: node๋ฅผ.
-
document๊ฐ oldDocument๊ฐ ์๋๋ฉด, ๊ฐ inclusiveDescendant์ ๋ํด, node์ ์๋๋ฅผ ํฌํจํ๋ ํฌ๊ด์ ์์์ ๋ค์ ์๋๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ ์์๋ก ์ฒ๋ฆฌํฉ๋๋ค:
-
inclusiveDescendant์ ๋ ธ๋ ๋ฌธ์๋ฅผ document๋ก ์ค์ ํฉ๋๋ค.
-
inclusiveDescendant๊ฐ ์๋ ๋ฃจํธ์ด๊ณ ๋ค์ ์ค ํ๋๋ผ๋ ์ฐธ์ด๋ฉด:
-
inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ ๊ฐ null์ด๊ณ inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ null ์ ์ง ์ฌ๋ถ๊ฐ false์ด๊ฑฐ๋,
-
inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ ๊ฐ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ด๋ฉด,
inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ค์์ผ๋ก ์ค์ ํฉ๋๋ค: document์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ์ ํจ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ.
-
-
๊ทธ๋ ์ง ์๊ณ , inclusiveDescendant๊ฐ ์์์ด๋ฉด:
-
๋ค์ ๋ ธ๋ ๋ฌธ์๋ฅผ ์ค์ ํฉ๋๋ค. ๊ฐ ์์ฑ์ inclusiveDescendant์ ์์ฑ ๋ชฉ๋ก์ ์์ผ๋ฉฐ, ์ค์ ํ ๊ฐ์ document์ ๋๋ค.
-
inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๊ฐ null์ด๊ฑฐ๋ inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ false์ด๋ฉด:
-
registry๋ฅผ null๋ก ๋ก๋๋ค.
-
inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๊ฐ null์ด ์๋๊ฑฐ๋, inclusiveDescendant์ ๋ถ๋ชจ๊ฐ null์ด๊ฑฐ๋, inclusiveDescendant์ ๋ถ๋ชจ๊ฐ ๋ฐฐํ์
DocumentFragment๋ ธ๋์ด๋ฉด, registry๋ฅผ ์ค์ ํฉ๋๋ค. ์ค์ ํ ๊ฐ์ document์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋๋ค. -
๊ทธ๋ ์ง ์์ผ๋ฉด, registry๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ ์กฐํ. ์ฃผ์ด์ง ๊ฐ์ inclusiveDescendant์ ๋ถ๋ชจ์ ๋๋ค.
-
inclusiveDescendant์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ค์์ผ๋ก ์ค์ ํฉ๋๋ค: registry์ ์ ํจ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ.
-
-
inclusiveDescendant๊ฐ ์ฌ์ฉ์ ์ ์์ด๋ฉด, ์ฌ์ฉ์ ์ ์ ์์ ์ฝ๋ฐฑ ๋ฐ์์ ํ์ ๋ฃ์ต๋๋ค. ์ฌ์ฉํ ๊ฐ์ inclusiveDescendant, ์ฝ๋ฐฑ ์ด๋ฆ "
adoptedCallback", ๊ทธ๋ฆฌ๊ณ ยซ oldDocument, document ยป์ ๋๋ค.
-
-
๋ค์ ์ฑํ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค. ์ฌ์ฉํ ๊ฐ์ inclusiveDescendant์ oldDocument์ ๋๋ค.
-
๋ค์
adoptNode(node)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๊ฐ ๋ฌธ์์ด๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
node๊ฐ ์๋ ๋ฃจํธ์ด๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
HierarchyRequestError"DOMException. -
์ฑํํฉ๋๋ค: node๋ฅผ this๋ก.
-
node๋ฅผ ๋ฐํํฉ๋๋ค.
null ๋๋
CustomElementRegistry๊ฐ์ฒด์ธ registry๋ ๋ค์์ผ ๋ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ ๋๋ค: registry๊ฐ null์ด ์๋๊ณ registry์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ false์ ๋๋ค.null ๋๋
CustomElementRegistry๊ฐ์ฒด์ธ registry์ ์ ํจ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
registry๊ฐ ์ ์ญ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ์ด๋ฉด, ๋ฐํํฉ๋๋ค: registry๋ฅผ.
-
null์ ๋ฐํํฉ๋๋ค.
๋ค์
createAttribute(localName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
localName์ด ์ ํจํ ์์ฑ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException. - ๋ง์ฝ this๊ฐ HTML ๋ฌธ์์ด๋ฉด, ์ค์ ํฉ๋๋ค: localName์ ๋ค์์ผ๋ก: localName์ ASCII ์๋ฌธ์๋ก ๋ณํํ ๊ฐ.
-
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์์ฑ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this์ localName์ ๋๋ค.
๋ค์
createAttributeNS(namespace, qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
(namespace, prefix, localName)์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ถ์ถ. ๋์์ namespace์ qualifiedName์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ "
attribute"์ ๋๋ค. -
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์์ฑ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this, localName, namespace, ๊ทธ๋ฆฌ๊ณ prefix์ ๋๋ค.
๋ค์
createEvent(interface)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
constructor๋ฅผ null๋ก ๋ก๋๋ค.
-
interface๊ฐ ASCII ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๋ค์ ๋ฌธ์์ด ์ค ํ๋์ ์ผ์นํ๋ฉด, ์ฆ ๋ค์ ํ์ ์ฒซ ๋ฒ์งธ ์ด์ ์๋ ๋ฌธ์์ด๊ณผ ์ผ์นํ๋ฉด, constructor๋ฅผ ์ผ์นํ๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ ํ์ ๋ ๋ฒ์งธ ์ด์ ์๋ ์ธํฐํ์ด์ค๋ก ์ค์ ํฉ๋๋ค:
๋ฌธ์์ด ์ธํฐํ์ด์ค ์ฐธ๊ณ " beforeunloadevent"BeforeUnloadEvent[HTML] " compositionevent"CompositionEvent[UIEVENTS] " customevent"CustomEvent" devicemotionevent"DeviceMotionEvent[DEVICE-ORIENTATION] " deviceorientationevent"DeviceOrientationEvent" dragevent"DragEvent[HTML] " event"Event" events"" focusevent"FocusEvent[UIEVENTS] " hashchangeevent"HashChangeEvent[HTML] " htmlevents"Event" keyboardevent"KeyboardEvent[UIEVENTS] " messageevent"MessageEvent[HTML] " mouseevent"MouseEvent[UIEVENTS] " mouseevents"" storageevent"StorageEvent[HTML] " svgevents"Event" textevent"TextEvent[UIEVENTS] " touchevent"TouchEvent[TOUCH-EVENTS] " uievent"UIEvent[UIEVENTS] " uievents" -
constructor๊ฐ null์ด๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
constructor๊ฐ ๋ํ๋ด๋ ์ธํฐํ์ด์ค๊ฐ ๋ค์์ ๋ ธ์ถ๋์ง ์์ผ๋ฉด: ๊ด๋ จ ์ ์ญ ๊ฐ์ฒด, ๊ทธ ์์ ์๋ this์ด๋ฉฐ, ์ด ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException.์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ผ๋ถ ๊ตฌ์ฑ์์ ํฐ์น ์ด๋ฒคํธ ์ง์์ ๋นํ์ฑํํ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ด ์กฐํญ์ ๋ค์ ์ธํฐํ์ด์ค์ ๋ํด ์ ์ฉ๋ฉ๋๋ค:
TouchEvent. -
event๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ด๋ฒคํธ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ constructor์ ๋๋ค.
-
์ด๊ธฐํํ ๊ฒ์ event์
type์์ฑ์ด๋ฉฐ, ๋น ๋ฌธ์์ด๋ก ์ด๊ธฐํํฉ๋๋ค. -
์ด๊ธฐํํ ๊ฒ์ event์
timeStamp์์ฑ์ด๋ฉฐ, ๋ค์์ ํธ์ถํ ๊ฒฐ๊ณผ๋ก ์ด๊ธฐํํฉ๋๋ค: ํ์ฌ ๊ณ ํด์๋ ์๊ฐ. ์ฌ์ฉํ ๊ฐ์ this์ ๊ด๋ จ ์ ์ญ ๊ฐ์ฒด์ ๋๋ค. -
์ด๊ธฐํํ ๊ฒ์ event์
isTrusted์์ฑ์ด๋ฉฐ, false๋ก ์ด๊ธฐํํฉ๋๋ค. -
event์ ์ด๊ธฐํ๋จ ํ๋๊ทธ๋ฅผ ํด์ ํฉ๋๋ค.
-
event๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๋ฒคํธ ์์ฑ์๋ฅผ ๋์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ค์
createRange()๋ฉ์๋ ๋จ๊ณ๋ ์๋ก์ด ๋ผ์ด๋ธ ๋ฒ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค. (this, 0)์ ํด๋น ๋ฒ์์ ์์๊ณผ ๋์ผ๋ก ๊ฐ์ง๋๋ค.๋ค์
Range()์์ฑ์๋ฅผ ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์
createNodeIterator(root, whatToShow, filter)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
iterator๋ฅผ ์๋ก์ด
NodeIterator๊ฐ์ฒด๋ก ๋ก๋๋ค. -
iterator์ ๋ฃจํธ๋ฅผ root๋ก ์ค์ ํฉ๋๋ค.
-
iterator์ ์ฐธ์กฐ๋ฅผ (root, true)๋ก ์ค์ ํฉ๋๋ค.
-
iterator์ whatToShow๋ฅผ whatToShow๋ก ์ค์ ํฉ๋๋ค.
-
iterator์ ํํฐ๋ฅผ filter๋ก ์ค์ ํฉ๋๋ค.
-
iterator๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
createTreeWalker(root, whatToShow, filter)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
walker๋ฅผ ์๋ก์ด
TreeWalker๊ฐ์ฒด๋ก ๋ก๋๋ค. -
walker์ ๋ฃจํธ์ walker์ ํ์ฌ ๋ ธ๋๋ฅผ root๋ก ์ค์ ํฉ๋๋ค.
-
walker์ whatToShow๋ฅผ whatToShow๋ก ์ค์ ํฉ๋๋ค.
-
walker์ ํํฐ๋ฅผ filter๋ก ์ค์ ํฉ๋๋ค.
- walker๋ฅผ ๋ฐํํฉ๋๋ค.
4.5.1. ์ธํฐํ์ด์ค
DOMImplementation์ฌ์ฉ์ ์์ด์ ํธ๋ ๋ค์
DOMImplementation๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ๋ฌธ์๊ฐ ์์ฑ๋ ๋๋ง๋ค ์ํํ๋ฉฐ, ํด๋น ๊ฐ์ฒด๋ฅผ ๊ทธ ๋ฌธ์์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.[
Exposed =Window ]interface { [DOMImplementation NewObject ]DocumentType createDocumentType (DOMString ,name DOMString ,publicId DOMString ); [systemId NewObject ]XMLDocument createDocument (DOMString ?, [namespace LegacyNullToEmptyString ]DOMString ,qualifiedName optional DocumentType ?=doctype null ); [NewObject ]Document createHTMLDocument (optional DOMString );title boolean hasFeature (); // ๊ณผ๊ฑฐ์ ๊ธฐ๋ฅ; ํญ์ true๋ฅผ ๋ฐํํฉ๋๋ค };doctype = document .implementation.createDocumentType(name, publicId, systemId)-
๋ฐํ๊ฐ์ ๋ฌธ์ ์ ํ์ด๋ฉฐ,
์ฃผ์ด์ง name, publicId, systemId๋ฅผ ๊ฐ์ง๋๋ค.
name์ด ์ ํจํ ๋ฌธ์ ์ ํ ์ด๋ฆ์ด ์๋๋ฉด, "
InvalidCharacterError"DOMException์ด ๋ฐ์ํฉ๋๋ค. doc = document .implementation. createDocument(namespace, qualifiedName [, doctype = null])-
๋ฐํ๊ฐ์
XMLDocument์ด๋ฉฐ, ๋ค์์ ๊ฐ์ง๋๋ค: ๋ฌธ์ ์์. ํด๋น ์์์ ๋ก์ปฌ ์ด๋ฆ์ qualifiedName์ด๊ณ ํด๋น ์์์ ๋ค์์คํ์ด์ค๋ namespace์ ๋๋ค(qualifiedName์ด ๋น ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ๋ ์ ์ธํฉ๋๋ค). ๋ํ doctype์ด ์ฃผ์ด์ง๋ฉด ์ด๋ฅผ ๋ฌธ์ ์ ํ์ผ๋ก ๊ฐ์ง๋๋ค.์ด ๋ฉ์๋๋ ๋ค์
createElementNS()๋ฉ์๋์ ๋์ผํ ์์ธ๋ฅผ ๋์ง๋ฉฐ, ์ด๋ namespace์ qualifiedName์ผ๋ก ํธ์ถํ์ ๋์ ์์ธ์ ๋๋ค. doc = document .implementation. createHTMLDocument([title])-
๋ฐํ๊ฐ์ ๋ฌธ์์ด๋ฉฐ,
๊ธฐ๋ณธ์ ์ธ
ํธ๋ฆฌ๊ฐ ์ด๋ฏธ ๊ตฌ์ฑ๋์ด ์๊ณ
๋ค์์ ํฌํจํฉ๋๋ค:
title์์. ๋จ, title ์ธ์๊ฐ ์๋ต๋ ๊ฒฝ์ฐ๋ ์ ์ธํฉ๋๋ค.
๋ค์
createDocumentType(name, publicId, systemId)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
name์ด ์ ํจํ ๋ฌธ์ ์ ํ ์ด๋ฆ์ด ์๋๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException. -
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ๋ฌธ์ ์ ํ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ ์ฐ๊ฒฐ๋ ๋ฌธ์, ์ฆ this์ ์ฐ๊ฒฐ๋ ๋ฌธ์์, name, publicId, ๊ทธ๋ฆฌ๊ณ systemId์ ๋๋ค.
๋ค์
createDocument(namespace, qualifiedName, doctype)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
document๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ๋ฌธ์ ์์ฑ. ์ด ๋ฌธ์๊ฐ ๊ตฌํํ๋ ๊ฒ์
XMLDocument์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ this์ ๊ด๋ จ ๋ ๋ฆ์ ๋๋ค. -
element๋ฅผ null๋ก ๋ก๋๋ค.
-
qualifiedName์ด ๋น ๋ฌธ์์ด์ด ์๋๋ฉด, element๋ฅผ ๋ค์ ์คํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ๋ด๋ถ
createElementNS๋จ๊ณ. ์ฃผ์ด์ง ๊ฐ์ document, namespace, qualifiedName, ๊ทธ๋ฆฌ๊ณ ๋น ๋์ ๋๋ฆฌ์ ๋๋ค. -
doctype์ด null์ด ์๋๋ฉด, ๋ง๋ถ์ ๋๋ค: doctype์ document์.
-
element๊ฐ null์ด ์๋๋ฉด, ๋ง๋ถ์ ๋๋ค: element๋ฅผ document์.
-
document์ ์ถ์ฒ๋ this์ ์ฐ๊ฒฐ๋ ๋ฌธ์์ ์ถ์ฒ์ ๋๋ค.
-
document์ ์ฝํ ์ธ ์ ํ์ ๋ค์์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค: namespace:
- HTML ๋ค์์คํ์ด์ค
application/xhtml+xml- SVG ๋ค์์คํ์ด์ค
image/svg+xml- ๊ทธ ๋ฐ์ ๋ชจ๋ ๋ค์์คํ์ด์ค
application/xml
-
document๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
createHTMLDocument(title)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
doc์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ๋ฌธ์ ์์ฑ. ์ด ๋ฌธ์๊ฐ ๊ตฌํํ๋ ๊ฒ์
Document์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ this์ ๊ด๋ จ ๋ ๋ฆ์ ๋๋ค. -
doc์ ์ ํ์ "
html"๋ก ์ค์ ํ๊ณ ์ฝํ ์ธ ์ ํ์ "text/html"๋ก ์ค์ ํฉ๋๋ค. -
doctype์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ๋ฌธ์ ์ ํ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ doc๊ณผ "
html"์ ๋๋ค. -
๋ง๋ถ์ ๋๋ค: doctype์ doc์.
-
๋ง๋ถ์ ๋๋ค: ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ. ์์ ์์ฑ์ ์ฃผ์ด์ง ๊ฐ์ doc, "
html", ๊ทธ๋ฆฌ๊ณ HTML ๋ค์์คํ์ด์ค์ด๋ฉฐ, ๋ง๋ถ์ผ ๋์์ doc์ ๋๋ค. -
๋ง๋ถ์ ๋๋ค: ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ. ์์ ์์ฑ์ ์ฃผ์ด์ง ๊ฐ์ doc, "
head", ๊ทธ๋ฆฌ๊ณ HTML ๋ค์์คํ์ด์ค์ด๋ฉฐ, ๋ง๋ถ์ผ ๋์์html์์๋ก, ์์ ์์ฑํ ๊ฒ์ ๋๋ค. -
title์ด ์ฃผ์ด์ง๋ฉด:
-
๋ง๋ถ์ ๋๋ค: ๋ค์ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ. ์์ฑํ ๊ฒ์ ์์์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ doc, "
title", ๊ทธ๋ฆฌ๊ณ HTML ๋ค์์คํ์ด์ค์ ๋๋ค. ๋ง๋ถ์ผ ๋์์head์์๋ก, ์์ ์์ฑํ ๊ฒ์ ๋๋ค. -
text๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ํ ์คํธ ๋ ธ๋ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ doc๊ณผ title(๋น ๋ฌธ์์ด์ผ ์ ์์ต๋๋ค)์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: text๋ฅผ ๋ค์
title์์์. ์ด ์์๋ ์์ ์์ฑํ ๊ฒ์ ๋๋ค.
-
-
๋ง๋ถ์ ๋๋ค: ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ. ์์ ์์ฑ์ ์ฃผ์ด์ง ๊ฐ์ doc, "
body", ๊ทธ๋ฆฌ๊ณ HTML ๋ค์์คํ์ด์ค์ด๋ฉฐ, ๋ง๋ถ์ผ ๋์์html์์๋ก, ์์ ์์ฑํ ๊ฒ์ ๋๋ค. -
doc์ ์ถ์ฒ๋ this์ ์ฐ๊ฒฐ๋ ๋ฌธ์์ ์ถ์ฒ์ ๋๋ค.
-
doc์ ๋ฐํํฉ๋๋ค.
๋ค์
hasFeature()๋ฉ์๋ ๋จ๊ณ๋ true๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.hasFeature()๋ ์๋ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ์ฃผ์ด์ง DOM ๊ธฐ๋ฅ์ ์ง์ํ๋ค๊ณ ์ฃผ์ฅํ๋์ง ๋ณด๊ณ ํ์ง๋ง, ์ค์ ๊ฒฝํ์ ํตํด ์ํ๋ ๊ฐ์ฒด, ์์ฑ ๋๋ ๋ฉ์๋๊ฐ ์กด์ฌํ๋์ง ๋จ์ํ ํ์ธํ๋ ๊ฒ๋งํผ ์ ๋ขฐํ ์ ์๊ฑฐ๋ ์ธ๋ฐํ์ง ์๋ค๋ ์ ์ด ์ ์ฆ๋์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ์ด์ ์ฌ์ฉํด์๋ ์ ๋์ง๋ง, ๊ณ์ ์กด์ฌํ๋ฉฐ(๋จ์ํ true๋ฅผ ๋ฐํํฉ๋๋ค), ์ด๋ ์ด์ ํ์ด์ง๊ฐ ์๋์ ๋ฉ์ถ์ง ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.4.6. ์ธํฐํ์ด์ค
DocumentType[
Exposed =Window ]interface :DocumentType Node {readonly attribute DOMString name ;readonly attribute DOMString publicId ;readonly attribute DOMString systemId ; };DocumentType๋ ธ๋๋ ๊ฐ๋จํ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฆ ๋๋ค: ๋ฌธ์ ์ ํ.๋ฌธ์ ์ ํ์๋ ๋ค์์ด ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค: ์ด๋ฆ(๋ฌธ์์ด), ๊ณต๊ฐ ID(๋ฌธ์์ด), ๊ทธ๋ฆฌ๊ณ ์์คํ ID(๋ฌธ์์ด).
๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์ ์ ํ์ ์์ฑํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ ๋ฌธ์ document, ๋ฌธ์์ด name, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ผ๋ก ๋ฌธ์์ด publicId(๊ธฐ๋ณธ๊ฐ์ ๋น ๋ฌธ์์ด)์ ๋ฌธ์์ด systemId(๊ธฐ๋ณธ๊ฐ์ ๋น ๋ฌธ์์ด)์ ๋๋ค:
-
doctype์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ๋ ธ๋ ์์ฑ. ์ด ๋ ธ๋๊ฐ ๊ตฌํํ๋ ๊ฒ์
DocumentType์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ document์ ๋๋ค. -
doctype์ ์ด๋ฆ์ name์ผ๋ก, ๊ณต๊ฐ ID๋ฅผ publicId๋ก, ๊ทธ๋ฆฌ๊ณ ์์คํ ID๋ฅผ systemId๋ก ์ค์ ํฉ๋๋ค.
-
doctype์ ๋ฐํํฉ๋๋ค.
๋ค์
namegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์ด๋ฆ.๋ค์
publicIdgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๊ณต๊ฐ ID.๋ค์
systemIdgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์์คํ ID.4.7. ์ธํฐํ์ด์ค
DocumentFragment[
Exposed =Window ]interface :DocumentFragment Node {constructor (); };tree = newDocumentFragment()- ์๋ก์ด
DocumentFragment๋ ธ๋๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐฐํ์
DocumentFragment๋ ธ๋๋DocumentFragment๋ ธ๋์ด์ง๋งShadowRoot๋ ธ๋๋ ์๋๋๋ค.DocumentFragment๋ ธ๋์๋ ์ฐ๊ฒฐ๋ ํธ์คํธ(null ๋๋ ๋ค๋ฅธ ์์์ด๋ฉฐ, ์ด ์์๋ ๋ค๋ฅธ ๋ ธ๋ ํธ๋ฆฌ์ ์ํฉ๋๋ค)๊ฐ ์์ต๋๋ค. ์ด๋ ๋ฌ๋ฆฌ ๋ช ์ํ์ง ์๋ ํ null์ ๋๋ค.๊ฐ์ฒด A๊ฐ ํธ์คํธ ํฌํจ ํฌ๊ด์ ์กฐ์์ธ ๊ฒ์ ๊ฐ์ฒด B์ ๋ํด A๊ฐ ํฌ๊ด์ ์กฐ์์ด๊ฑฐ๋, ๋๋ B์ ๋ฃจํธ์ null์ด ์๋ ํธ์คํธ๊ฐ ์๊ณ A๊ฐ ํธ์คํธ ํฌํจ ํฌ๊ด์ ์กฐ์์ผ๋ก์ B์ ๋ฃจํธ์ ํธ์คํธ์ ๋ํด ์ฑ๋ฆฝํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
DocumentFragment๋ ธ๋์ ํธ์คํธ ๊ฐ๋ ์ HTML์template์์์ ์๋ ๋ฃจํธ์ ์ ์ฉํ๋ฉฐ, ์ฌ์ ์ฝ์ ๋ฐ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ํฅ์ ์ค๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค: ๋ฌธ์ ์กฐ๊ฐ์. ์ฃผ์ด์ง ๊ฐ์ ๋ฌธ์ document์ ๋๋ค: ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ๋ ธ๋ ์์ฑ. ์ด ๋ ธ๋๊ฐ ๊ตฌํํ๋ ๊ฒ์
DocumentFragment์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ document์ ๋๋ค.๋ค์
new DocumentFragment()์์ฑ์ ๋จ๊ณ๋ ๋ค์์ ์ค์ ํ๋ ๊ฒ์ ๋๋ค: this์ ๋ ธ๋ ๋ฌธ์๋ฅผ ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋Document๋ก.4.8. ์ธํฐํ์ด์ค
ShadowRoot[
Exposed =Window ]interface :ShadowRoot DocumentFragment {readonly attribute ShadowRootMode mode ;readonly attribute boolean delegatesFocus ;readonly attribute boolean serializable ;readonly attribute SlotAssignmentMode slotAssignment ;readonly attribute boolean clonable ;readonly attribute Element host ;attribute EventHandler onslotchange ; };enum {ShadowRootMode ,"open" };"closed" enum {SlotAssignmentMode ,"manual" };"named" ShadowRoot๋ ธ๋๋ ๊ฐ๋จํ ์๋ ๋ฃจํธ๋ผ๊ณ ํฉ๋๋ค.์๋ ๋ฃจํธ์ ์ฐ๊ฒฐ๋ ํธ์คํธ๋ ์ ๋๋ก null์ด ์๋๋๋ค.
์๋ ๋ฃจํธ์๋ ์ฐ๊ฒฐ๋ ๋ชจ๋("
open" ๋๋ "closed")๊ฐ ์์ต๋๋ค.์๋ ๋ฃจํธ์๋ ์ฐ๊ฒฐ๋ ํฌ์ปค์ค ์์ (๋ถ๋ฆฌ์ธ)์ด ์์ต๋๋ค. ์ด๊ธฐ๊ฐ์ false์ ๋๋ค.
์๋ ๋ฃจํธ์๋ ๋ค์ ํญ๋ชฉ์ด ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์์ ๋ด๋ถ์์ ์ฌ์ฉ ๊ฐ๋ฅ(๋ถ๋ฆฌ์ธ)์ด๋ฉฐ, ์ด๊ธฐ๊ฐ์ false์ ๋๋ค.
์๋ ๋ฃจํธ์๋ ์ฐ๊ฒฐ๋ ์ ์ธ์ ์ฌ๋ถ (๋ถ๋ฆฌ์ธ)๊ฐ ์์ต๋๋ค. ์ด๊ธฐ๊ฐ์ false์ ๋๋ค.
์๋ ๋ฃจํธ์๋ ์ฐ๊ฒฐ๋ ์ง๋ ฌํ ๊ฐ๋ฅ ์ฌ๋ถ(๋ถ๋ฆฌ์ธ)๊ฐ ์์ต๋๋ค. ์ด๊ธฐ๊ฐ์ false์ ๋๋ค.
์๋ ๋ฃจํธ์๋ ์ฐ๊ฒฐ๋ ์ฌ๋กฏ ํ ๋น ("
manual" ๋๋ "named")์ด ์์ต๋๋ค.์๋ ๋ฃจํธ์๋ ์ฐ๊ฒฐ๋ ๋ณต์ ๊ฐ๋ฅ ์ฌ๋ถ(๋ถ๋ฆฌ์ธ)๊ฐ ์์ต๋๋ค. ์ด๊ธฐ๊ฐ์ false์ ๋๋ค.
์๋ ๋ฃจํธ์๋ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ (null ๋๋
CustomElementRegistry๊ฐ์ฒด)๊ฐ ์์ต๋๋ค. ์ด๊ธฐ๊ฐ์ null์ ๋๋ค.์๋ ๋ฃจํธ์๋ ๋ค์ ํญ๋ชฉ์ด ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ null๋ก ์ ์ง(๋ถ๋ฆฌ์ธ)์ ๋๋ค. ์ด๊ธฐ๊ฐ์ false์ ๋๋ค.
์ด ๊ฐ์ ์ ์ธ์ ์๋ ๋ฃจํธ์ ํจ๊ป ์ฌ์ฉ๋ ๋๋ง true๊ฐ ๋ ์ ์์ต๋๋ค. ๋ํ ์๋ ๋ฃจํธ์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๊ฐ null์ธ ๋์์๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค.
์๋ ๋ฃจํธ์ ๋ถ๋ชจ ๊ฐ์ ธ์ค๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ event๊ฐ ์ฃผ์ด์ก์ ๋, event์ ํฉ์ฑ ํ๋๊ทธ๊ฐ ์ค์ ๋์ง ์์๊ณ ์๋ ๋ฃจํธ๊ฐ event์ ๊ฒฝ๋ก์์ ์ฒซ ๋ฒ์งธ ์ด๋ฒคํธ ๊ฒฝ๋ก ํญ๋ชฉ์ ํธ์ถ ๋์์ ๋ฃจํธ์ด๋ฉด null์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ ๋ฃจํธ์ ํธ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
modegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ชจ๋.๋ค์
delegatesFocusgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ํฌ์ปค์ค ์์ ์ฌ๋ถ.๋ค์
serializablegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์ง๋ ฌํ ๊ฐ๋ฅ ์ฌ๋ถ.๋ค์
slotAssignmentgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์ฌ๋กฏ ํ ๋น.๋ค์
clonablegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ณต์ ๊ฐ๋ฅ ์ฌ๋ถ.๋ค์
hostgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ํธ์คํธ.
onslotchange์์ฑ์onslotchange์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ IDL ์์ฑ์ด๋ฉฐ, ํด๋น ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ด๋ฒคํธ ์ ํ์slotchange์ ๋๋ค.
์๋ ํฌํจ ํธ๋ฆฌ ์์๋ ์๋ ํฌํจ ์ ์ ๊น์ด ์ฐ์ ์ํ์ ๋ฐ๋ฅธ ๋ ธ๋ ํธ๋ฆฌ์ ์์์ ๋๋ค. ๋ ธ๋ ํธ๋ฆฌ tree์ ์๋ ํฌํจ ์ ์ ๊น์ด ์ฐ์ ์ํ๋ tree์ ์ ์ ๊น์ด ์ฐ์ ์ํ์ด๋ฉฐ, ๊ฐ ์๋ ํธ์คํธ๋ฅผ tree์์ ๋ง๋ ๋๋ง๋ค ํด๋น ์์์ ์๋ ๋ฃจํธ์ ๋ ธ๋ ํธ๋ฆฌ์ ๋ํ ์๋ ํฌํจ ์ ์ ๊น์ด ์ฐ์ ์ํ๋ฅผ ์๋ ํธ์คํธ๋ฅผ ๋ง๋ ์งํ์ ์ํํฉ๋๋ค.
๊ฐ์ฒด์ ์๋ ํฌํจ ๋ฃจํธ๋ ํด๋น ๊ฐ์ฒด์ ๋ฃจํธ์ ํธ์คํธ์ ์๋ ํฌํจ ๋ฃจํธ์ ๋๋ค. ๋จ, ํด๋น ๊ฐ์ฒด์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ๊ฐ์ฒด์ ๋ฃจํธ์ ๋๋ค.
๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B์ ์๋ ํฌํจ ์์์ธ ๊ฒ์ A๊ฐ B์ ์์์ด๊ฑฐ๋, A์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ด๊ณ A์ ๋ฃจํธ์ ํธ์คํธ๊ฐ B์ ์๋ ํฌํจ ํฌ๊ด์ ์์์ธ ๊ฒฝ์ฐ์ ๋๋ค.
์๋ ํฌํจ ํฌ๊ด์ ์์์ ๊ฐ์ฒด ์์ ๋๋ ํด๋น ๊ฐ์ฒด์ ์๋ ํฌํจ ์์ ์ค ํ๋์ ๋๋ค.
๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B์ ์๋ ํฌํจ ์กฐ์์ธ ๊ฒ์ B๊ฐ A์ ์๋ ํฌํจ ์์์ธ ๊ฒฝ์ฐ์ ํํฉ๋๋ค.
์๋ ํฌํจ ํฌ๊ด์ ์กฐ์์ ๊ฐ์ฒด ์์ ๋๋ ํด๋น ๊ฐ์ฒด์ ์๋ ํฌํจ ์กฐ์ ์ค ํ๋์ ๋๋ค.
๋ ธ๋ A๊ฐ ๋ ธ๋ B์์ ๋ซํ ์๋์ ์ํด ์จ๊ฒจ์ง ๊ฒ์ ๋ค์ ์กฐ๊ฑด์ด ๋ชจ๋ ์ฐธ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
-
A์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ ๋๋ค.
-
A์ ๋ฃจํธ๊ฐ B์ ์๋ ํฌํจ ํฌ๊ด์ ์กฐ์์ด ์๋๋๋ค.
-
A์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ์ด๊ณ ํด๋น ๋ชจ๋๊ฐ "
closed"์ด๊ฑฐ๋, A์ ๋ฃจํธ์ ํธ์คํธ๊ฐ B์์ ์์ต๋๋ค.
๊ฐ์ฒด B๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฒด A์ ๋์์ ์ฌ์ง์ ํ๋ ค๋ฉด, ๊ฐ์ฒด๊ฐ ๋ฐํ๋ ๋๊น์ง ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
-
๋ค์ ์ค ํ๋๋ผ๋ ์ฐธ์ด๋ฉด
- A๊ฐ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ
- A์ ๋ฃจํธ๊ฐ ์๋ ๋ฃจํธ๊ฐ ์๋ ๊ฒฝ์ฐ
- B๊ฐ ๋ ธ๋์ด๊ณ A์ ๋ฃจํธ๊ฐ B์ ์๋ ํฌํจ ํฌ๊ด์ ์กฐ์์ธ ๊ฒฝ์ฐ
A๋ฅผ ๋ฐํํฉ๋๋ค.
๋์ ์ฌ์ง์ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฒคํธ ๋์คํจ์น๋ฟ๋ง ์๋๋ผ Fullscreen๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ช ์ธ์์๋ ์ฌ์ฉ๋ฉ๋๋ค. [FULLSCREEN]
4.9. ์ธํฐํ์ด์ค
Element[
Exposed =Window ]interface :Element Node {readonly attribute DOMString ?namespaceURI ;readonly attribute DOMString ?prefix ;readonly attribute DOMString localName ;readonly attribute DOMString tagName ; [CEReactions ]attribute DOMString id ; [CEReactions ]attribute DOMString className ; [SameObject ,PutForwards =value ]readonly attribute DOMTokenList classList ; [CEReactions ,Unscopable ]attribute DOMString slot ;boolean hasAttributes (); [SameObject ]readonly attribute NamedNodeMap attributes ;sequence <DOMString >getAttributeNames ();DOMString ?getAttribute (DOMString );qualifiedName DOMString ?getAttributeNS (DOMString ?,namespace DOMString ); [localName CEReactions ]undefined setAttribute (DOMString , (qualifiedName TrustedType or DOMString )); [value CEReactions ]undefined setAttributeNS (DOMString ?,namespace DOMString , (qualifiedName TrustedType or DOMString )); [value CEReactions ]undefined removeAttribute (DOMString ); [qualifiedName CEReactions ]undefined removeAttributeNS (DOMString ?,namespace DOMString ); [localName CEReactions ]boolean toggleAttribute (DOMString ,qualifiedName optional boolean );force boolean hasAttribute (DOMString );qualifiedName boolean hasAttributeNS (DOMString ?,namespace DOMString );localName Attr ?getAttributeNode (DOMString );qualifiedName Attr ?getAttributeNodeNS (DOMString ?,namespace DOMString ); [localName CEReactions ]Attr ?setAttributeNode (Attr ); [attr CEReactions ]Attr ?setAttributeNodeNS (Attr ); [attr CEReactions ]Attr removeAttributeNode (Attr );attr ShadowRoot attachShadow (ShadowRootInit );init readonly attribute ShadowRoot ?shadowRoot ;readonly attribute CustomElementRegistry ?customElementRegistry ;Element ?closest (DOMString );selectors boolean matches (DOMString );selectors boolean webkitMatchesSelector (DOMString ); // legacy alias of .matchesselectors HTMLCollection getElementsByTagName (DOMString );qualifiedName HTMLCollection getElementsByTagNameNS (DOMString ?,namespace DOMString );localName HTMLCollection getElementsByClassName (DOMString ); [classNames CEReactions ]Element ?insertAdjacentElement (DOMString ,where Element ); // legacyelement undefined insertAdjacentText (DOMString ,where DOMString ); // legacy };data dictionary {ShadowRootInit required ShadowRootMode ;mode boolean =delegatesFocus false ;boolean =serializable false ;SlotAssignmentMode = "named";slotAssignment boolean =clonable false ;CustomElementRegistry ?; };customElementRegistry ShadowRootInit์ ๋ค์ ์ด๋ก์ ์ผ๋กundefined์null์ ๋ชจ๋customElementRegistry๋ฉค๋ฒ์ ์ ๋ฌํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ์ด๋ ์น ๊ฐ๋ฐ์๊ฐ ์ฌ์ ๋์ShadowRoot๋ ธ๋๋ฅผattachShadow()์ ์ ๋ฌํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.Element๋ ธ๋๋ ๊ฐ๋จํ ์์๋ผ๊ณ ํฉ๋๋ค.์์์๋ ๋ค์ ํญ๋ชฉ์ด ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
- ๋ค์์คํ์ด์ค
- Null ๋๋ ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ๋๋ค.
- ๋ค์์คํ์ด์ค ์ ๋์ฌ
- Null ๋๋ ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ๋๋ค.
- ๋ก์ปฌ ์ด๋ฆ
- ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ
- Null ๋๋
CustomElementRegistry๊ฐ์ฒด์ ๋๋ค. - ์ฌ์ฉ์ ์ ์ ์์ ์ํ
- "
undefined", "failed", "uncustomized", "precustomized" ๋๋ "custom"์ ๋๋ค. - ์ฌ์ฉ์ ์ ์ ์์ ์ ์
- Null ๋๋ ์ฌ์ฉ์ ์ ์ ์์ ์ ์์ ๋๋ค.
is๊ฐ- Null ๋๋ ์ ํจํ ์ฌ์ฉ์ ์ ์ ์์ ์ด๋ฆ์ ๋๋ค.
์์๊ฐ ์์ฑ๋ ๋ ์ด๋ฌํ ๊ฐ์ ๋ชจ๋ ์ด๊ธฐํ๋ฉ๋๋ค.
์์์ ์ฌ์ฉ์ ์ ์ ์์ ์ํ๊ฐ "
uncustomized" ๋๋ "custom"์ด๋ฉด ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์์์ ์ฌ์ฉ์ ์ ์ ์์ ์ํ๊ฐ "custom"์ด๋ฉด ์ฌ์ฉ์ ์ ์ ์์๋ผ๊ณ ํฉ๋๋ค.์์๊ฐ ์ ์๋์๋์ง ์ฌ๋ถ๋ :defined ์์ฌ ํด๋์ค์ ๋์์ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์๊ฐ ์ฌ์ฉ์ ์ ์ ์์์ธ์ง ์ฌ๋ถ๋ ๋ณ๊ฒฝ ์๊ณ ๋ฆฌ์ฆ์ ๋์์ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. "
failed"์ "precustomized" ์ํ๋ ์ฌ์ฉ์ ์ ์ ์์ ์์ฑ์๊ฐ ์ฒ์์ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋์ง ๋ชปํ ๊ฒฝ์ฐ ์ ๊ทธ๋ ์ด๋๋ฅผ ํตํด ๋ค์ ์คํ๋์ง ์๋๋ก ๋ณด์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.๋ค์ ์ฝ๋๋ ์ด๋ฌํ ๋ค ๊ฐ์ง ์ํ ๊ฐ๊ฐ์ ํด๋นํ๋ ์์๋ฅผ ๋ณด์ฌ ์ค๋๋ค.
<!DOCTYPE html> < script > window. customElements. define( "sw-rey" , class extends HTMLElement{}) window. customElements. define( "sw-finn" , class extends HTMLElement{}, { extends : "p" }) window. customElements. define( "sw-kylo" , class extends HTMLElement{ constructor () { // ์ด ์์ ์์๋ ์๋์ ์ผ๋ก super() ํธ์ถ์ ์๋ตํ์ต๋๋ค. } }) </ script > <!-- "undefined" (์ ์๋์ง ์์, ์ฌ์ฉ์ ์ ์ ์์๊ฐ ์๋) --> < sw-han ></ sw-han > < p is = "sw-luke" ></ p > < p is = "asdf" ></ p > <!-- "failed" (์ ์๋์ง ์์, ์ฌ์ฉ์ ์ ์ ์์๊ฐ ์๋) --> < sw-kylo ></ sw-kylo > <!-- "uncustomized" (์ ์๋จ, ์ฌ์ฉ์ ์ ์ ์์๊ฐ ์๋) --> < p ></ p > < asdf ></ asdf > <!-- "custom" (์ ์๋จ, ์ฌ์ฉ์ ์ ์ ์์์) --> < sw-rey ></ sw-rey > < p is = "sw-finn" ></ p > ์์์๋ ์ฐ๊ฒฐ๋ ์๋ ๋ฃจํธ(null ๋๋ ์๋ ๋ฃจํธ)๋ ์์ต๋๋ค. ๋ฌ๋ฆฌ ๋ช ์ํ์ง ์๋ ํ null์ ๋๋ค. ์์๋ ์์ ์ ์๋ ๋ฃจํธ๊ฐ null์ด ์๋๋ฉด ์๋ ํธ์คํธ๋ผ๊ณ ํฉ๋๋ค.
์์์ ํ์ ์ด๋ฆ์ ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ null์ด๋ฉด ํด๋น ์์์ ๋ก์ปฌ ์ด๋ฆ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํด๋น ์์์ ๋ค์์คํ์ด์ค ์ ๋์ฌ ๋ค์ "
:"๋ฅผ ๋ถ์ด๊ณ , ๊ทธ ๋ค์ ํด๋น ์์์ ๋ก์ปฌ ์ด๋ฆ์ ๋ถ์ธ ๊ฒ์ ๋๋ค.์์์ HTML ๋๋ฌธ์ํ๋ ํ์ ์ด๋ฆ์ ๋ค์ ๋จ๊ณ์ ๋ฐํ๊ฐ์ ๋๋ค.
-
qualifiedName์ ๋ค์์ผ๋ก ๋ก๋๋ค: this์ ํ์ ์ด๋ฆ.
-
๋ง์ฝ this๊ฐ HTML ๋ค์์คํ์ด์ค์ ์ํ๊ณ ๊ทธ ๋ ธ๋ ๋ฌธ์๊ฐ HTML ๋ฌธ์์ด๋ฉด, ๋ค์์ ๋ฐํํฉ๋๋ค: qualifiedName์ ASCII ๋๋ฌธ์๋ก ๋ณํํ ๊ฐ.
- qualifiedName์ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ์ ์์ด์ ํธ๋ ํ์ ์ด๋ฆ๊ณผ HTML ๋๋ฌธ์ํ๋ ํ์ ์ด๋ฆ์ ๋ด๋ถ ์ฌ๋กฏ์ ์ ์ฅํ์ฌ ์ต์ ํํ ์ ์์ต๋๋ค.
์์๋ฅผ ์์ฑํ๋ ค๋ฉด, ๋ฌธ์ document, ๋ฌธ์์ด localName, ๋ฌธ์์ด ๋๋ null์ธ namespace, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ผ๋ก ๋ฌธ์์ด ๋๋ null์ธ prefix(๊ธฐ๋ณธ๊ฐ null), ๋ฌธ์์ด ๋๋ null์ธ is(๊ธฐ๋ณธ๊ฐ null), ๋ถ๋ฆฌ์ธ synchronousCustomElements(๊ธฐ๋ณธ๊ฐ false), ๊ทธ๋ฆฌ๊ณ "
default", null ๋๋CustomElementRegistry๊ฐ์ฒด registry(๊ธฐ๋ณธ๊ฐ "default")๊ฐ ์ฃผ์ด์ก์ ๋:-
result๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
registry๊ฐ "
default"์ด๋ฉด registry๋ฅผ document๊ฐ ์ฃผ์ด์ก์ ๋ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์กฐํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. -
definition์ registry, namespace, localName, is๊ฐ ์ฃผ์ด์ก์ ๋ ์ฌ์ฉ์ ์ ์ ์์ ์ ์๋ฅผ ์กฐํํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
definition์ด null์ด ์๋๊ณ definition์ ์ด๋ฆ์ด ๋ก์ปฌ ์ด๋ฆ๊ณผ ๊ฐ์ง ์์ผ๋ฉด(์ฆ, definition์ด ์ฌ์ฉ์ ์ ์ ๋ด์ฅ ์์๋ฅผ ๋ํ๋ด๋ฉด):
-
interface๋ฅผ localName๊ณผ HTML ๋ค์์คํ์ด์ค์ ๋ํ ์์ ์ธํฐํ์ด์ค๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ document, interface, localName, HTML ๋ค์์คํ์ด์ค, prefix, "
undefined", is, registry๊ฐ ์ฃผ์ด์ก์ ๋ ๋ด๋ถ์ ์ผ๋ก ์์๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. -
synchronousCustomElements๊ฐ true์ด๋ฉด ์์ธ๋ฅผ ํฌ์ฐฉํ๋ฉด์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
definition์ ์ฌ์ฉํ์ฌ result๋ฅผ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค.
์ด ๋จ๊ณ์์ ์์ธ exception์ด ๋ฐ์ํ๋ค๋ฉด:
-
definition์ ์์ฑ์์ ๋์ํ๋ JavaScript ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ์์ญ์ ์ ์ญ ๊ฐ์ฒด์ ๋ํด exception์ ๋ณด๊ณ ํฉ๋๋ค.
-
result์ ์ฌ์ฉ์ ์ ์ ์์ ์ํ๋ฅผ "
failed"๋ก ์ค์ ํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด result์ definition์ด ์ฃผ์ด์ก์ ๋ ์ฌ์ฉ์ ์ ์ ์์ ์ ๊ทธ๋ ์ด๋ ๋ฐ์์ ํ์ ์ถ๊ฐํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ definition์ด null์ด ์๋๋ฉด:
-
synchronousCustomElements๊ฐ true์ด๋ฉด:
-
C๋ฅผ definition์ ์์ฑ์๋ก ์ค์ ํฉ๋๋ค.
-
previousRegistry๋ฅผ ์ฃผ๋ณ ์์ด์ ํธ์ ํ์ฑ ์ฌ์ฉ์ ์ ์ ์์ ์์ฑ์ ๋งต[C]์ ๊ฐ์ผ๋ก ์ค์ ํ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ null์ ๋๋ค.
-
์ค์ ํฉ๋๋ค. ์ฃผ๋ณ ์์ด์ ํธ์ ํ์ฑ ์ฌ์ฉ์ ์ ์ ์์ ์์ฑ์ ๋งต[C]์ registry๋ก ์ค์ ํฉ๋๋ค.
-
์์ธ๋ฅผ ํฌ์ฐฉํ๋ฉด์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
result๋ฅผ ์ธ์ ์์ด C๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
๋จ์ธํฉ๋๋ค: ๋ค์ ์ค ํ๋๊ฐ ์ฐธ์ ๋๋ค.
- result์ ์ฌ์ฉ์ ์ ์
์์ ์ํ๊ฐ "
custom"์ด๊ณ ์ฌ์ฉ์ ์ ์ ์์ ์ ์๊ฐ null์ด ์๋๋๋ค. - result์ ์ฌ์ฉ์ ์ ์
์์ ์ํ๊ฐ
"
precustomized"์ ๋๋ค. ๋๋ - result์ ์ฌ์ฉ์ ์ ์
์์ ์ํ๊ฐ
"
custom"๋ "precustomized"๋ ์๋๊ณ ์ฌ์ฉ์ ์ ์ ์์ ์ ์๊ฐ null์ ๋๋ค.
customElements. define( "x-example" , class extends HTMLElement{ constructor () { // ๋น์ค์: super()๋ฅผ ํธ์ถํ๋ ๋์ ๊ธฐ์กด ์์๋ฅผ ๋ฐํํฉ๋๋ค. return document. createElement( "p" ); } }); document. createElement( "x-example" ); ์ฌ๊ธฐ์ result๋
p์์์ด๋ฉฐ, ํด๋น ์์์ ์ฌ์ฉ์ ์ ์ ์์ ์ํ๋ "uncustomized"์ด๊ณ ์ฌ์ฉ์ ์ ์ ์์ ์ ์๋ null์ ๋๋ค. - result์ ์ฌ์ฉ์ ์ ์
์์ ์ํ๊ฐ "
-
๋จ์ธํฉ๋๋ค: result์ ๋ค์์คํ์ด์ค๋ HTML ๋ค์์คํ์ด์ค์ ๋๋ค.
IDL์ result๊ฐ
HTMLElement๊ฐ์ฒด์์ ๋ณด์ฅํ๋ฉฐ, ์ด๋ฌํ ๊ฐ์ฒด๋ ๋ชจ๋ HTML ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. -
result์ ์์ฑ ๋ชฉ๋ก์ด ๋น์ด ์์ง ์์ผ๋ฉด "
NotSupportedError"DOMException์ ๋์ง๋๋ค. -
result์ ์์์ด ์์ผ๋ฉด "
NotSupportedError"DOMException์ ๋์ง๋๋ค. -
result์ ๋ถ๋ชจ๊ฐ null์ด ์๋๋ฉด "
NotSupportedError"DOMException์ ๋์ง๋๋ค. -
result์ ๋ ธ๋ ๋ฌธ์๊ฐ document๊ฐ ์๋๋ฉด "
NotSupportedError"DOMException์ ๋์ง๋๋ค. -
result์ ๋ก์ปฌ ์ด๋ฆ์ด localName๊ณผ ๊ฐ์ง ์์ผ๋ฉด ๋์ง๋๋ค. ์์ธ๋ "
NotSupportedError"DOMException์ ๋๋ค. -
result์ ๋ค์์คํ์ด์ค ์ ๋์ฌ๋ฅผ prefix๋ก ์ค์ ํฉ๋๋ค.
-
result์
is๊ฐ์ null๋ก ์ค์ ํฉ๋๋ค. -
result์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ registry๋ก ์ค์ ํฉ๋๋ค.
์ด ๋จ๊ณ๋ค ์ค ํ๋์์ ์์ธ exception์ด ๋ฐ์ํ๋ค๋ฉด:
-
definition์ ์์ฑ์์ ๋์ํ๋ JavaScript ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ์์ญ์ ์ ์ญ ๊ฐ์ฒด์ ๋ํด exception์ ๋ณด๊ณ ํฉ๋๋ค.
-
result๋ฅผ document,
HTMLUnknownElement, localName, HTML ๋ค์์คํ์ด์ค, prefix, "failed", null, registry๊ฐ ์ฃผ์ด์ก์ ๋ ๋ด๋ถ์ ์ผ๋ก ์์๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
-
previousRegistry๊ฐ null์ด๋ฉด ์ฃผ๋ณ ์์ด์ ํธ์ ํ์ฑ ์ฌ์ฉ์ ์ ์ ์์ ์์ฑ์ ๋งต[C]์ ์ ๊ฑฐํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด ์ค์ ํฉ๋๋ค. ์ฃผ๋ณ ์์ด์ ํธ์ ํ์ฑ ์ฌ์ฉ์ ์ ์ ์์ ์์ฑ์ ๋งต[C]์ previousRegistry๋ก ์ค์ ํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
result๋ฅผ document,
HTMLElement, localName, HTML ๋ค์์คํ์ด์ค, prefix, "undefined", null, registry๊ฐ ์ฃผ์ด์ก์ ๋ ๋ด๋ถ์ ์ผ๋ก ์์๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. -
result์ definition์ด ์ฃผ์ด์ก์ ๋ ์ฌ์ฉ์ ์ ์ ์์ ์ ๊ทธ๋ ์ด๋ ๋ฐ์์ ํ์ ์ถ๊ฐํฉ๋๋ค.
-
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
interface๋ฅผ localName๊ณผ namespace์ ๋ํ ์์ ์ธํฐํ์ด์ค๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ document, interface, localName, namespace, prefix, "
uncustomized", is, registry๊ฐ ์ฃผ์ด์ก์ ๋ ๋ด๋ถ์ ์ผ๋ก ์์๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. -
namespace๊ฐ HTML ๋ค์์คํ์ด์ค์ด๊ณ , localName์ด ์ ํจํ ์ฌ์ฉ์ ์ ์ ์์ ์ด๋ฆ์ด๊ฑฐ๋ is๊ฐ null์ด ์๋๋ฉด result์ ์ฌ์ฉ์ ์ ์ ์์ ์ํ๋ฅผ "
undefined"๋ก ์ค์ ํฉ๋๋ค.
-
-
result๋ฅผ ๋ฐํํฉ๋๋ค.
๋ด๋ถ์ ์ผ๋ก ์์๋ฅผ ์์ฑํ๋ ค๋ฉด, ๋ฌธ์ document, ์ธํฐํ์ด์ค interface, ๋ฌธ์์ด localName, ๋ฌธ์์ด ๋๋ null์ธ namespace, ๋ฌธ์์ด ๋๋ null์ธ prefix, ๋ฌธ์์ด state, ๋ฌธ์์ด ๋๋ null์ธ is, ๊ทธ๋ฆฌ๊ณ null ๋๋
CustomElementRegistry๊ฐ์ฒด registry๊ฐ ์ฃผ์ด์ก์ ๋:-
element๋ฅผ document๊ฐ ์ฃผ์ด์ก์ ๋ interface๋ฅผ ๊ตฌํํ๋ ๋ ธ๋๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
element์ ๋ค์์คํ์ด์ค๋ฅผ namespace๋ก, ๋ค์์คํ์ด์ค ์ ๋์ฌ๋ฅผ prefix๋ก, ๋ก์ปฌ ์ด๋ฆ์ localName์ผ๋ก, ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ registry๋ก, ์ฌ์ฉ์ ์ ์ ์์ ์ํ๋ฅผ state๋ก, ์ฌ์ฉ์ ์ ์ ์์ ์ ์๋ฅผ null๋ก, ๊ทธ๋ฆฌ๊ณ
is๊ฐ์ is๋ก ์ค์ ํฉ๋๋ค. -
๋จ์ธํฉ๋๋ค: element์ ์์ฑ ๋ชฉ๋ก์ ๋น์ด ์์ต๋๋ค.
-
element๋ฅผ ๋ฐํํฉ๋๋ค.
์์์๋ ์์ฑ ๋ชฉ๋ก๋ ์์ผ๋ฉฐ, ์ด๋
NamedNodeMap์ ํตํด ๋ ธ์ถ๋๋ ๋ชฉ๋ก์ ๋๋ค. ์์๊ฐ ์์ฑ๋ ๋ ๋ช ์์ ์ผ๋ก ์ง์ ๋์ง ์์๋ค๋ฉด ํด๋น ์์์ ์์ฑ ๋ชฉ๋ก์ ๋น์ด ์์ต๋๋ค.์์์ ์์ฑ ๋ชฉ๋ก์ ํฌํจ๋์ด ์์ผ๋ฉด ํด๋น ์์๋ ์์ฑ A๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด ๋ช ์ธ์ ๋ค๋ฅธ ๋ช ์ธ์์๋ ์์์ ๋ํ ์์ฑ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์๋ element, localName, oldValue, value, namespace๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
์์ฑ attribute์ ์์ฑ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ๋ ค๋ฉด, element, oldValue, newValue๊ฐ ์ฃผ์ด์ก์ ๋ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
element์ ๋ํด "
attributes" ์ ํ์ ๋ณ๊ฒฝ ๋ ์ฝ๋๋ฅผ ํ์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ attribute์ ๋ก์ปฌ ์ด๋ฆ, attribute์ ๋ค์์คํ์ด์ค, oldValue, ยซ ยป, ยซ ยป, null, null์ ์ฌ์ฉํฉ๋๋ค. -
element๊ฐ ์ฌ์ฉ์ ์ ์ ์์์ด๋ฉด, element, ์ฝ๋ฐฑ ์ด๋ฆ "
attributeChangedCallback", ยซ attribute์ ๋ก์ปฌ ์ด๋ฆ, oldValue, newValue, attribute์ ๋ค์์คํ์ด์ค ยป๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์์ ์ฝ๋ฐฑ ๋ฐ์์ ํ์ ์ถ๊ฐํฉ๋๋ค. -
element, attribute์ ๋ก์ปฌ ์ด๋ฆ, oldValue, newValue, attribute์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
์์ฑ attribute๋ฅผ value๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด:
-
oldValue๋ฅผ attribute์ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
attribute์ ๊ฐ์ value๋ก ์ค์ ํฉ๋๋ค.
-
attribute์ ๋ํ ์์ฑ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ attribute์ ์์, oldValue, value๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ฑ attribute๋ฅผ ์์ element์ ์ถ๊ฐํ๋ ค๋ฉด:
-
attribute๋ฅผ element์ ์์ฑ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
-
attribute์ ์์๋ฅผ element๋ก ์ค์ ํฉ๋๋ค.
-
attribute์ ๋ ธ๋ ๋ฌธ์๋ฅผ element์ ๋ ธ๋ ๋ฌธ์๋ก ์ค์ ํฉ๋๋ค.
-
attribute์ ๋ํ ์์ฑ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ element, null, attribute์ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ attribute๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด:
-
element๋ฅผ attribute์ ์์๋ก ์ค์ ํฉ๋๋ค.
- attribute๋ฅผ element์ ์์ฑ ๋ชฉ๋ก์์ ์ ๊ฑฐํฉ๋๋ค.
-
attribute์ ์์๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
attribute์ ๋ํ ์์ฑ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ element, attribute์ ๊ฐ, null์ ์ฌ์ฉํฉ๋๋ค.
์์ฑ oldAttribute๋ฅผ ์์ฑ newAttribute๋ก ๊ต์ฒดํ๋ ค๋ฉด:
-
element๋ฅผ oldAttribute์ ์์๋ก ์ค์ ํฉ๋๋ค.
-
element์ ์์ฑ ๋ชฉ๋ก์์ oldAttribute๋ฅผ newAttribute๋ก ๊ต์ฒดํฉ๋๋ค.
-
newAttribute์ ์์๋ฅผ element๋ก ์ค์ ํฉ๋๋ค.
-
newAttribute์ ๋ ธ๋ ๋ฌธ์๋ฅผ element์ ๋ ธ๋ ๋ฌธ์๋ก ์ค์ ํฉ๋๋ค.
-
oldAttribute์ ์์๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
oldAttribute์ ๋ํ ์์ฑ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ element, oldAttribute์ ๊ฐ, newAttribute์ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋ฌธ์์ด qualifiedName๊ณผ ์์ element๊ฐ ์ฃผ์ด์ก์ ๋ ์ด๋ฆ์ผ๋ก ์์ฑ์ ๊ฐ์ ธ์ค๋ ค๋ฉด:
-
element๊ฐ HTML ๋ค์์คํ์ด์ค์ ์ํ๊ณ ํด๋น ์์์ ๋ ธ๋ ๋ฌธ์๊ฐ HTML ๋ฌธ์์ด๋ฉด qualifiedName์ qualifiedName์ ASCII ์๋ฌธ์ ํํ๋ก ์ค์ ํฉ๋๋ค.
-
element์ ์์ฑ ๋ชฉ๋ก์์ ํ์ ์ด๋ฆ์ด qualifiedName์ธ ์ฒซ ๋ฒ์งธ ์์ฑ์ ๋ฐํํ๊ณ , ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
Null ๋๋ ๋ฌธ์์ด namespace, ๋ฌธ์์ด localName, ๊ทธ๋ฆฌ๊ณ ์์ element๊ฐ ์ฃผ์ด์ก์ ๋ ๋ค์์คํ์ด์ค์ ๋ก์ปฌ ์ด๋ฆ์ผ๋ก ์์ฑ์ ๊ฐ์ ธ์ค๋ ค๋ฉด:
-
namespace๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
element์ ์์ฑ ๋ชฉ๋ก์์ ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ด localName์ธ ์์ฑ์ด ์์ผ๋ฉด ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
์์ element, ๋ฌธ์์ด localName, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ผ๋ก null ๋๋ ๋ฌธ์์ด namespace(๊ธฐ๋ณธ๊ฐ null)๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ ๊ฐ์ ๊ฐ์ ธ์ค๋ ค๋ฉด:
-
attr์ namespace, localName, element๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
attr์ด null์ด๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
-
attr์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์์ฑ attr๊ณผ ์์ element๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ์ค์ ํ๋ ค๋ฉด:
-
verifiedValue๋ฅผ attr์ ๋ก์ปฌ ์ด๋ฆ, attr์ ๋ค์์คํ์ด์ค, element, ๊ทธ๋ฆฌ๊ณ attr์ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ ๋ขฐํ ์ ์๋ ํ์ ์ ์ค์ํ๋ ์์ฑ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. [TRUSTED-TYPES]
-
attr์ ์์๊ฐ null๋ element๋ ์๋๋ฉด "
InUseAttributeError"DOMException์ ๋์ง๋๋ค. -
oldAttr์ attr์ ๋ค์์คํ์ด์ค, attr์ ๋ก์ปฌ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ element๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
oldAttr์ด attr์ด๋ฉด attr์ ๋ฐํํฉ๋๋ค.
-
attr์ ๊ฐ์ verifiedValue๋ก ์ค์ ํฉ๋๋ค.
-
oldAttr์ด null์ด ์๋๋ฉด oldAttr์ attr๋ก ๊ต์ฒดํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด attr์ element์ ์ถ๊ฐํฉ๋๋ค.
-
oldAttr์ ๋ฐํํฉ๋๋ค.
์์ element, ๋ฌธ์์ด localName, ๋ฌธ์์ด value, ์ ํ์ ์ผ๋ก null ๋๋ ๋ฌธ์์ด prefix(๊ธฐ๋ณธ๊ฐ null), ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ผ๋ก null ๋๋ ๋ฌธ์์ด namespace(๊ธฐ๋ณธ๊ฐ null)๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ ๊ฐ์ ์ค์ ํ๋ ค๋ฉด:
- attribute๋ฅผ namespace, localName, element๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
- attribute๊ฐ null์ด๋ฉด element์ ๋ ธ๋ ๋ฌธ์, localName, namespace, prefix, value๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ์์ฑํ ๊ฒฐ๊ณผ๋ฅผ element์ ์ถ๊ฐํ ๋ค์ ๋ฐํํฉ๋๋ค.
-
attribute๋ฅผ value๋ก ๋ณ๊ฒฝํฉ๋๋ค.
๋ฌธ์์ด qualifiedName๊ณผ ์์ element๊ฐ ์ฃผ์ด์ก์ ๋ ์ด๋ฆ์ผ๋ก ์์ฑ์ ์ ๊ฑฐํ๋ ค๋ฉด:
-
attr์ qualifiedName๊ณผ element๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
attr์ด null์ด ์๋๋ฉด attr์ ์ ๊ฑฐํฉ๋๋ค.
-
attr์ ๋ฐํํฉ๋๋ค.
Null ๋๋ ๋ฌธ์์ด namespace, ๋ฌธ์์ด localName, ๊ทธ๋ฆฌ๊ณ ์์ element๊ฐ ์ฃผ์ด์ก์ ๋ ๋ค์์คํ์ด์ค์ ๋ก์ปฌ ์ด๋ฆ์ผ๋ก ์์ฑ์ ์ ๊ฑฐํ๋ ค๋ฉด:
-
attr์ namespace, localName, element๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
attr์ด null์ด ์๋๋ฉด attr์ ์ ๊ฑฐํฉ๋๋ค.
-
attr์ ๋ฐํํฉ๋๋ค.
์์์๋ ์ฐ๊ฒฐ๋ ๊ณ ์ ์๋ณ์(ID)๊ฐ ์์ ์ ์์ต๋๋ค.
๊ณผ๊ฑฐ์๋ ์์๊ฐ ์ฌ๋ฌ ์๋ณ์๋ฅผ ๊ฐ์ง ์ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด HTML์
id์์ฑ๊ณผ DTD๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ช ์ธ์์๋ ID๋ฅผ DOM์ ๊ฐ๋ ์ผ๋ก ์ ์ํ๊ณ , ๊ฐ ์์์ ํ๋๋ง ํ์ฉํ๋ฉฐ,id์์ฑ์ผ๋ก ์ง์ ํฉ๋๋ค.์์์ ID๋ฅผ ๊ฐฑ์ ํ๋ ค๋ฉด ๋ค์ ์์ฑ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
localName์ด
id์ด๊ณ namespace๊ฐ null์ด๋ฉฐ value๊ฐ null ๋๋ ๋น ๋ฌธ์์ด์ด๋ฉด element์ ID๋ฅผ ํด์ ํฉ๋๋ค. -
๊ทธ๋ ์ง ์๊ณ localName์ด
id์ด๋ฉฐ namespace๊ฐ null์ด๋ฉด element์ ID๋ฅผ value๋ก ์ค์ ํฉ๋๋ค.
์ด ๋ช ์ธ์์๋ ๋ชจ๋ ์์์
class,id,slot์์ฑ์ ๋ํ ์๊ตฌ ์ฌํญ์ ์ ์ํ์ง๋ง, ์์์์ ์ด๋ฌํ ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํ์ง ์ฌ๋ถ์ ๋ํด์๋ ๊ท์ ํ์ง ์์ต๋๋ค.
๋ ธ๋์ ๋ถ๋ชจ๊ฐ
Element์ ํ์ด๋ฉด ํด๋น ๋ ธ๋์ ๋ถ๋ชจ ์์๋ผ๊ณ ํฉ๋๋ค. ๋ ธ๋์ ๋ถ๋ชจ๊ฐ ๋ค๋ฅธ ์ ํ์ด๋ผ๋ฉด ํด๋น ๋ ธ๋์ ๋ถ๋ชจ ์์๋ null์ ๋๋ค.
- namespace = element .
namespaceURI - ๋ค์์คํ์ด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
- prefix = element .
prefix - ๋ค์์คํ์ด์ค ์ ๋์ฌ๋ฅผ ๋ฐํํฉ๋๋ค.
- localName = element .
localName - ๋ก์ปฌ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค.
- qualifiedName = element .
tagName - HTML ๋๋ฌธ์ํ๋ ํ์ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค.
๋ค์
namespaceURIgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ค์์คํ์ด์ค.๋ค์
prefixgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ค์์คํ์ด์ค ์ ๋์ฌ.๋ค์
localNamegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ก์ปฌ ์ด๋ฆ.๋ค์
tagNamegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ HTML ๋๋ฌธ์ํ ํ์ ์ด๋ฆ.
element . id [ = value ]-
element์
id์ฝํ ์ธ ์์ฑ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ฐ์ ์ค์ ํ์ฌ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. element . className [ = value ]-
element์
class์ฝํ ์ธ ์์ฑ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ฐ์ ์ค์ ํ์ฌ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. element . classList-
element์
class์ฝํ ์ธ ์์ฑ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ํ ํฐ ์งํฉ์ผ๋ก ์กฐ์ํ ์ ์๊ฒ ํ๋ฉฐ, ๋ค์DOMTokenList๊ฐ์ฒด๋ฅผ ํตํด ์กฐ์ํฉ๋๋ค. element . slot [ = value ]-
element์
slot์ฝํ ์ธ ์์ฑ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ฐ์ ์ค์ ํ์ฌ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ค์์ ๋ฐ์ํ๋๋ก ์ ์๋ IDL ์์ฑ์, ๋ฌธ์์ด name์ ๋ํด ๋ค์ getter ๋ฐ setter ๋จ๊ณ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค:
- getter ๋จ๊ณ
-
๋ค์์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์์ฑ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ. ์ฃผ์ด์ง ๊ฐ์ this ์ name์ ๋๋ค.
- setter ๋จ๊ณ
-
์์ฑ ๊ฐ์ ์ค์ ํฉ๋๋ค. ๋์์ this์ด๋ฉฐ, name๊ณผ ์ฃผ์ด์ง ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋ค์
id์์ฑ์ ๋ฐ๋์ ๋ฐ์ํด์ผ ํฉ๋๋ค: "id"๋ฅผ.๋ค์
className์์ฑ์ ๋ฐ๋์ ๋ฐ์ํด์ผ ํฉ๋๋ค: "class"๋ฅผ.๋ค์
classListgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค:DOMTokenList๊ฐ์ฒด๋ก, ์ฐ๊ฒฐ๋ ์์๋ this์ด๊ณ ์ฐ๊ฒฐ๋ ์์ฑ์ ๋ก์ปฌ ์ด๋ฆ์class์ ๋๋ค. ํด๋น ํ ํฐ ์งํฉ์ ์ด ํน์ DOMTokenList๊ฐ์ฒด์ ์ํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅด๊ธฐ๋ ํฉ๋๋ค: ์์์ ํด๋์ค.๋ค์
slot์์ฑ์ ๋ฐ๋์ ๋ฐ์ํด์ผ ํฉ๋๋ค: "slot"์.id,class,slot์ ์ฌ์ค์ ์ด์ ์ญ ์์ฑ์ ๋๋ค. ๋ชจ๋ ์์์ ๋ํ๋ ์ ์์ผ๋ฉฐ, ํด๋น ์์์ ๋ค์์คํ์ด์ค์ ๋ฌด๊ดํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
element . hasAttributes()-
element์ ์์ฑ์ด ์์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
element . getAttributeNames()-
๋ฐํ๊ฐ์ ํ์ ์ด๋ฆ๋ค์ด๋ฉฐ, element์ ๋ชจ๋ ์์ฑ์ ๋ํ ๊ฒ์ ๋๋ค. ์ค๋ณต์ ํฌํจํ ์ ์์ต๋๋ค.
element . getAttribute(qualifiedName)-
๋ฐํ๊ฐ์ element์ ์ฒซ ๋ฒ์งธ ์์ฑ์ผ๋ก, ํด๋น ์์ฑ์ ํ์ ์ด๋ฆ์ qualifiedName์ด๋ฉฐ, ๊ทธ๋ฌํ ์์ฑ์ด ์์ผ๋ฉด null์ ๋๋ค.
element . getAttributeNS(namespace, localName)-
๋ฐํ๊ฐ์ element์ ์์ฑ์ผ๋ก, ํด๋น ์์ฑ์ ๋ค์์คํ์ด์ค๋ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ localName์ ๋๋ค. null์ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ๊ทธ๋ฌํ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ์ ๋๋ค.
element . setAttribute(qualifiedName, value)-
์ค์ ํ ๊ฐ์ element์ ์ฒซ ๋ฒ์งธ ์์ฑ์ ๊ฐ์ด๋ฉฐ, ํด๋น ์์ฑ์ ํ์ ์ด๋ฆ์ qualifiedName์ ๋๋ค. ์ค์ ํ ๊ฐ์ value์ ๋๋ค.
element . setAttributeNS(namespace, localName, value)-
์ค์ ํ ๊ฐ์ element์ ์์ฑ์ ๊ฐ์ด๋ฉฐ, ํด๋น ์์ฑ์ ๋ค์์คํ์ด์ค๋ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ localName์ ๋๋ค. ๊ฐ์ value๋ก ์ค์ ํฉ๋๋ค.
element . removeAttribute(qualifiedName)-
์ ๊ฑฐํ ๊ฒ์ element์ ์ฒซ ๋ฒ์งธ ์์ฑ์ผ๋ก, ํด๋น ์์ฑ์ ํ์ ์ด๋ฆ์ qualifiedName์ ๋๋ค.
element . removeAttributeNS(namespace, localName)-
์ ๊ฑฐํ ๊ฒ์ element์ ์์ฑ์ผ๋ก, ํด๋น ์์ฑ์ ๋ค์์คํ์ด์ค๋ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ localName์ ๋๋ค.
element . toggleAttribute(qualifiedName [, force])-
force๊ฐ ์ฃผ์ด์ง์ง ์์ผ๋ฉด, qualifiedName์ "์ ํ"ํ๋ฉฐ, ํด๋น ์์ฑ์ด ์์ผ๋ฉด ์ ๊ฑฐํ๊ณ ์์ผ๋ฉด ์ถ๊ฐํฉ๋๋ค. force๊ฐ true์ด๋ฉด, ์ถ๊ฐํ ๊ฒ์ qualifiedName์ ๋๋ค. force๊ฐ false์ด๋ฉด, qualifiedName์ ์ ๊ฑฐํฉ๋๋ค.
qualifiedName์ด ํ์ฌ ์กด์ฌํ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
element . hasAttribute(qualifiedName)-
true๋ฅผ ๋ฐํํ๋ ์กฐ๊ฑด์ element์ ์์ฑ์ด ์์ผ๋ฉฐ, ํด๋น ์์ฑ์ ํ์ ์ด๋ฆ์ด qualifiedName์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
element . hasAttributeNS(namespace, localName)-
true๋ฅผ ๋ฐํํ๋ ์กฐ๊ฑด์ element์ ์์ฑ์ด ์์ผ๋ฉฐ, ํด๋น ์์ฑ์ ๋ค์์คํ์ด์ค ๊ฐ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ด localName์ธ ๊ฒ์ ๋๋ค.
๋ค์
hasAttributes()๋ฉ์๋ ๋จ๊ณ๋ false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค. ๊ทธ ์กฐ๊ฑด์ this์ ์์ฑ ๋ชฉ๋ก์ด ๋น์ด ์๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.๋ค์
attributesgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์ฐ๊ฒฐ๋NamedNodeMap.๋ค์
getAttributeNames()๋ฉ์๋ ๋จ๊ณ๋ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ค์ ํ์ ์ด๋ฆ๋ค์. ํด๋น ์์ฑ๋ค์ this์ ์์ฑ ๋ชฉ๋ก์ ์์ผ๋ฉฐ, ์์๋๋ก ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ก์ด ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค.์ด ์ด๋ฆ๋ค์ด ๊ณ ์ ํ๋ค๋ ๋ณด์ฅ์ ์์ต๋๋ค.
๋ค์
getAttribute(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
attr์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์์ฑ ๊ฐ์ ธ์ค๊ธฐ. ์ฃผ์ด์ง ๊ฐ์ qualifiedName๊ณผ this์ ๋๋ค.
-
attr์ด null์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
๋ฐํ๊ฐ์ attr์ ๊ฐ์ ๋๋ค.
๋ค์
getAttributeNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
attr์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์์ฑ ๊ฐ์ ธ์ค๊ธฐ. ์ฃผ์ด์ง ๊ฐ์ namespace, localName, ๊ทธ๋ฆฌ๊ณ this์ ๋๋ค.
-
attr์ด null์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
๋ฐํ๊ฐ์ attr์ ๊ฐ์ ๋๋ค.
๋ค์
setAttribute(qualifiedName, value)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
qualifiedName์ด ์ ํจํ ์์ฑ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException.๋งค๊ฐ๋ณ์ ์ด๋ฆ๊ณผ๋ ๋ฌ๋ฆฌ, qualifiedName์ด ํ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ ์์ฑ์ด ์ด๋ฏธ ํด๋น ํ์ ์ด๋ฆ์ผ๋ก ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ฟ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์ ๋ก์ปฌ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์ด๋ ์๋ก์ด ์์ฑ์ ์ด๋ฆ์ ๋๋ค. ํ์์ ๊ฒฝ์ฐ์ ๋ํด์๋ง ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ฉด ๋ฉ๋๋ค.
-
๋ง์ฝ this๊ฐ HTML ๋ค์์คํ์ด์ค์ ์ํ๊ณ ๊ทธ ๋ ธ๋ ๋ฌธ์๊ฐ HTML ๋ฌธ์์ด๋ฉด, qualifiedName์ qualifiedName์ ๋ค์ ๋ณํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ASCII ์๋ฌธ์.
-
verifiedValue๋ฅผ ๋ค์์ ํธ์ถํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ๋ขฐํ ์ ์๋ ํ์ ์ ์ค์ํ๋ ์์ฑ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ. ์ฌ์ฉํ ๊ฐ์ qualifiedName, null, this, ๊ทธ๋ฆฌ๊ณ value์ ๋๋ค. [TRUSTED-TYPES]
-
attribute์ ์ฒซ ๋ฒ์งธ ์์ฑ์ผ๋ก ๋ก๋๋ค. ํด๋น ์์ฑ์ this์ ์์ฑ ๋ชฉ๋ก์ ์์ผ๋ฉฐ, ๊ทธ ํ์ ์ด๋ฆ์ qualifiedName์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด null๋ก ๋ก๋๋ค.
-
attribute์ด null์ด ์๋๋ฉด, ๋ณ๊ฒฝํฉ๋๋ค: attribute์ verifiedValue๋ก ๋ณ๊ฒฝํ๊ณ ๋ฐํํฉ๋๋ค.
-
attribute์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ์์ฑ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this์ ๋ ธ๋ ๋ฌธ์, qualifiedName, null, null, ๊ทธ๋ฆฌ๊ณ verifiedValue์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: attribute์ this์.
๋ค์
setAttributeNS(namespace, qualifiedName, value)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
(namespace, prefix, localName)์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ถ์ถ. ๋์์ namespace์ qualifiedName์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ "
attribute"์ ๋๋ค. -
verifiedValue๋ฅผ ๋ค์์ ํธ์ถํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ๋ขฐํ ์ ์๋ ํ์ ์ ์ค์ํ๋ ์์ฑ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ. ์ฌ์ฉํ ๊ฐ์ localName, namespace, this, ๊ทธ๋ฆฌ๊ณ value์ ๋๋ค. [TRUSTED-TYPES]
-
์์ฑ ๊ฐ์ ์ค์ ํฉ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ฌ์ฉํ ๊ฐ์ localName, verifiedValue, prefix, ๊ทธ๋ฆฌ๊ณ namespace์ ๋๋ค.
๋ค์
removeAttribute(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ์์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ qualifiedName๊ณผ this์ด๋ฉฐ, ๊ทธ๋ฐ ๋ค์ undefined๋ฅผ ๋ฐํํฉ๋๋ค.๋ค์
removeAttributeNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ ์์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ namespace, localName, ๊ทธ๋ฆฌ๊ณ this์ด๋ฉฐ, ๊ทธ๋ฐ ๋ค์ ๋ฐํํ ๊ฐ์ undefined์ ๋๋ค.๋ค์
hasAttribute(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๋ง์ฝ this๊ฐ HTML ๋ค์์คํ์ด์ค์ ์ํ๊ณ ๊ทธ ๋ ธ๋ ๋ฌธ์๊ฐ HTML ๋ฌธ์์ด๋ฉด, qualifiedName์ qualifiedName์ ๋ค์ ๋ณํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ASCII ์๋ฌธ์.
-
true๋ฅผ ๋ฐํํ๋ ์กฐ๊ฑด์ this๊ฐ ๊ฐ์ง๋ ์์ฑ์ ํ์ ์ด๋ฆ์ด qualifiedName์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
toggleAttribute(qualifiedName, force)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
qualifiedName์ด ์ ํจํ ์์ฑ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException.์์ ์ค๋ช ์ ์ฐธ์กฐํ์ธ์. ์ฌ๊ธฐ์๋ ๊ทธ ์ด์ ๋ฅผ ์ค๋ช ํฉ๋๋ค: ํ์ ์ด๋ฆ์ด ์๋ ๋ก์ปฌ ์ด๋ฆ์ผ๋ก ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ์ด์ ์ ๋๋ค.
-
๋ง์ฝ this๊ฐ HTML ๋ค์์คํ์ด์ค์ ์ํ๊ณ ๊ทธ ๋ ธ๋ ๋ฌธ์๊ฐ HTML ๋ฌธ์์ด๋ฉด, qualifiedName์ qualifiedName์ ๋ค์ ๋ณํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ASCII ์๋ฌธ์.
-
attribute์ ์ฒซ ๋ฒ์งธ ์์ฑ์ผ๋ก ๋ก๋๋ค. ํด๋น ์์ฑ์ this์ ์์ฑ ๋ชฉ๋ก์ ์์ผ๋ฉฐ, ๊ทธ ํ์ ์ด๋ฆ์ qualifiedName์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด null๋ก ๋ก๋๋ค.
-
attribute์ด null์ด๋ฉด:
-
force๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋ true์ด๋ฉด, ๋ง๋ถ์ ๋๋ค: ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ. ์์ฑ ์์ฑ์ ์ฃผ์ด์ง ๊ฐ์ this์ ๋ ธ๋ ๋ฌธ์ ์ qualifiedName์ด๋ฉฐ, ๋ง๋ถ์ผ ๋์์ this์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ true๋ฅผ ๋ฐํํฉ๋๋ค.
-
false๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
force๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋ false์ด๋ฉด, ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ qualifiedName๊ณผ this์ด๋ฉฐ, ๊ทธ๋ฐ ๋ค์ false๋ฅผ ๋ฐํํฉ๋๋ค.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
hasAttributeNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
namespace๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด, ์ด๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
- true๋ฅผ ๋ฐํํ๋ ์กฐ๊ฑด์ this๊ฐ ๊ฐ์ง๋ ์์ฑ์ ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ด localName์ธ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
getAttributeNode(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์์ฑ ๊ฐ์ ธ์ค๊ธฐ. ์ฃผ์ด์ง ๊ฐ์ qualifiedName๊ณผ this์ ๋๋ค.๋ค์
getAttributeNodeNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์์ฑ ๊ฐ์ ธ์ค๊ธฐ. ์ฃผ์ด์ง ๊ฐ์ namespace, localName, ๊ทธ๋ฆฌ๊ณ this์ ๋๋ค.๋ค์
setAttributeNode(attr)์setAttributeNodeNS(attr)๋ฉ์๋์ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์์ฑ ์ค์ . ์ฃผ์ด์ง ๊ฐ์ attr๊ณผ this์ ๋๋ค.๋ค์
removeAttributeNode(attr)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๋ง์ฝ this์ ์์ฑ ๋ชฉ๋ก์ด ๋ค์์ ํฌํจํ์ง ์์ผ๋ฉด: attr, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotFoundError"DOMException. -
์ ๊ฑฐํฉ๋๋ค: attr์.
-
attr์ ๋ฐํํฉ๋๋ค.
shadow = element .attachShadow(init)-
์์ฑํ ๊ฒ์ ์๋ ๋ฃจํธ๋ก, element์ ๋ํด ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค.
shadow = element .shadowRoot-
๋ฐํ๊ฐ์ element์ ์๋ ๋ฃจํธ์ด๋ฉฐ, ํด๋น ๋ฃจํธ๊ฐ ์กด์ฌํ๊ณ ์๋ ๋ฃจํธ์ ๋ชจ๋๊ฐ "
open"์ธ ๊ฒฝ์ฐ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋๋ค.
์ ํจํ ์๋ ํธ์คํธ ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ค์ ์ ํจํ ์ฌ์ฉ์ ์ ์ ์์ ์ด๋ฆ
- "
article", "aside", "blockquote", "body", "div", "footer", "h1", "h2", "h3", "h4", "h5", "h6", "header", "main", "nav", "p", "section", ๋๋ "span"
์ด ๋ชฉ๋ก์ ์๋์ ์ผ๋ก ์ ํ๋์ด ์์ต๋๋ค. ๋ด์ฅ ์์๊ฐ ๋ด๋ถ ์๋ ํธ๋ฆฌ๋ฅผ ํฅํ ํ์์ ๋ฐ๋ผ ๊ฐ์ง ์ ์๋๋ก ํ๊ธฐ ์ํด์์ ๋๋ค.
๋ค์
attachShadow(init)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
registry๋ฅผ ๋ค์์ผ๋ก ๋ก๋๋ค: this์ ๋ ธ๋ ๋ฌธ์์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ.
-
๋ง์ฝ init["
customElementRegistry"] ๊ฐ ์กด์ฌํ๋ฉด, registry๋ฅผ ํด๋น ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. -
registry๊ฐ null์ด ์๋๊ณ , registry์ ๋ฒ์ ์ง์ ์ฌ๋ถ๊ฐ false์ด๋ฉฐ, registry๊ฐ ๋ค์์ด ์๋๋ฉด: this์ ๋ ธ๋ ๋ฌธ์์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
๋ค์์ ์คํํฉ๋๋ค: ์๋ ๋ฃจํธ ์ฐ๊ฒฐ. ์ฌ์ฉํ ๊ฐ์ this, init["
mode"], init["delegatesFocus"], init["serializable"], init["slotAssignment"], init["clonable"], ๊ทธ๋ฆฌ๊ณ registry์ ๋๋ค. -
๋ฐํ๊ฐ์ this์ ์๋ ๋ฃจํธ์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฐ๊ฒฐํฉ๋๋ค: ์๋ ๋ฃจํธ๋ฅผ. ์ฃผ์ด์ง ๊ฐ์ ์์ element, ๋ฌธ์์ด mode, ๋ถ๋ฆฌ์ธ delegatesFocus, ๋ถ๋ฆฌ์ธ serializable, ๋ฌธ์์ด slotAssignment, ๋ถ๋ฆฌ์ธ clonable, ๊ทธ๋ฆฌ๊ณ null ๋๋
CustomElementRegistry๊ฐ์ฒด์ธ registry์ ๋๋ค:-
element์ ๋ค์์คํ์ด์ค๊ฐ ๋ค์์ด ์๋๋ฉด: HTML ๋ค์์คํ์ด์ค, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
element์ ๋ก์ปฌ ์ด๋ฆ์ด ๋ค์์ด ์๋๋ฉด: ์ ํจํ ์๋ ํธ์คํธ ์ด๋ฆ, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
element์ ๋ก์ปฌ ์ด๋ฆ์ด ์ ํจํ ์ฌ์ฉ์ ์ ์ ์์ ์ด๋ฆ์ด๊ฑฐ๋, element์
is๊ฐ์ด null์ด ์๋๋ฉด:-
definition์ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ฌ์ฉ์ ์ ์ ์์ ์ ์ ์กฐํ ์ฃผ์ด์ง ๊ฐ์ element์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ, ํด๋น ์์์ ๋ค์์คํ์ด์ค, ํด๋น ์์์ ๋ก์ปฌ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ ํด๋น ์์์
is๊ฐ์ ๋๋ค. -
definition์ด null์ด ์๋๊ณ definition์ ์๋ ๋นํ์ฑํ ์ฌ๋ถ๊ฐ true์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException.
-
-
element๊ฐ ์๋ ํธ์คํธ์ด๋ฉด:
-
currentShadowRoot๋ฅผ element์ ์๋ ๋ฃจํธ๋ก ๋ก๋๋ค.
-
๋ค์ ์ค ํ๋๋ผ๋ ์ฐธ์ด๋ฉด:
-
currentShadowRoot์ ์ ์ธ์ ์ฌ๋ถ๊ฐ false์ด๊ฑฐ๋,
-
currentShadowRoot์ ๋ชจ๋๊ฐ mode๊ฐ ์๋๋ฉด,
๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
-
์ ๊ฑฐํฉ๋๋ค: currentShadowRoot์ ๋ชจ๋ ์์์, ๋ค์ ํธ๋ฆฌ ์์๋ก.
-
currentShadowRoot์ ์ ์ธ์ ์ฌ๋ถ๋ฅผ false๋ก ์ค์ ํฉ๋๋ค.
-
๋ฐํํฉ๋๋ค.
-
-
shadow๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ๋ ธ๋ ์์ฑ. ์ด ๋ ธ๋๊ฐ ๊ตฌํํ๋ ๊ฒ์
ShadowRoot์ด๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ element์ ๋ ธ๋ ๋ฌธ์์ ๋๋ค. -
shadow์ ํธ์คํธ๋ฅผ element๋ก ์ค์ ํฉ๋๋ค.
-
shadow์ ๋ชจ๋๋ฅผ mode๋ก ์ค์ ํฉ๋๋ค.
-
shadow์ ํฌ์ปค์ค ์์ ์ฌ๋ถ๋ฅผ delegatesFocus๋ก ์ค์ ํฉ๋๋ค.
-
element์ ์ฌ์ฉ์ ์ ์ ์์ ์ํ๊ฐ "
precustomized" ๋๋ "custom"์ด๋ฉด, ์ค์ ํ ๊ฒ์ shadow์ ์์ ๋ด๋ถ์์ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ true์ ๋๋ค. -
shadow์ ์ ์ธ์ ์ฌ๋ถ๋ฅผ false๋ก ์ค์ ํฉ๋๋ค.
-
shadow์ ์ง๋ ฌํ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ serializable๋ก ์ค์ ํฉ๋๋ค.
-
shadow์ ์ฌ๋กฏ ํ ๋น์ slotAssignment๋ก ์ค์ ํฉ๋๋ค.
-
shadow์ ๋ณต์ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ clonable๋ก ์ค์ ํฉ๋๋ค.
-
shadow์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ registry๋ก ์ค์ ํฉ๋๋ค.
-
element์ ์๋ ๋ฃจํธ๋ฅผ shadow๋ก ์ค์ ํฉ๋๋ค.
๋ค์
shadowRootgetter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
shadow๋ฅผ ๋ค์์ผ๋ก ๋ก๋๋ค: this์ ์๋ ๋ฃจํธ.
-
shadow๊ฐ null์ด๊ฑฐ๋ ๊ทธ ๋ชจ๋๊ฐ "
closed"์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค. -
shadow๋ฅผ ๋ฐํํฉ๋๋ค.
registry = element .customElementRegistry-
๋ฐํ๊ฐ์ element์
CustomElementRegistry๊ฐ์ฒด์ด๋ฉฐ, ํด๋น ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋๋ค.
๋ค์
customElementRegistrygetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์ฌ์ฉ์ ์ ์ ์์ ๋ ์ง์คํธ๋ฆฌ.
element .closest(selectors)- ๋ฐํ๊ฐ์ (element์์ ์์ํ๋) ์ฒซ ๋ฒ์งธ ํฌ๊ด์ ์กฐ์์ผ๋ก, ๋ค์๊ณผ ์ผ์นํฉ๋๋ค: selectors. ๊ทธ๋ ์ง ์์ผ๋ฉด null์ ๋๋ค.
element .matches(selectors)- true๋ฅผ ๋ฐํํ๋ ์กฐ๊ฑด์ selectors๋ฅผ element์ ๋ฃจํธ์ ๋ํด ์ผ์น์ํจ ๊ฒฐ๊ณผ๋ก element๋ฅผ ์ป๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
closest(selectors)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
selector๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ํ์ ํ์ฑ. ์๋ณธ์ selectors์ ๋๋ค. [SELECTORS4]
-
selector๊ฐ ์คํจ์ด๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
SyntaxError"DOMException. -
elements๋ฅผ ๋ค์์ผ๋ก ๋ก๋๋ค: this์ ํฌ๊ด์ ์กฐ์ ์ค ์์์ธ ๊ฒ๋ค๋ก, ์ญ์์ ํธ๋ฆฌ ์์๋ฅผ ๋ฐ๋ฆ ๋๋ค.
-
elements์ ๊ฐ element์ ๋ํด: ๋ง์ฝ ์์์ ๋ํด ์ ํ์ ์ผ์น์ํค๊ธฐ๋ฅผ, selector, element, ๊ทธ๋ฆฌ๊ณ ๋ฒ์ ์ง์ ๋ฃจํธ์ธ this๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ๊ฒฐ๊ณผ๊ฐ ์ฑ๊ณต์ด๋ฉด, element๋ฅผ ๋ฐํํฉ๋๋ค. [SELECTORS4]
-
null์ ๋ฐํํฉ๋๋ค.
๋ค์
matches(selectors)์webkitMatchesSelector(selectors)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
selector๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ํ์ ํ์ฑ. ์๋ณธ์ selectors์ ๋๋ค. [SELECTORS4]
-
selector๊ฐ ์คํจ์ด๋ฉด, ์์ธ๋ฅผ ๋์ง๋๋ค: "
SyntaxError"DOMException. -
๋ค์์ ๊ฒฐ๊ณผ๊ฐ, ์์์ ๋ํด ์ ํ์ ์ผ์น์ํค๊ธฐ๋ฅผ, selector, this, ๊ทธ๋ฆฌ๊ณ ๋ฒ์ ์ง์ ๋ฃจํธ์ธ this๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ์ ๋ ์ฑ๊ณต์ด๋ฉด, true๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด, false๋ฅผ ๋ฐํํฉ๋๋ค. [SELECTORS4]
๋ค์
getElementsByTagName(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ค์ ํ์ ์ด๋ฆ์ ๊ฐ์ง ์์ ๋ชฉ๋ก: qualifiedName ๋์์ this์ ๋๋ค.๋ค์
getElementsByTagNameNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ค์์คํ์ด์ค๊ฐ namespace์ด๊ณ ๋ก์ปฌ ์ด๋ฆ์ด localName์ธ ์์ ๋ชฉ๋ก. ๋์์ this์ ๋๋ค.๋ค์
getElementsByClassName(classNames)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ํด๋์ค ์ด๋ฆ์ด classNames์ธ ์์ ๋ชฉ๋ก ๋์์ this์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ธ์ ์ฝ์ ์ ์ํํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ ์์ element, ๋ฌธ์์ด where, ๊ทธ๋ฆฌ๊ณ ๋ ธ๋ node์ ๋๋ค. ๋ค์ ์ค ์ฒซ ๋ฒ์งธ๋ก ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐ๊ฒฐ๋ ๋จ๊ณ๋ฅผ ์คํํ๋ฉฐ, ASCII ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ where์ ๋น๊ตํฉ๋๋ค:
- "
beforebegin" -
element์ ๋ถ๋ชจ๊ฐ null์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์ฌ์ ์ฝ์ . node๋ฅผ ์ฝ์ ํ ๋์์ element์ ๋ถ๋ชจ์ด๋ฉฐ, element ์์ ์ฝ์ ํฉ๋๋ค.
- "
afterbegin" -
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์ฌ์ ์ฝ์ . node๋ฅผ element์ ์ฝ์ ํ๋ฉฐ, ๋ค์์ ์์ ์ฝ์ ํฉ๋๋ค: element์ ์ฒซ ๋ฒ์งธ ์์.
- "
beforeend" -
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์ฌ์ ์ฝ์ . node๋ฅผ element์ ์ฝ์ ํ๋ฉฐ, ๋ค์์ ์์ ์ฝ์ ํฉ๋๋ค: null.
- "
afterend" -
element์ ๋ถ๋ชจ๊ฐ null์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค: ์ฌ์ ์ฝ์ . node๋ฅผ ์ฝ์ ํ ๋์์ element์ ๋ถ๋ชจ์ด๋ฉฐ, ์ฝ์ ์์น๋ element์ ๋ค์ ํ์ ์์ ๋๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด
๋ค์
insertAdjacentElement(where, element)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์ธ์ ์ฝ์ . ์ฃผ์ด์ง ๊ฐ์ this, where, ๊ทธ๋ฆฌ๊ณ element์ ๋๋ค.๋ค์
insertAdjacentText(where, data)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
text๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ํ ์คํธ ๋ ธ๋ ์์ฑ. ์ฃผ์ด์ง ๊ฐ์ this์ ๋ ธ๋ ๋ฌธ์์ data์ ๋๋ค.
-
๋ค์์ ์คํํฉ๋๋ค: ์ฝ์ : ์ธ์ ์์น์. ์ฃผ์ด์ง ๊ฐ์ this, where, ๊ทธ๋ฆฌ๊ณ text์ ๋๋ค.
์ด ๋ฉ์๋๋ ์ค๊ณํ ๊ธฐํ๊ฐ ์๊ธฐ๊ธฐ ์ ์ ์ด๋ฏธ ์กด์ฌํ์ผ๋ฏ๋ก ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์ต๋๋ค.
4.9.1. ์ธํฐํ์ด์ค
NamedNodeMap[
Exposed =Window ,LegacyUnenumerableNamedProperties ]interface {NamedNodeMap readonly attribute unsigned long length ;getter Attr ?item (unsigned long );index getter Attr ?getNamedItem (DOMString );qualifiedName Attr ?getNamedItemNS (DOMString ?,namespace DOMString ); [localName CEReactions ]Attr ?setNamedItem (Attr ); [attr CEReactions ]Attr ?setNamedItemNS (Attr ); [attr CEReactions ]Attr removeNamedItem (DOMString ); [qualifiedName CEReactions ]Attr removeNamedItemNS (DOMString ?,namespace DOMString ); };localName NamedNodeMap์๋ ์ฐ๊ฒฐ๋ ์์(ํ๋์ ์์)๊ฐ ์๋ค.NamedNodeMap๊ฐ์ฒด์ ์์ฑ ๋ชฉ๋ก์ ํด๋น ์์์ ์์ฑ ๋ชฉ๋ก์ด๋ค.
NamedNodeMap๊ฐ์ฒด์ ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๋ 0๋ถํฐ ํด๋น ์์ฑ ๋ชฉ๋ก์ ํฌ๊ธฐ โ 1๊น์ง ๋ฒ์์ ์ซ์์ด๋ค. ๋จ, ์์ฑ ๋ชฉ๋ก์ด ๋น์ด ์์ผ๋ฉด ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๊ฐ ์๋ค.lengthgetter ๋จ๊ณ๋ ์์ฑ ๋ชฉ๋ก์ ํฌ๊ธฐ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.item(index)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
index๊ฐ this์ ์์ฑ ๋ชฉ๋ก์ ํฌ๊ธฐ ์ด์์ด๋ฉด ๋ค์์ ๋ฐํํฉ๋๋ค: null.
-
๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์์ ๋ฐํํฉ๋๋ค: this์ ์์ฑ ๋ชฉ๋ก[index].
๋ค์
NamedNodeMap๊ฐ์ฒด์ ์ง์ํ๋ ์์ฑ ์ด๋ฆ์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ ๋ฐํ๊ฐ์ ๋๋ค:-
names๋ฅผ ๋ค์ ํ์ ์ด๋ฆ๋ค๋ก ๋ก๋๋ค. ์ด ์ด๋ฆ๋ค์ ์์ฑ๋ค์ ์ด๋ฆ์ด๋ฉฐ, ์ด
NamedNodeMap๊ฐ์ฒด์ ์์ฑ ๋ชฉ๋ก์ ์๋ ๊ฒ์์ ์ค๋ณต์ ์ ์ธํ๊ณ , ์์๋๋ก ๋์ดํฉ๋๋ค. -
์ด
NamedNodeMap๊ฐ์ฒด์ ์์๊ฐ HTML ๋ค์์คํ์ด์ค์ ์ํ๊ณ ๊ทธ ๋ ธ๋ ๋ฌธ์๊ฐ HTML ๋ฌธ์์ด๋ฉด, ๊ฐ name(names์ ์ํจ)์ ๋ํด:-
lowercaseName์ name์ ASCII ์๋ฌธ์ ํํ๋ก ๋ก๋๋ค.
-
lowercaseName์ด name๊ณผ ๊ฐ์ง ์์ผ๋ฉด, name์ ๋ค์์์ ์ ๊ฑฐํฉ๋๋ค: names.
-
-
names๋ฅผ ๋ฐํํฉ๋๋ค.
getNamedItem(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ qualifiedName๊ณผ ์์๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.getNamedItemNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ namespace, localName, ์์๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.setNamedItem(attr)๋ฐsetNamedItemNS(attr)๋ฉ์๋ ๋จ๊ณ๋ attr๊ณผ ์์๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ์ค์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.removeNamedItem(qualifiedName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
attr์ qualifiedName๊ณผ ์์๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ์ ๊ฑฐํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
-
attr์ด null์ด๋ฉด "
NotFoundError"DOMException์ ๋ฐ์์ํจ๋ค. -
attr์ ๋ฐํํ๋ค.
removeNamedItemNS(namespace, localName)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค:-
attr์ namespace, localName, ์์๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์ ์ ๊ฑฐํ ๊ฒฐ๊ณผ๋ก ์ค์ ํ๋ค.
-
attr์ด null์ด๋ฉด "
NotFoundError"DOMException์ ๋ฐ์์ํจ๋ค. -
attr์ ๋ฐํํ๋ค.
4.9.2. ์ธํฐํ์ด์ค
Attr[
Exposed =Window ]interface :Attr Node {readonly attribute DOMString ?namespaceURI ;readonly attribute DOMString ?prefix ;readonly attribute DOMString localName ;readonly attribute DOMString name ; [CEReactions ]attribute DOMString value ;readonly attribute Element ?ownerElement ;readonly attribute boolean specified ; // historical; always returns true };Attr๋ ธ๋๋ ๊ฐ๋จํ ์์ฑ์ด๋ผ๊ณ ํฉ๋๋ค. IDL ์์ฑ๊ณผ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ฝํ ์ธ ์์ฑ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.์์ฑ์๋ ๋ค์์คํ์ด์ค (null ๋๋ ๋น์ด ์์ง ์์ ๋ฌธ์์ด), ๋ค์์คํ์ด์ค ์ ๋์ฌ (null ๋๋ ๋น์ด ์์ง ์์ ๋ฌธ์์ด), ๋ก์ปฌ ์ด๋ฆ (๋น์ด ์์ง ์์ ๋ฌธ์์ด), ๊ฐ (๋ฌธ์์ด), ๊ทธ๋ฆฌ๊ณ ์์ (null ๋๋ ์์)๊ฐ ์์ต๋๋ค.
์ค๋๋ ์ค๊ณํ๋ค๋ฉด ์ด๋ฆ๊ณผ ๊ฐ๋ง ์์์ ๊ฒ์ ๋๋ค. โน
์์ฑ์ ํ์ ์ด๋ฆ์ ํด๋น ์์ฑ์ ๋ก์ปฌ ์ด๋ฆ์ ๋๋ค. ๋จ, ๋ค์์คํ์ด์ค ์ ๋์ฌ๊ฐ null์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์์คํ์ด์ค ์ ๋์ฌ ๋ค์ "
:"๋ฅผ ๋ถ์ด๊ณ , ๊ทธ ๋ค์ ํด๋น ์์ฑ์ ๋ก์ปฌ ์ด๋ฆ์ ๋ถ์ธ ๊ฒ์ ๋๋ค.์ฌ์ฉ์ ์์ด์ ํธ๋ ์ต์ ํ๋ฅผ ์ํด ์ด๋ฅผ ๋ด๋ถ ์ฌ๋กฏ์ ์ ์ฅํ ์ ์์ต๋๋ค.
์์ฑ ์์ฑ์ ์ํํ๋ ค๋ฉด, ์ฃผ์ด์ง ๋ฌธ์ document, ๋ฌธ์์ด localName, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ผ๋ก ๋ฌธ์์ด ๋๋ null์ธ namespace(๊ธฐ๋ณธ๊ฐ์ null), ๋ฌธ์์ด ๋๋ null์ธ prefix(๊ธฐ๋ณธ๊ฐ์ null), ๋ฌธ์์ด value(๊ธฐ๋ณธ๊ฐ์ ๋น ๋ฌธ์์ด)๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ํํฉ๋๋ค:
-
attribute๋ฅผ ๋ค์ ๋ ธ๋ ์์ฑ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ์ด ๋ ธ๋๋
Attr๋ฅผ ๊ตฌํํ๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ document์ ๋๋ค. -
attribute์ ๋ค์์คํ์ด์ค๋ฅผ namespace๋ก, ๋ค์์คํ์ด์ค ์ ๋์ฌ๋ฅผ prefix๋ก, ๋ก์ปฌ ์ด๋ฆ์ localName์ผ๋ก, ๊ฐ์ value๋ก ์ค์ ํฉ๋๋ค.
-
attribute๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
A์์ฑ์ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ฑ์ ๋๋ค: ๋ก์ปฌ ์ด๋ฆ์A์ด๊ณ , ๋ค์์คํ์ด์ค์ ๋ค์์คํ์ด์ค ์ ๋์ฌ๋ null์ ๋๋ค.
๋ค์
namespaceURIgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ค์์คํ์ด์ค.๋ค์
prefixgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ค์์คํ์ด์ค ์ ๋์ฌ.๋ค์
localNamegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ก์ปฌ ์ด๋ฆ.๋ค์
namegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ํ์ ์ด๋ฆ.๋ค์
valuegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๊ฐ.๊ธฐ์กด ์์ฑ ๊ฐ ์ค์ ์ ์ํํ๋ ค๋ฉด, ์ฃผ์ด์ง ์์ฑ attribute์ ๋ฌธ์์ด value๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค:
-
attribute์ ์์๊ฐ null์ด๋ฉด, attribute์ ๊ฐ์ value๋ก ์ค์ ํ๊ณ ๋ฐํํฉ๋๋ค.
-
element๋ฅผ attribute์ ์์๋ก ๋ก๋๋ค.
-
verifiedValue๋ฅผ ๋ค์์ ํธ์ถํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค: ์ ๋ขฐํ ์ ์๋ ํ์ ์ ๋ถํฉํ๋ ์์ฑ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ. ์ธ์๋ attribute์ ๋ก์ปฌ ์ด๋ฆ, attribute์ ๋ค์์คํ์ด์ค, element, ๊ทธ๋ฆฌ๊ณ value์ ๋๋ค. [TRUSTED-TYPES]
-
attribute์ ์์๊ฐ null์ด๋ฉด, attribute์ ๊ฐ์ verifiedValue๋ก ์ค์ ํ๊ณ ๋ฐํํฉ๋๋ค.
-
๋ณ๊ฒฝํฉ๋๋ค: attribute๋ฅผ verifiedValue๋ก.
๋ค์
valuesetter ๋จ๊ณ๋ ๊ธฐ์กด ์์ฑ ๊ฐ ์ค์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ์ธ์๋ this ๋ฐ ์ฃผ์ด์ง ๊ฐ์ ๋๋ค.
๋ค์
ownerElementgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์์.
๋ค์
specifiedgetter ๋จ๊ณ๋ true๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.4.10. ์ธํฐํ์ด์ค
CharacterData[
Exposed =Window ]interface :CharacterData Node {attribute [LegacyNullToEmptyString ]DOMString data ;readonly attribute unsigned long length ;DOMString substringData (unsigned long ,offset unsigned long );count undefined appendData (DOMString );data undefined insertData (unsigned long ,offset DOMString );data undefined deleteData (unsigned long ,offset unsigned long );count undefined replaceData (unsigned long ,offset unsigned long ,count DOMString ); };data CharacterData๋ ์ถ์ ์ธํฐํ์ด์ค์ ๋๋ค. ์ง์ ์ธ์คํด์ค๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด ์ธํฐํ์ด์ค๋Text,ProcessingInstruction, ๊ทธ๋ฆฌ๊ณComment๋ ธ๋์์ ์ฌ์ฉ๋ฉ๋๋ค.๋ ธ๋ ์ค
CharacterData์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ๋ ธ๋์๋ ์ฐ๊ฒฐ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฌธ์์ด์ด ์์ผ๋ฉฐ, ์ด๋ฅผ ๋ฐ์ดํฐ๋ผ๊ณ ํฉ๋๋ค.๋ฐ์ดํฐ๋ฅผ ๊ต์ฒดํ๋ ค๋ฉด, ๋ ธ๋ node์ ๋ํด ์ ์ offset, ์ ์ count, ๋ฌธ์์ด data, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ๋ถ๋ฆฌ์ธ piAttributesAlreadyUpdated(๊ธฐ๋ณธ๊ฐ false)๊ฐ ์ฃผ์ด์ก์ ๋:
-
length๋ฅผ node์ ๊ธธ์ด๋ก ์ค์ ํฉ๋๋ค.
-
offset์ด length๋ณด๋ค ํฌ๋ฉด "
IndexSizeError"DOMException์ ๋์ง๋๋ค. -
offset + count๊ฐ length๋ณด๋ค ํฌ๋ฉด count๋ฅผ length โ offset์ผ๋ก ์ค์ ํฉ๋๋ค.
-
node์ ๋ํด "
characterData" ์ ํ์ ๋ณ๊ฒฝ ๋ ์ฝ๋๋ฅผ ํ์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ null, null, node์ ๋ฐ์ดํฐ, ยซ ยป, ยซ ยป, null, ๊ทธ๋ฆฌ๊ณ null์ ์ฌ์ฉํฉ๋๋ค. -
data๋ฅผ node์ ๋ฐ์ดํฐ์์ offset ์ฝ๋ ๋จ์ ๋ค์ ์ฝ์ ํฉ๋๋ค.
-
deleteOffset์ offset + data์ ๊ธธ์ด๋ก ์ค์ ํฉ๋๋ค.
-
deleteOffset ์ฝ๋ ๋จ์๋ถํฐ node์ ๋ฐ์ดํฐ์์ count๊ฐ์ ์ฝ๋ ๋จ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
์์ ๋ ธ๋๊ฐ node์ด๊ณ ์์ ์คํ์ ์ด offset๋ณด๋ค ํฌ์ง๋ง offset + count ์ดํ์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ํด๋น ์์ ์คํ์ ์ offset์ผ๋ก ์ค์ ํฉ๋๋ค.
-
๋ ๋ ธ๋๊ฐ node์ด๊ณ ๋ ์คํ์ ์ด offset๋ณด๋ค ํฌ์ง๋ง offset + count ์ดํ์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ํด๋น ๋ ์คํ์ ์ offset์ผ๋ก ์ค์ ํฉ๋๋ค.
-
์์ ๋ ธ๋๊ฐ node์ด๊ณ ์์ ์คํ์ ์ด offset + count๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ์์ ์คํ์ ์ data์ ๊ธธ์ด๋ฅผ ๋ํ๊ณ count๋ฅผ ๋บ๋๋ค.
-
๋ ๋ ธ๋๊ฐ node์ด๊ณ ๋ ์คํ์ ์ด offset + count๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ๋ ์คํ์ ์ data์ ๊ธธ์ด๋ฅผ ๋ํ๊ณ count๋ฅผ ๋บ๋๋ค.
-
node๊ฐ
ProcessingInstruction๋ ธ๋์ด๊ณ piAttributesAlreadyUpdated๊ฐ false์ด๋ฉด node๊ฐ ์ฃผ์ด์ก์ ๋ ๋ฐ์ดํฐ์์ ์์ฑ ๊ฐฑ์ ์ ์คํํฉ๋๋ค. -
node์ ๋ถ๋ชจ๊ฐ null์ด ์๋๋ฉด node์ ๋ถ๋ชจ์ ๋ํด ์์ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
๋ ธ๋ node์ ๋ฐ์ดํฐ์์ ๋ถ๋ถ ๋ฌธ์์ด์ ์ถ์ถํ๋ ค๋ฉด, ์ ์ offset๊ณผ ์ ์ count๊ฐ ์ฃผ์ด์ก์ ๋:
-
length๋ฅผ node์ ๊ธธ์ด๋ก ์ค์ ํฉ๋๋ค.
-
offset์ด length๋ณด๋ค ํฌ๋ฉด "
IndexSizeError"DOMException์ ๋์ง๋๋ค. -
offset + count๊ฐ length๋ณด๋ค ํฌ๋ฉด node์ ๋ฐ์ดํฐ์์ offset๋ฒ์งธ ์ฝ๋ ๋จ์๋ถํฐ ๋๊น์ง์ ์ฝ๋ ๋จ์๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
-
node์ ๋ฐ์ดํฐ์์ offset๋ฒ์งธ ์ฝ๋ ๋จ์๋ถํฐ offset+count๋ฒ์งธ ์ฝ๋ ๋จ์๊น์ง์ ์ฝ๋ ๋จ์๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
๋ค์
datagetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ฐ์ดํฐ. ํด๋น setter ๋จ๊ณ๋ ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ 0, this์ ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ ์ฃผ์ด์ง ๊ฐ์ ๋๋ค.๋ค์
substringData(offset, count)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์ ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ offset๊ณผ count์ ๋๋ค.๋ค์
appendData(data)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์ ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ this์ ๊ธธ์ด, 0, ๊ทธ๋ฆฌ๊ณ data์ ๋๋ค.๋ค์
insertData(offset, data)๋ฉ์๋ ๋จ๊ณ๋ ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ offset, 0, ๊ทธ๋ฆฌ๊ณ data์ ๋๋ค.๋ค์
deleteData(offset, count)๋ฉ์๋ ๋จ๊ณ๋ ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ offset, count, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค.๋ค์
replaceData(offset, count, data)๋ฉ์๋ ๋จ๊ณ๋ ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ offset, count, ๊ทธ๋ฆฌ๊ณ data์ ๋๋ค.4.11. ์ธํฐํ์ด์ค
Text[
Exposed =Window ]interface :Text CharacterData {constructor (optional DOMString = ""); [data NewObject ]Text splitText (unsigned long );offset readonly attribute DOMString wholeText ; };text = new Text([data = ""])- ๋ฐ์ดํฐ๊ฐ
data์ธ ์๋ก์ด
Text๋ ธ๋๋ฅผ ๋ฐํํฉ๋๋ค. text .splitText(offset)- ๋ฐ์ดํฐ๋ฅผ
์ฃผ์ด์ง
offset์์ ๋ถํ ํ๊ณ ๋๋จธ์ง๋ฅผ
Text๋ ธ๋๋ก ๋ฐํํฉ๋๋ค. text .wholeText- ๋ชจ๋ ์ง์ ์ ์ธ
Text๋ ธ๋ ํ์ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐฐํ์
Text๋ ธ๋๋Text๋ ธ๋ ์คCDATASection๋ ธ๋๊ฐ ์๋ ๋ ธ๋์ ๋๋ค.๋ ธ๋ node์ ์ฐ์๋
Text๋ ธ๋๋ node, node์ ์ด์ ํ์ ๋ ธ๋์ธText๋ ธ๋(์๋ ๊ฒฝ์ฐ)์ ํด๋น ๋ ธ๋์ ์ฐ์๋Text๋ ธ๋, ๊ทธ๋ฆฌ๊ณ node์ ๋ค์ ํ์ ๋ ธ๋์ธText๋ ธ๋(์๋ ๊ฒฝ์ฐ)์ ํด๋น ๋ ธ๋์ ์ฐ์๋Text๋ ธ๋๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ค๋ณต์ ์ ์ธํฉ๋๋ค.๋ ธ๋ node์ ์ฐ์๋ ๋ฐฐํ์
Text๋ ธ๋๋ node, node์ ์ด์ ํ์ ๋ ธ๋์ธ ๋ฐฐํ์ Text๋ ธ๋(์๋ ๊ฒฝ์ฐ)์ ํด๋น ๋ ธ๋์ ์ฐ์๋ ๋ฐฐํ์ Text๋ ธ๋, ๊ทธ๋ฆฌ๊ณ node์ ๋ค์ ํ์ ๋ ธ๋์ธ ๋ฐฐํ์ Text๋ ธ๋(์๋ ๊ฒฝ์ฐ)์ ํด๋น ๋ ธ๋์ ์ฐ์๋ ๋ฐฐํ์ Text๋ ธ๋๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ค๋ณต์ ์ ์ธํฉ๋๋ค.๋ ธ๋ node์ ์์ ํ ์คํธ ์ฝํ ์ธ ๋ node์
Text๋ ธ๋ ์์ ๋ชจ๋์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌ ์์๋ก ์ฐ๊ฒฐํ ๊ฒฐ๊ณผ์ ๋๋ค.๋ ธ๋ node์ ์์ ํ ์คํธ ์ฝํ ์ธ ๋ node์
Text๋ ธ๋ ์์ ๋ชจ๋์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌ ์์๋ก ์ฐ๊ฒฐํ ๊ฒฐ๊ณผ์ ๋๋ค.ํ ์คํธ ๋ ธ๋ ์์ฑ์ ์ํํ๋ ค๋ฉด, ์ฃผ์ด์ง ๋ฌธ์ document์ ๋ฌธ์์ด data๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ํํฉ๋๋ค:
-
text๋ฅผ ๋ค์ ๋ ธ๋ ์์ฑ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ์ด ๋ ธ๋๋
Text๋ฅผ ๊ตฌํํ๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ document์ ๋๋ค. -
text์ ๋ฐ์ดํฐ๋ฅผ data๋ก ์ค์ ํฉ๋๋ค.
-
text๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
new Text(data)์์ฑ์ ๋จ๊ณ๋ this์ ๋ฐ์ดํฐ๋ฅผ data๋ก ์ค์ ํ๊ณ , this์ ๋ ธ๋ ๋ฌธ์๋ฅผ ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋Document๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค.๋ค์๊ณผ ๊ฐ์ด ๋ถํ ํฉ๋๋ค. ๋์์
Text๋ ธ๋ node์ด๋ฉฐ, ์ธ์๋ ์ ์ offset์ ๋๋ค:-
length๋ฅผ node์ ๊ธธ์ด๋ก ๋ก๋๋ค.
-
offset์ด length๋ณด๋ค ํฌ๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
IndexSizeError"DOMException. -
count๋ฅผ length โ offset์ผ๋ก ๋ก๋๋ค.
-
newData๋ฅผ ๋ค์ ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ node์ด๋ฉฐ, ์ธ์๋ offset๊ณผ count์ ๋๋ค.
-
newNode๋ฅผ ๋ค์ ํ ์คํธ ๋ ธ๋ ์์ฑ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ์ฃผ์ด์ง ๊ฐ์ node์ ๋ ธ๋ ๋ฌธ์์ newData์ ๋๋ค.
-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null์ด ์๋๋ฉด:
-
์ฝ์ ํฉ๋๋ค: newNode๋ฅผ parent์, node์ ๋ค์ ํ์ ์์.
-
๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด, ๊ทธ ์์ ๋ ธ๋๊ฐ node์ด๊ณ ์์ ์คํ์ ์ด offset๋ณด๋ค ํฌ๋ฉด, ๊ทธ ์์ ๋ ธ๋๋ฅผ newNode๋ก ์ค์ ํ๊ณ ๊ทธ ์์ ์คํ์ ์ offset๋งํผ ์ค์ ๋๋ค.
-
๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด, ๊ทธ ๋ ๋ ธ๋๊ฐ node์ด๊ณ ๋ ์คํ์ ์ด offset๋ณด๋ค ํฌ๋ฉด, ๊ทธ ๋ ๋ ธ๋๋ฅผ newNode๋ก ์ค์ ํ๊ณ ๊ทธ ๋ ์คํ์ ์ offset๋งํผ ์ค์ ๋๋ค.
-
๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด, ๊ทธ ์์ ๋ ธ๋๊ฐ parent์ด๊ณ ์์ ์คํ์ ์ด ์ธ๋ฑ์ค(node์ ์ธ๋ฑ์ค)์ 1์ ๋ํ ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด, ๊ทธ ์์ ์คํ์ ์ 1๋งํผ ๋๋ฆฝ๋๋ค.
-
๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด, ๊ทธ ๋ ๋ ธ๋๊ฐ parent์ด๊ณ ๋ ์คํ์ ์ด ์ธ๋ฑ์ค(node์ ์ธ๋ฑ์ค)์ 1์ ๋ํ ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด, ๊ทธ ๋ ์คํ์ ์ 1๋งํผ ๋๋ฆฝ๋๋ค.
-
-
๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋์์ node์ด๋ฉฐ, ์ธ์๋ offset, count, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค.
-
newNode๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
splitText(offset)๋ฉ์๋ ๋จ๊ณ๋ ๋ถํ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ ์คํ์ offset์ ๋๋ค.๋ค์
wholeTextgetter ๋จ๊ณ๋ ๋ค์ ์ฐ๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค. ์ฐ๊ฒฐ ๋์์ ๋ฐ์ดํฐ์ด๋ฉฐ, ์ด๋ ์ฐ์๋Text๋ ธ๋(this์ ๋ํ ๋ ธ๋)์ ๋ฐ์ดํฐ๋ก์, ํธ๋ฆฌ ์์๋ก ์ฐ๊ฒฐํฉ๋๋ค.4.12. ์ธํฐํ์ด์ค
CDATASection[
Exposed =Window ]interface :CDATASection Text { };CDATA ์น์ ๋ ธ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ฌธ์ document์ ๋ฌธ์์ด data๊ฐ ์ฃผ์ด์ก์ ๋:
-
node๋ฅผ
CDATASection์ ๊ตฌํํ๋ ๋ ธ๋๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ์ด๋ document๊ฐ ์ฃผ์ด์ง๋๋ค. -
node์ ๋ฐ์ดํฐ๋ฅผ data๋ก ์ค์ ํฉ๋๋ค.
-
node๋ฅผ ๋ฐํํฉ๋๋ค.
4.13. ์ธํฐํ์ด์ค
ProcessingInstruction[
Exposed =Window ]interface :ProcessingInstruction CharacterData {constructor (DOMString ,target optional DOMString = "");data readonly attribute DOMString target ;boolean hasAttributes ();sequence <DOMString >getAttributeNames ();DOMString ?getAttribute (DOMString );name undefined setAttribute (DOMString ,name DOMString );value undefined removeAttribute (DOMString );name boolean toggleAttribute (DOMString ,name optional boolean );force boolean hasAttribute (DOMString ); };name pi = new ProcessingInstruction(target [, data = ""])- ์๋ก์ด
ProcessingInstruction๋ ธ๋๋ฅผ ๋ฐํํ๋ฉฐ, ํด๋น ๋ ธ๋์ ๋์์ target์ด๊ณ ๋ฐ์ดํฐ๋ data์ ๋๋ค. pi .target- ๋์์ ๋ฐํํฉ๋๋ค.
pi . hasAttributes()-
pi์ ์์ฑ์ด ์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
pi . getAttributeNames()-
pi์ ๋ชจ๋ ์์ฑ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค. ์ค๋ณต๋ ์ด๋ฆ์ ํฌํจ๋ ์ ์์ต๋๋ค.
pi . getAttribute(name)-
pi์์ ์ด๋ฆ์ด name์ธ ์์ฑ์ ๊ฐ์ ๋ฐํํ๋ฉฐ, ํด๋น ์์ฑ์ด ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
pi . setAttribute(name, value)-
pi์์ ์ด๋ฆ์ด name์ธ ์์ฑ์ value๋ก ์ค์ ํฉ๋๋ค.
pi . removeAttribute(name)-
pi์์ ์ด๋ฆ์ด name์ธ ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
pi . toggleAttribute(name [, force])-
force๊ฐ ์ฃผ์ด์ง์ง ์์ผ๋ฉด name์ "ํ ๊ธ"ํ์ฌ, ์กด์ฌํ๋ฉด ์ ๊ฑฐํ๊ณ ์กด์ฌํ์ง ์์ผ๋ฉด ์ถ๊ฐํฉ๋๋ค. force๊ฐ true์ด๋ฉด name์ ์ถ๊ฐํ๊ณ , force๊ฐ false์ด๋ฉด name์ ์ ๊ฑฐํฉ๋๋ค.
ํ์ฌ name์ด ์กด์ฌํ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
pi . hasAttribute(name)-
pi์ ์ด๋ฆ์ด name์ธ ์์ฑ์ด ์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
ProcessingInstruction๋ ธ๋์๋ ์ฐ๊ฒฐ๋ ๋์์ด ์์ต๋๋ค.ProcessingInstruction๋ ธ๋์๋ ์ฐ๊ฒฐ๋ ์์ฑ ๋งต์ด ์์ผ๋ฉฐ, ์ด๋ ๋งต์ผ๋ก, ์ด๊ธฐ์๋ ๋น์ด ์์ต๋๋ค.์ฒ๋ฆฌ ๋ช ๋ น ๋ ธ๋๋ฅผ ์์ฑํ๋ ค๋ฉด, ๋ฌธ์ document, ๋ฌธ์์ด target, ๋ฌธ์์ด data๊ฐ ์ฃผ์ด์ก์ ๋:
-
pi๋ฅผ ๋ ธ๋๋ฅผ ์์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ์ด ๋ ธ๋๋
ProcessingInstruction์ ๊ตฌํํ๋ฉฐ, document๊ฐ ์ฃผ์ด์ง๋๋ค. -
pi๋ฅผ target๊ณผ data๋ก ์ด๊ธฐํํฉ๋๋ค.
-
pi๋ฅผ ๋ฐํํฉ๋๋ค.
ProcessingInstruction๋ ธ๋ pi๋ฅผ target๊ณผ data๋ก ์ด๊ธฐํํ๋ ค๋ฉด:-
target์ด
Name์์ฑ ๊ท์น๊ณผ ์ผ์นํ์ง ์์ผ๋ฉด "InvalidCharacterError"DOMException์ ๋์ง๋๋ค. -
data์ ๋ฌธ์์ด "
?>"๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด "InvalidCharacterError"DOMException์ ๋์ง๋๋ค. -
pi์ ๋์์ target์ผ๋ก ์ค์ ํฉ๋๋ค.
-
pi์ ๋ฐ์ดํฐ๋ฅผ data๋ก ์ค์ ํฉ๋๋ค.
-
pi๊ฐ ์ฃผ์ด์ก์ ๋ ๋ฐ์ดํฐ์์ ์์ฑ์ ๊ฐฑ์ ํฉ๋๋ค.
ProcessingInstruction๋ ธ๋ pi๊ฐ ์ฃผ์ด์ก์ ๋ ๋ฐ์ดํฐ์์ ์์ฑ์ ๊ฐฑ์ ํ๋ ค๋ฉด:-
pi์ ์์ฑ ๋งต์ ๋น์๋๋ค.
-
result๋ฅผ pi์ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ก์ ๋ ๋ฌธ์์ด์์ ์์ฌ ์์ฑ์ ํ์ฑํ๋ ๊ท์น์ ํธ์ถํ ํ์ฑ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
result๊ฐ ์ค๋ฅ์ด๋ฉด ๋ฐํํฉ๋๋ค.
-
result์ ๊ฐ ์์ฌ ์์ฑ pseudoAttr์ ๋ํด: pi์ ์์ฑ ๋งต[pseudoAttr์ ์ด๋ฆ]์ pseudoAttr์ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
ProcessingInstruction๋ ธ๋ pi๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ ค๋ฉด:-
data๋ฅผ ๋น ๋ฌธ์์ด๋ก ์ค์ ํฉ๋๋ค.
-
pi์ ์์ฑ ๋งต์ ์๋ ๊ฐ name โ value์ ๋ํด:
-
data๊ฐ ๋น ๋ฌธ์์ด์ด ์๋๋ฉด U+0020 SPACE๋ฅผ data์ ์ถ๊ฐํฉ๋๋ค.
-
name์ data์ ์ถ๊ฐํฉ๋๋ค.
-
U+003D (=)๋ฅผ data์ ์ถ๊ฐํฉ๋๋ค.
-
U+0022 (")๋ฅผ data์ ์ถ๊ฐํฉ๋๋ค.
-
value์ ์๋ ๋ชจ๋ U+0026 (&)๋ฅผ "
&"๋ก ๊ต์ฒดํฉ๋๋ค. -
value์ ์๋ ๋ชจ๋ U+003C (<)๋ฅผ "
<"๋ก ๊ต์ฒดํฉ๋๋ค. -
value์ ์๋ ๋ชจ๋ U+003E (>)๋ฅผ "
>"๋ก ๊ต์ฒดํฉ๋๋ค. -
value์ ์๋ ๋ชจ๋ U+0022 (")๋ฅผ "
""๋ก ๊ต์ฒดํฉ๋๋ค. -
value๋ฅผ data์ ์ถ๊ฐํฉ๋๋ค.
-
U+0022 (")๋ฅผ data์ ์ถ๊ฐํฉ๋๋ค.
-
-
pi์ ๊ธธ์ด, 0, data, true๋ฅผ ์ฌ์ฉํ์ฌ pi์ ๋ฐ์ดํฐ๋ฅผ ๊ต์ฒดํฉ๋๋ค.
ProcessingInstruction๋ ธ๋ pi์ ๋ฌธ์์ด name์ด ์ฃผ์ด์ก์ ๋ ์ฒ๋ฆฌ ๋ช ๋ น ์์ฑ์ ๊ฐ์ ธ์ค๋ ค๋ฉด: pi์ ์์ฑ ๋งต[name]์ ๋ฐํํ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ null์ ๋๋ค.
๋ค์
new ProcessingInstruction(target, data)์์ฑ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๋ค์ this์ ๋ ธ๋ ๋ฌธ์๋ฅผ ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋
Document๋ก ์ค์ ํฉ๋๋ค. -
์ด๊ธฐํํฉ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ธ์๋ target๊ณผ data์ ๋๋ค.
๋ค์
hasAttributes()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ๋ค์ this์ ์์ฑ ๋งต์ด ๋น์ด ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.๋ค์
getAttributeNames()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ํค ๊ฐ์ ธ์ค๊ธฐ. ๋์์ this์ ์์ฑ ๋งต์ ๋๋ค.๋ค์
getAttribute(name)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์ฒ๋ฆฌ ๋ช ๋ น ์์ฑ ๊ฐ์ ธ์ค๊ธฐ. ์ฃผ์ด์ง ๊ฐ์ this์ name์ ๋๋ค.๋ค์
setAttribute(name, value)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
name์ด ์ ํจํ ์์ฑ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException. -
์ค์ ํฉ๋๋ค: this์ ์์ฑ ๋งต[name]์ value๋ก.
-
์์ฑ์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ํํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ this์ ๋๋ค.
๋ค์
removeAttribute(name)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
์ ๊ฑฐํฉ๋๋ค: this์ ์์ฑ ๋งต[name].
-
์์ฑ์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ํํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ this์ ๋๋ค.
๋ค์
toggleAttribute(name, force)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
name์ด ์ ํจํ ์์ฑ ๋ก์ปฌ ์ด๋ฆ์ด ์๋๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException. -
attributes๋ฅผ this์ ์์ฑ ๋งต์ผ๋ก ๋ก๋๋ค.
-
attributes[name]์ด ์กด์ฌํ์ง ์์ผ๋ฉด:
-
force๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋ true์ด๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค: attributes[name]์ ๋น ๋ฌธ์์ด๋ก. ์ด์ด์ ์์ฑ์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ํํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ this์ด๋ฉฐ, ๊ทธ๋ฐ ๋ค์ true๋ฅผ ๋ฐํํฉ๋๋ค.
-
false๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
force๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋ false์ด๋ฉด, ๋ค์์ ์ ๊ฑฐํฉ๋๋ค: attributes[name]. ์ด์ด์ ์์ฑ์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์ํํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ this์ด๋ฉฐ, ๊ทธ๋ฐ ๋ค์ false๋ฅผ ๋ฐํํฉ๋๋ค.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
hasAttribute(name)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: this์ ์์ฑ ๋งต[name]์ด ์กด์ฌํ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.4.14. ์ธํฐํ์ด์ค
Comment[
Exposed =Window ]interface :Comment CharacterData {constructor (optional DOMString = ""); };data comment = new Comment([data = ""])- ์๋ก์ด
Comment๋ ธ๋๋ฅผ ๋ฐํํ๋ฉฐ, ํด๋น ๋ ธ๋์ ๋ฐ์ดํฐ๋ data์ ๋๋ค.
์ฃผ์ ๋ ธ๋ ์์ฑ์ ์ํํ๋ ค๋ฉด, ์ฃผ์ด์ง ๋ฌธ์ document์ ๋ฌธ์์ด data๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ํํฉ๋๋ค:
-
comment๋ฅผ ๋ค์ ๋ ธ๋ ์์ฑ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ์ด ๋ ธ๋๋
Comment๋ฅผ ๊ตฌํํ๋ฉฐ, ์ฃผ์ด์ง ๊ฐ์ document์ ๋๋ค. -
comment์ ๋ฐ์ดํฐ๋ฅผ data๋ก ์ค์ ํฉ๋๋ค.
-
comment๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
new Comment(data)์์ฑ์ ๋จ๊ณ๋ this์ ๋ฐ์ดํฐ๋ฅผ data๋ก ์ค์ ํ๊ณ , this์ ๋ ธ๋ ๋ฌธ์๋ฅผ ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋Document๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค.5. ๋ฒ์(Ranges)
5.1. "DOM Ranges" ์๊ฐ
StaticRange๋ฐRange๊ฐ์ฒด(๋ฒ์)๋ ๋ ธ๋ ํธ๋ฆฌ ์์ ์ฝํ ์ธ ์ํ์ค๋ฅผ ๋ํ๋ธ๋ค. ๊ฐ ๋ฒ์์๋ ์์๊ณผ ๋์ด ์์ผ๋ฉฐ, ์ด๋ค์ ๊ฒฝ๊ณ์ ์ด๋ค. ๊ฒฝ๊ณ์ ์ ๋ ธ๋์ ์คํ์ ์ผ๋ก ๊ตฌ์ฑ๋ ํํ์ด๋ค. ์ฆ, ๋ค๋ฅธ ๋ง๋ก ํ๋ฉด ๋ฒ์๋ ๋ ธ๋ ํธ๋ฆฌ ์์์ ๋ ๊ฒฝ๊ณ์ ์ฌ์ด์ ์ฝํ ์ธ ์กฐ๊ฐ์ ๋ํ๋ธ๋ค.๋ฒ์๋ ํธ์ง์์ ์ฝํ ์ธ ๋ฅผ ์ ํํ๊ณ ๋ณต์ฌํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ค.
-
Element:p
์ ๋ ธ๋ ํธ๋ฆฌ์์ ๋ฒ์๋ฅผ ์ฌ์ฉํ์ฌ โsyndata is awesโ ์ํ์ค๋ฅผ ๋ํ๋ผ ์ ์๋ค. p๊ฐ
p์์์ ํ ๋น๋๊ณ , em์ดem์์์ ํ ๋น๋์๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ํํ ์ ์๋ค:var range= new Range(), firstText= p. childNodes[ 1 ], secondText= em. firstChild range. setStart( firstText, 9 ) // do not forget the leading space range. setEnd( secondText, 4 ) // range now stringifies to the aforementioned quote ์ ๋ ธ๋ ํธ๋ฆฌ์
src๋ฐalt์ ๊ฐ์ ์์ฑ์ ๋ฒ์๋ก ๋ํ๋ผ ์ ์๋ค. ๋ฒ์๋ ๋ ธ๋์๋ง ์ ์ฉํ๋ค.Range๊ฐ์ฒด๋StaticRange๊ฐ์ฒด์ ๋ฌ๋ฆฌ ๋ ธ๋ ํธ๋ฆฌ์ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ๋๋ค. ๋ฐ๋ผ์ ๋ผ์ด๋ธ ๋ฒ์๋ผ๊ณ ๋ ํ๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ์ ๋ฒ์๋ฅผ ๋ฌดํจํํ์ง ์์ผ๋ฉฐ, ๋ฒ์๊ฐ ๊ณ์ ๊ฐ์ ์ฝํ ์ธ ๋ถ๋ถ์ ๋ํ๋ด๋๋ก ํ๋ค. ํ์ฐ์ ์ผ๋ก, ์๋ฅผ ๋ค์ด ๋ฒ์๊ฐ ๋ํ๋ด๋ ์ฝํ ์ธ ์ผ๋ถ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ผ์ด๋ธ ๋ฒ์ ์์ฒด๋ ๋ ธ๋ ํธ๋ฆฌ ๋ณ๊ฒฝ์ ์ผ๋ถ๋ก ์์ ๋ ์ ์๋ค.์์ธํ ๋ด์ฉ์ ์ฝ์ ๋ฐ ์ ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ,
normalize()๋ฉ์๋, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ๊ต์ฒด ๋ฐ ๋ถํ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐํ๋ค.๋ ธ๋ ํธ๋ฆฌ ๋ณ๊ฒฝ์ ๋์ํ์ฌ ๋ผ์ด๋ธ ๋ฒ์๋ฅผ ๊ฐฑ์ ํ๋ ์์ ์ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์๋ค. ๋ชจ๋ ๋ ธ๋ ํธ๋ฆฌ ๋ณ๊ฒฝ๋ง๋ค ์ํฅ์ ๋ฐ๋ ๋ชจ๋
Range๊ฐ์ฒด๋ฅผ ๊ฐฑ์ ํด์ผ ํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ผ๋ถ ๋ผ์ด๋ธ ๋ฒ์์ ๊ด์ฌ์ด ์๋๋ผ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ ์ด๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๋น์ฉ์ ์ฌ์ ํ ๋ถ๋ดํด์ผ ํ๋ค.StaticRange๊ฐ์ฒด๋ ๋ ธ๋ ํธ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๊ฐฑ์ ๋์ง ์๋ ๊ฒฝ๋ ๋ฒ์์ด๋ค. ๋ฐ๋ผ์ ๋ผ์ด๋ธ ๋ฒ์์ ๋์ผํ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ๋ฐ์ํ์ง ์๋๋ค.5.2. ๊ฒฝ๊ณ์ (boundary points)
๊ฒฝ๊ณ์ ์ ํํ์ด๋ฉฐ, ๋ค์์ผ๋ก ๊ตฌ์ฑ๋๋ค: ๋ ธ๋(ํ๋์ ๋ ธ๋)์ ์คํ์ (์์ด ์๋ ์ ์).
์ฌ๋ฐ๋ฅธ ๊ฒฝ๊ณ์ ์ ์คํ์ ์ 0๊ณผ ๊ฒฝ๊ณ์ ์ ๋ ธ๋์ ๊ธธ์ด ์ฌ์ด์ ์์ผ๋ฉฐ, ์ ๋๊ฐ์ ํฌํจํ๋ค.
๊ฒฝ๊ณ์ (nodeA, offsetA)์ ๊ฒฝ๊ณ์ (nodeB, offsetB)์ ๋ํ ์์น๋ ๋ค์ ๋จ๊ณ์์ ๋ฐํ๋๋ ์, ๊ฐ์, ๋๋ ๋ค์ด๋ค:
-
๋จ์ธ: nodeA์ nodeB๋ ๊ฐ์ ๋ฃจํธ๋ฅผ ๊ฐ์ง๋ค.
- nodeA๊ฐ nodeB์ด๋ฉด, offsetA๊ฐ offsetB์ผ ๋ ๊ฐ์์ ๋ฐํํ๊ณ , offsetA๊ฐ offsetB๋ณด๋ค ์์ ๋ ์์ ๋ฐํํ๋ฉฐ, offsetA๊ฐ offsetB๋ณด๋ค ํด ๋ ๋ค๋ฅผ ๋ฐํํ๋ค.
-
nodeA๊ฐ nodeB์ ๋ค์ ์ค๋ ๋ ธ๋์ด๋ฉด, (nodeA, offsetA)์ ๋ํ (nodeB, offsetB)์ ์์น๊ฐ ์์ด๋ฉด ๋ค๋ฅผ ๋ฐํํ๊ณ , ๋ค์ด๋ฉด ์์ ๋ฐํํ๋ค.
-
nodeA๊ฐ nodeB์ ์กฐ์์ด๋ฉด:
-
์์ ๋ฐํํ๋ค.
5.3. ์ธํฐํ์ด์ค
AbstractRange[
Exposed =Window ]interface {AbstractRange readonly attribute Node startContainer ;readonly attribute unsigned long startOffset ;readonly attribute Node endContainer ;readonly attribute unsigned long endOffset ;readonly attribute boolean collapsed ; };AbstractRange์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ๋ฒ์(range)๋ผ๊ณ ํฉ๋๋ค.๋ฒ์(range)๋ ๋ ๊ฐ์ ๊ฒฝ๊ณ์ (boundary point) โ ์์(start)๊ณผ ๋(end) โ ์ ๊ฐ์ง๋๋ค.
ํธ์๋ฅผ ์ํด, ๋ฒ์(range)์ ์์ ๋ ธ๋(start node)๋ ์์(start)์ ๋ ธ๋(node)์ด๊ณ , ์์ ์คํ์ (start offset)์ ์์(start)์ ์คํ์ (offset)์ด๋ฉฐ, ๋ ๋ ธ๋(end node)๋ ๋(end)์ ๋ ธ๋(node), ๊ทธ๋ฆฌ๊ณ ๋ ์คํ์ (end offset)์ ๋(end)์ ์คํ์ (offset)์ ๋๋ค.
range๊ฐ collapsed ์ํ๋, start node์ end node๊ฐ ๊ฐ๊ณ , start offset๊ณผ end offset๋ ๊ฐ์ ๋๋ฅผ ์๋ฏธํ๋ค.
node = range . startContainer- range์ ์์ ๋ ธ๋(start node)๋ฅผ ๋ฐํํฉ๋๋ค.
offset = range . startOffset- range์ ์์ ์คํ์ (start offset)์ ๋ฐํํฉ๋๋ค.
node = range . endContainer- range์ ๋ ๋ ธ๋(end node)๋ฅผ ๋ฐํํฉ๋๋ค.
offset = range . endOffset- range์ ๋ ์คํ์ (end offset)์ ๋ฐํํฉ๋๋ค.
collapsed = range . collapsed- range๊ฐ ์ ํ(collapsed) ์ํ์ด๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
startContainergetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์์ ๋ ธ๋.๋ค์
startOffsetgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์์ ์คํ์ .๋ค์
endContainergetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ ๋ ธ๋.๋ค์
endOffsetgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ๋ ์คํ์ .๋ค์
collapsedgetter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: this๊ฐ ์ถ์๋ ์ํ์ด๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.5.4. ์ธํฐํ์ด์ค
StaticRangedictionary {StaticRangeInit required Node ;startContainer required unsigned long ;startOffset required Node ;endContainer required unsigned long ; }; [endOffset Exposed =Window ]interface :StaticRange AbstractRange {constructor (StaticRangeInit ); };init staticRange = new StaticRange(init)-
๋ ธ๋ ํธ๋ฆฌ๊ฐ ๋ณ์ด๋ ๋ ๊ฐฑ์ ๋์ง ์๋ ์๋ก์ด ๋ฒ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
๋ค์
new StaticRange(init)์์ฑ์์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
init["
startContainer"] ๋๋ init["endContainer"]๊ฐDocumentType๋๋Attr๋ ธ๋์ด๋ฉด ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "InvalidNodeTypeError"DOMException. -
๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค: this์ ์์์ (init["
startContainer"], init["startOffset"]) ์ด๊ณ ๋์ (init["endContainer"], init["endOffset"]).
StaticRange๋ ๋ค์์ด ๋ชจ๋ ์ฐธ์ด๋ฉด ์ ํจํ๋ค:-
๊ทธ ์์๊ณผ ๋์ ๊ฐ์ ๋ ธ๋ ํธ๋ฆฌ์ ์๋ค.
-
๊ทธ ์์ ์คํ์ ์ 0๊ณผ ๊ทธ ์์ ๋ ธ๋์ ๊ธธ์ด ์ฌ์ด์ ์์ผ๋ฉฐ, ์ ๋๊ฐ์ ํฌํจํ๋ค.
-
๊ทธ ๋ ์คํ์ ์ 0๊ณผ ๊ทธ ๋ ๋ ธ๋์ ๊ธธ์ด ์ฌ์ด์ ์์ผ๋ฉฐ, ์ ๋๊ฐ์ ํฌํจํ๋ค.
5.5. ์ธํฐํ์ด์ค
Range[
Exposed =Window ]interface :Range AbstractRange {constructor ();readonly attribute Node commonAncestorContainer ;undefined setStart (Node ,node unsigned long );offset undefined setEnd (Node ,node unsigned long );offset undefined setStartBefore (Node );node undefined setStartAfter (Node );node undefined setEndBefore (Node );node undefined setEndAfter (Node );node undefined collapse (optional boolean =toStart false );undefined selectNode (Node );node undefined selectNodeContents (Node );node const unsigned short = 0;START_TO_START const unsigned short = 1;START_TO_END const unsigned short = 2;END_TO_END const unsigned short = 3;END_TO_START short compareBoundaryPoints (unsigned short ,how Range ); [sourceRange CEReactions ]undefined deleteContents (); [CEReactions ,NewObject ]DocumentFragment extractContents (); [CEReactions ,NewObject ]DocumentFragment cloneContents (); [CEReactions ]undefined insertNode (Node ); [node CEReactions ]undefined surroundContents (Node ); [newParent NewObject ]Range cloneRange ();undefined detach ();boolean isPointInRange (Node ,node unsigned long );offset short comparePoint (Node ,node unsigned long );offset boolean intersectsNode (Node );node stringifier ; };Range์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ ๋ผ์ด๋ธ ๋ฒ์๋ผ๊ณ ํฉ๋๋ค.ํธ๋ฆฌ๋ฅผ ์์ ํ๋ ์๊ณ ๋ฆฌ์ฆ(ํนํ ์ฝ์ , ์ ๊ฑฐ, ์ด๋, ๋ฐ์ดํฐ ๊ต์ฒด, ๋ถํ ์๊ณ ๋ฆฌ์ฆ)๋ ํด๋น ํธ๋ฆฌ์ ์ฐ๊ฒฐ๋ ๋ผ์ด๋ธ ๋ฒ์๋ฅผ ์์ ํฉ๋๋ค.
๋ผ์ด๋ธ ๋ฒ์์ ๋ฃจํธ๋ ํด๋น ๋ฒ์์ ์์ ๋ ธ๋์ ๋ฃจํธ์ ๋๋ค.
๋ ธ๋ node๊ฐ ๋ผ์ด๋ธ ๋ฒ์ range์ ํฌํจ๋๋ ๊ฒ์ node์ ๋ฃจํธ๊ฐ range์ ๋ฃจํธ์ด๊ณ , (node, 0)์ด range์ ์์๋ณด๋ค ๋ค์ ์์ผ๋ฉฐ, (node, node์ ๊ธธ์ด)๊ฐ range์ ๋๋ณด๋ค ์์ ์๋ ๊ฒฝ์ฐ์ ๋๋ค.
๋ ธ๋๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋๋ ๊ฒ์ ํด๋น ๋ ธ๋๊ฐ ๊ทธ ๋ผ์ด๋ธ ๋ฒ์์ ์์ ๋ ธ๋์ ํฌ๊ด์ ์กฐ์์ด์ง๋ง ๋ ๋ ธ๋์ ํฌ๊ด์ ์กฐ์์ ์๋๊ฑฐ๋, ๊ทธ ๋ฐ๋์ธ ๊ฒฝ์ฐ์ ๋๋ค.
์ด๋ฌํ ์ ์๋ฅผ ๋ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ์ฌ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
๋ผ์ด๋ธ ๋ฒ์ ์์ ์๋ค๊ณ ์๊ฐํ ์ ์๋ ์ฝํ ์ธ ๋ ๋ชจ๋ ํฌํจ๋ ๋ ธ๋์, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์ ๋ ธ๋์ ๋ ๋ ธ๋์ ์ฝํ ์ธ ์ผ๋ถ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํด๋น ๋ ธ๋๋ค์ด
CharacterData๋ ธ๋์ธ ๊ฒฝ์ฐ์ ๋๋ค. -
๋ผ์ด๋ธ ๋ฒ์์ ํฌํจ๋ ๋ ธ๋๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ฐ์๋์ด ์์ง ์์ต๋๋ค. ํฌํจ๋ ๋ ธ๋์ ๋ถ๋ชจ๊ฐ ํญ์ ํฌํจ๋๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
๊ทธ๋ฌ๋ ํฌํจ๋ ๋ ธ๋์ ์์๋ค์ ๋ชจ๋ ํฌํจ๋ฉ๋๋ค. ๋ํ ๋ ํ์ ๋ ธ๋๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด ๊ทธ ์ฌ์ด์ ์๋ ๋ชจ๋ ํ์ ๋ ธ๋๋ ํฌํจ๋ฉ๋๋ค.
-
๋ผ์ด๋ธ ๋ฒ์์ ์์ ๋ ธ๋์ ๋ ๋ ธ๋๋ ํด๋น ๋ฒ์์ ์ ๋๋ก ํฌํจ๋์ง ์์ต๋๋ค.
-
์ฒซ ๋ฒ์งธ ํฌํจ๋ ๋ ธ๋(์๋ ๊ฒฝ์ฐ)๋ ํญ์ ์์ ๋ ธ๋ ๋ค์ ์์ผ๋ฉฐ, ๋ง์ง๋ง ํฌํจ๋ ๋ ธ๋๋ ํญ์ ๋ ๋ ธ๋์ ๋ง์ง๋ง ์์๊ณผ ๊ฐ๊ฑฐ๋ ๊ทธ ์์ ์์ต๋๋ค.
-
๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋ ๋ ธ๋๊ฐ ์กด์ฌํ๋ ๊ฒ์ ์์ ๋ ธ๋์ ๋ ๋ ธ๋๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒฝ์ฐ์ ํํฉ๋๋ค.
-
commonAncestorContainer์์ฑ ๊ฐ์ ํฌํจ๋์ง๋ ์๊ณ ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ง๋ ์์ต๋๋ค. -
์์ ๋ ธ๋๊ฐ ๋ ๋ ธ๋์ ์กฐ์์ด๋ฉด ๊ณตํต ํฌ๊ด์ ์กฐ์์ ์์ ๋ ธ๋๊ฐ ๋ฉ๋๋ค. ๊ทธ ๋ ธ๋์ ์์ ์ค ์ ํํ ํ๋๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋๋ฉฐ, ์์์ด ํฌํจ๋๋ ๊ฒ์ ๊ทธ ์์์ด ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋ ์์๋ณด๋ค ์์๋ ๊ฒฝ์ฐ์ ํํฉ๋๋ค. ๋ ๋ ธ๋๊ฐ ์์ ๋ ธ๋์ ์กฐ์์ด๋ฉด ๊ทธ ๋ฐ๋๊ฐ ์ฑ๋ฆฝํฉ๋๋ค.
-
์์ ๋ ธ๋๊ฐ ๋ ๋ ธ๋์ ํฌ๊ด์ ์กฐ์์ด ์๋๊ณ , ๊ทธ ๋ฐ๋๋ ์๋๋ผ๋ฉด ๊ณตํต ํฌ๊ด์ ์กฐ์์ ๋ ๋ ธ๋์ ๋ชจ๋ ๋ค๋ฆ ๋๋ค. ๊ทธ ๋ ธ๋์ ์์ ์ค ์ ํํ ๋ ๊ฐ๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋๋ฉฐ, ์์์ด ํฌํจ๋๋ ๊ฒ์ ๋ ์์ ์ฌ์ด์ ์๋ ๊ฒฝ์ฐ์ ํํฉ๋๋ค.
๋ ธ๋ node๊ฐ ์ฃผ์ด์ก์ ๋ ๋ผ์ด๋ธ ๋ฒ์ ์ฌ์ ์ ๊ฑฐ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
๋จ์ธํฉ๋๋ค: parent๋ null์ด ์๋๋๋ค.
-
index๋ฅผ node์ ์ธ๋ฑ์ค๋ก ์ค์ ํฉ๋๋ค.
-
์์ ๋ ธ๋๊ฐ node์ ํฌ๊ด์ ์์์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ํด๋น ์์์ (parent, index)๋ก ์ค์ ํฉ๋๋ค.
-
๋ ๋ ธ๋๊ฐ node์ ํฌ๊ด์ ์์์ธ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ํด๋น ๋์ (parent, index)๋ก ์ค์ ํฉ๋๋ค.
-
์์ ๋ ธ๋๊ฐ parent์ด๊ณ ์์ ์คํ์ ์ด index๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ํด๋น ์์ ์คํ์ ์ 1๋งํผ ๊ฐ์์ํต๋๋ค.
-
๋ ๋ ธ๋๊ฐ parent์ด๊ณ ๋ ์คํ์ ์ด index๋ณด๋ค ํฐ ๊ฐ ๋ผ์ด๋ธ ๋ฒ์์ ๋ํด ํด๋น ๋ ์คํ์ ์ 1๋งํผ ๊ฐ์์ํต๋๋ค.
range = new Range()- ์๋ก์ด ๋ผ์ด๋ธ ๋ฒ์๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
new Range()์์ฑ์ ๋จ๊ณ๋ ๋ค์ this์ ์์์ ๊ณผ ๋์ ์ (ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋Document, 0)์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค.
- container = range .
commonAncestorContainer - ๋ค์ ๋ ธ๋๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๋ ธ๋๋ ๋ฌธ์์์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ์กฐ์์ผ๋ก, range์ ์์ ๋ ธ๋์ ๋ ๋ ธ๋ ๋ ๋ชจ๋์ ์กฐ์์ ๋๋ค.
๊ณตํต ์กฐ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํํ๋ ค๋ฉด, ๋์์ธ ๋ผ์ด๋ธ ๋ฒ์ range์ ๋ํด ๋ค์์ ์ํํฉ๋๋ค:
-
container๋ฅผ range์ ์์ ๋ ธ๋๋ก ๋ก๋๋ค.
-
container๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋ ๋์: range์ ๋ ๋ ธ๋, container๋ฅผ container์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
container๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
commonAncestorContainergetter ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๊ณตํต ์กฐ์ ๊ฐ์ ธ์ค๊ธฐ. ๋์์ this์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์์ ๋๋ ๋์ ์ ์ค์ ํฉ๋๋ค. ๋์์ range์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ ๊ฒฝ๊ณ์ (node, offset)์ ๋๋ค:
-
node๊ฐ ๋ฌธ์ ์ ํ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
offset์ด node์ ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด, ๋์ง๋๋ค: "
IndexSizeError"DOMException. -
boundaryPoint๋ฅผ ๋ค์ ๊ฒฝ๊ณ์ ์ผ๋ก ๋ก๋๋ค: (node, offset).
-
- ์ด ๋จ๊ณ๋ค์ด "์์์ ์ค์ "์ผ๋ก ํธ์ถ๋ ๊ฒฝ์ฐ
- ์ด ๋จ๊ณ๋ค์ด "๋์ ์ค์ "์ผ๋ก ํธ์ถ๋ ๊ฒฝ์ฐ
๋ค์
setStart(node, offset)๋ฉ์๋ ๋จ๊ณ๋ ์์์ ์ค์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ ๊ฒฝ๊ณ์ (node, offset)์ ๋๋ค.๋ค์
setEnd(node, offset)๋ฉ์๋ ๋จ๊ณ๋ ๋์ ์ค์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ ๊ฒฝ๊ณ์ (node, offset)์ ๋๋ค.๋ค์
setStartBefore(node)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
์์์ ์ค์ ์ ์ํํฉ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ ๊ฒฝ๊ณ์ (parent, node์ ์ธ๋ฑ์ค)์ ๋๋ค.
๋ค์
setStartAfter(node)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
์์์ ์ค์ ์ ์ํํฉ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ ๊ฒฝ๊ณ์ (parent, node์ ์ธ๋ฑ์ค์ 1์ ๋ํ ๊ฐ)์ ๋๋ค.
๋ค์
setEndBefore(node)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
๋์ ์ค์ ์ ์ํํฉ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ ๊ฒฝ๊ณ์ (parent, node์ ์ธ๋ฑ์ค)์ ๋๋ค.
๋ค์
setEndAfter(node)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
๋์ ์ค์ ์ ์ํํฉ๋๋ค. ๋์์ this์ด๋ฉฐ, ์ค์ ํ ๊ฐ์ ๊ฒฝ๊ณ์ (parent, node์ ์ธ๋ฑ์ค์ 1์ ๋ํ ๊ฐ)์ ๋๋ค.
๋ค์
collapse(toStart)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: toStart๊ฐ true์ด๋ฉด, ๋์ ์ ์์์ ์ผ๋ก ์ค์ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์์ ์ ๋์ ์ผ๋ก ์ค์ ํฉ๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์ ํํฉ๋๋ค. ๋์์ ๋ ธ๋ node์ด๋ฉฐ, ์ ํ์ ์ฌ์ฉํ๋ ๋ฒ์๋ range์ ๋๋ค:
-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
index๋ฅผ node์ ์ธ๋ฑ์ค๋ก ๋ก๋๋ค.
-
range์ ์์์ ์ ๊ฒฝ๊ณ์ (parent, index)๋ก ์ค์ ํฉ๋๋ค.
-
range์ ๋์ ์ ๊ฒฝ๊ณ์ (parent, index์ 1์ ๋ํ ๊ฐ)์ผ๋ก ์ค์ ํฉ๋๋ค.
๋ค์
selectNode(node)๋ฉ์๋ ๋จ๊ณ๋ ์ ํ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ node์ด๋ฉฐ, ์ ํ์ ์ฌ์ฉํ๋ ๋ฒ์๋ this์ ๋๋ค.๋ค์
selectNodeContents(node)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๊ฐ ๋ฌธ์ ์ ํ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
length๋ฅผ ๋ค์ ๊ธธ์ด๋ก ๋ก๋๋ค: node์ ๊ธธ์ด.
-
๋ค์ ์์์ ์ ๊ฒฝ๊ณ์ (node, 0)์ผ๋ก ์ค์ ํฉ๋๋ค.
-
๋ค์ ๋์ ์ ๊ฒฝ๊ณ ์ (node, length)์ผ๋ก ์ค์ ํฉ๋๋ค.
๋ค์
compareBoundaryPoints(how, sourceRange)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
how๊ฐ ๋ค์ ์ค ์ด๋ ๊ฒ๋ ์๋๋ฉด
START_TO_START,START_TO_END,END_TO_END, ๊ทธ๋ฆฌ๊ณEND_TO_START,
๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
NotSupportedError"DOMException. -
๋ค์ this์ ๋ฃจํธ๊ฐ sourceRange์ ๋ฃจํธ์ ๋ค๋ฅด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
WrongDocumentError"DOMException. -
thisPoint์ sourcePoint๋ฅผ null๋ก ๋ก๋๋ค.
-
how์ ๋ฐ๋ผ ๋ถ๊ธฐํฉ๋๋ค:
START_TO_START:-
thisPoint๋ฅผ this์ ์์์ ์ผ๋ก, sourcePoint๋ฅผ sourceRange์ ์์์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
START_TO_END:-
thisPoint๋ฅผ this์ ๋์ ์ผ๋ก, sourcePoint๋ฅผ sourceRange์ ์์์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
END_TO_END:-
thisPoint๋ฅผ this์ ๋์ ์ผ๋ก, sourcePoint๋ฅผ sourceRange์ ๋์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
END_TO_START:-
thisPoint๋ฅผ this์ ์์์ ์ผ๋ก, sourcePoint๋ฅผ sourceRange์ ๋์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
๋ค์ ์์น์ ๋ฐ๋ผ ๋ถ๊ธฐํฉ๋๋ค. thisPoint์ ์์น์ด๋ฉฐ, ๊ธฐ์ค์ sourcePoint์ ๋๋ค:
๋ค์
deleteContents()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๋ค์ this๊ฐ ์ถ์๋ ์ํ์ด๋ฉด ๋ฐํํฉ๋๋ค.
-
originalStartNode, originalStartOffset, originalEndNode, originalEndOffset์ ๊ฐ๊ฐ this์ ์์ ๋ ธ๋, ์์ ์คํ์ , ๋ ๋ ธ๋, ๊ทธ๋ฆฌ๊ณ ๋ ์คํ์ ์ผ๋ก ๋ก๋๋ค.
-
originalStartNode๊ฐ originalEndNode์ด๊ณ ์ด๊ฒ์ด
CharacterData๋ ธ๋์ด๋ฉด:-
๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset, originalEndOffset โ originalStartOffset, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค.
-
๋ฐํํฉ๋๋ค.
-
-
nodesToRemove๋ฅผ ๋ค์ ๋ชจ๋ ๋ ธ๋์ ๋ชฉ๋ก์ผ๋ก ๋ก๋๋ค. ์ด ๋ ธ๋๋ค์ ํฌํจ๋์ด ์์ต๋๋ค. ํฌํจํ๋ ๋ฒ์๋ this์ด๋ฉฐ, ํธ๋ฆฌ ์์๋ก ๋์ดํ๋, ๋ค์ ๋ ธ๋๋ ์ ์ธํฉ๋๋ค. ํด๋น ๋ ธ๋์ ๋ถ๋ชจ ๋ํ ํฌํจ๋์ด ์์ผ๋ฉฐ, ํฌํจํ๋ ๋ฒ์๋ this์ ๋๋ค.
-
newNode์ newOffset์ null๋ก ๋ก๋๋ค.
-
originalStartNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด๋ฉด: originalEndNode, newNode๋ฅผ originalStartNode๋ก, newOffset์ originalStartOffset์ผ๋ก ์ค์ ํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
referenceNode๋ฅผ originalStartNode๋ก ๋ก๋๋ค.
-
referenceNode์ ๋ถ๋ชจ๊ฐ null์ด ์๋๊ณ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋ ๋์: originalEndNode, referenceNode๋ฅผ ๊ทธ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
newNode๋ฅผ referenceNode์ ๋ถ๋ชจ๋ก, newOffset์ referenceNode์ ์ธ๋ฑ์ค + 1๋ก ์ค์ ํฉ๋๋ค.
referenceNode์ ๋ถ๋ชจ๊ฐ null์ด๋ผ๋ฉด, ํด๋น ๋ ธ๋๋ ๋ฃจํธ์ผ ๊ฒ์ ๋๋ค. ํด๋น ๋ฒ์๋ this์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ๋ ธ๋๋ ๋ค์์ ํฌ๊ด์ ์กฐ์์ผ ๊ฒ์ ๋๋ค: originalEndNode. ๋ฐ๋ผ์ ์ด ์ง์ ์ ๋๋ฌํ ์ ์์์ ๊ฒ์ ๋๋ค.
-
-
๋ค์ this์ ์์์ ๊ณผ ๋์ ์ (newNode, newOffset)์ผ๋ก ์ค์ ํฉ๋๋ค.
-
originalStartNode๊ฐ
CharacterData๋ ธ๋์ด๋ฉด, ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset, originalStartNode์ ๊ธธ์ด โ originalStartOffset, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค. -
๊ฐ node(nodesToRemove์ ์ํจ)์ ๋ํด, ํธ๋ฆฌ ์์๋ก: ์ ๊ฑฐํฉ๋๋ค: node๋ฅผ.
-
originalEndNode๊ฐ
CharacterData๋ ธ๋์ด๋ฉด, ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋์์ originalEndNode์ด๋ฉฐ, ์ธ์๋ 0, originalEndOffset, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ถ์ถํฉ๋๋ค. ๋์์ ๋ผ์ด๋ธ ๋ฒ์ range์ ๋๋ค:
-
fragment๋ฅผ ๋ค์ ๋ฌธ์ ์กฐ๊ฐ ์์ฑ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ์ฃผ์ด์ง ๊ฐ์ range์ ์์ ๋ ธ๋์ ๋ ธ๋ ๋ฌธ์์ ๋๋ค.
-
range๊ฐ ์ถ์๋ ์ํ์ด๋ฉด, fragment๋ฅผ ๋ฐํํฉ๋๋ค.
-
originalStartNode, originalStartOffset, originalEndNode, originalEndOffset์ ๊ฐ๊ฐ range์ ์์ ๋ ธ๋, ์์ ์คํ์ , ๋ ๋ ธ๋, ๊ทธ๋ฆฌ๊ณ ๋ ์คํ์ ์ผ๋ก ๋ก๋๋ค.
-
originalStartNode๊ฐ originalEndNode์ด๊ณ ์ด๊ฒ์ด
CharacterData๋ ธ๋์ด๋ฉด:-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: originalStartNode.
-
clone์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset๊ณผ originalEndOffset โ originalStartOffset์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset, originalEndOffset โ originalStartOffset, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค.
- fragment๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
commonAncestor๋ฅผ ๋ค์ ๊ณตํต ์กฐ์ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ range์ ๋๋ค.
-
firstPartiallyContainedChild๋ฅผ null๋ก ๋ก๋๋ค.
- originalStartNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋๋ฉด: originalEndNode, firstPartiallyContainedChild๋ฅผ ๋ค์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ค์ ํฉ๋๋ค. ํด๋น ์์์ commonAncestor์ ์์์ด๋ฉฐ, ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ํฌํจํ๋ ๋ฒ์๋ range์ ๋๋ค.
-
lastPartiallyContainedChild๋ฅผ null๋ก ๋ก๋๋ค.
-
originalEndNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋๋ฉด: originalStartNode, lastPartiallyContainedChild๋ฅผ ๋ค์ ๋ง์ง๋ง ์์์ผ๋ก ์ค์ ํฉ๋๋ค. ํด๋น ์์์ commonAncestor์ ์์์ด๋ฉฐ, ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ํฌํจํ๋ ๋ฒ์๋ range์ ๋๋ค.
์ด ๋ณ์ ํ ๋น๋ค์ ์ค์ ๋ก ํญ์ ํ๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ์กฐ๊ฑด์ ์๊ฐํด ๋ด ๋๋ค: originalStartNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋ ๊ฒฝ์ฐ: originalEndNode. ๊ทธ๋ฌ๋ฉด originalStartNode ์์ฒด๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ํฌํจํ๋ ๋ฒ์๋ range์ด๋ฉฐ, ๊ทธ ๋ชจ๋ ์กฐ์๋ ๋ค์ ์์์ ์ด๋ฅด๊ธฐ๊น์ง ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค: commonAncestor์ ์์. commonAncestor๋ originalStartNode์ผ ์ ์์ต๋๋ค. ๋ค์์ ํฌ๊ด์ ์กฐ์์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค: originalEndNode. ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋น์ทํฉ๋๋ค. ๋ํ, ๋ ์์์ด ๋ชจ๋ ์ ์๋์ด ์๋ค๋ฉด ์ ๋๋ก ๊ฐ์ ์ ์๋ค๋ ์ ์ ์ ์ํฉ๋๋ค.
-
containedChildren์ ๋ค์ ๋ชจ๋ ์์์ ๋ชฉ๋ก์ผ๋ก ๋ก๋๋ค. ์ด๋ค์ commonAncestor์ ์์์ด๋ฉฐ, ํฌํจํ๋ ๋ฒ์๊ฐ range์ธ ๊ฒ๋ค์ ๋๋ค. ๋์ด ์์๋ ํธ๋ฆฌ ์์์ ๋๋ค.
-
containedChildren์ ๊ตฌ์ฑ์ ์ค ํ๋๋ผ๋ ๋ฌธ์ ์ ํ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
HierarchyRequestError"DOMException.์ฒซ ๋ฒ์งธ ๋๋ ๋ง์ง๋ง์ผ๋ก ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋ ๋ ธ๋๋ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๋ฌธ์ ์ ํ์ ์ ๋๋ก ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฒ์์ ๊ฒฝ๊ณ์ ์ด ๋ ์ ์์ผ๋ฉฐ, ์ด๋ค ๊ฒ์ ์กฐ์๋ ๋ ์ ์์ต๋๋ค.
-
newNode์ newOffset์ null๋ก ๋ก๋๋ค.
-
originalStartNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด๋ฉด: originalEndNode, newNode๋ฅผ originalStartNode๋ก, newOffset์ originalStartOffset์ผ๋ก ์ค์ ํฉ๋๋ค.
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
referenceNode๋ฅผ originalStartNode๋ก ๋ก๋๋ค.
-
referenceNode์ ๋ถ๋ชจ๊ฐ null์ด ์๋๊ณ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋ ๋์: originalEndNode, referenceNode๋ฅผ ๊ทธ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
newNode๋ฅผ ๋ค์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค: referenceNode์ ๋ถ๋ชจ. ๊ทธ๋ฆฌ๊ณ newOffset์ referenceNode์ ์ธ๋ฑ์ค + 1๋ก ์ค์ ํฉ๋๋ค.
referenceNode์ ๋ถ๋ชจ๊ฐ null์ด๋ผ๋ฉด, ํด๋น ๋ ธ๋๋ ๋ฃจํธ์ผ ๊ฒ์ ๋๋ค. ํด๋น ๋ฒ์๋ range์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ๋ ธ๋๋ ๋ค์์ ํฌ๊ด์ ์กฐ์์ผ ๊ฒ์ ๋๋ค: originalEndNode. ๋ฐ๋ผ์ ์ด ์ง์ ์ ๋๋ฌํ ์ ์์์ ๊ฒ์ ๋๋ค.
-
-
range์ ์์์ ๊ณผ ๋์ ์ (newNode, newOffset)์ผ๋ก ์ค์ ํฉ๋๋ค.
-
firstPartiallyContainedChild๊ฐ
CharacterData๋ ธ๋์ด๋ฉด:์ด ๊ฒฝ์ฐ, firstPartiallyContainedChild๋ originalStartNode์ ๋๋ค.
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: originalStartNode.
-
๋ค์ ๋ฐ์ดํฐ, ์ฆ clone์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset๊ณผ originalStartNode์ ๊ธธ์ด โ originalStartOffset์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset, originalStartNode์ ๊ธธ์ด โ originalStartOffset, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ firstPartiallyContainedChild๊ฐ null์ด ์๋๋ฉด:
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: firstPartiallyContainedChild.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
subrange๋ฅผ ์๋ก์ด ๋ผ์ด๋ธ ๋ฒ์๋ก ๋ก๋๋ค. ๊ทธ ์์์ ์ (originalStartNode, originalStartOffset)์ด๊ณ , ๊ทธ ๋์ ์ (firstPartiallyContainedChild, firstPartiallyContainedChild์ ๊ธธ์ด)์ ๋๋ค.
-
subfragment๋ฅผ ๋ค์ ์ถ์ถ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ subrange์ ๋๋ค.
- ๋ง๋ถ์ ๋๋ค: subfragment๋ฅผ clone์.
-
-
๊ฐ contained child(containedChildren์ ์ํจ)์ ๋ํด: ๋ง๋ถ์ ๋๋ค: contained child๋ฅผ fragment์.
-
lastPartiallyContainedChild๊ฐ
CharacterData๋ ธ๋์ด๋ฉด:์ด ๊ฒฝ์ฐ, lastPartiallyContainedChild๋ originalEndNode์ ๋๋ค.
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: originalEndNode.
-
clone์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ. ๋์์ originalEndNode์ด๋ฉฐ, ์ธ์๋ 0๊ณผ originalEndOffset์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ์ํํฉ๋๋ค. ๋์์ originalEndNode์ด๋ฉฐ, ์ธ์๋ 0, originalEndOffset, ๊ทธ๋ฆฌ๊ณ ๋น ๋ฌธ์์ด์ ๋๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ lastPartiallyContainedChild๊ฐ null์ด ์๋๋ฉด:
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: lastPartiallyContainedChild.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
subrange๋ฅผ ์๋ก์ด ๋ผ์ด๋ธ ๋ฒ์๋ก ๋ก๋๋ค. ๊ทธ ์์์ ์ (lastPartiallyContainedChild, 0)์ด๊ณ , ๊ทธ ๋์ ์ (originalEndNode, originalEndOffset)์ ๋๋ค.
-
subfragment๋ฅผ ๋ค์ ์ถ์ถ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ subrange์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: subfragment๋ฅผ clone์.
-
-
fragment๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
extractContents()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์ถ์ถ. ๋์์ this์ ๋๋ค.๋ค์๊ณผ ๊ฐ์ด ๋ด์ฉ์ ๋ณต์ ํฉ๋๋ค. ๋์์ ๋ผ์ด๋ธ ๋ฒ์ range์ ๋๋ค:
-
fragment๋ฅผ ๋ค์ ๋ฌธ์ ์กฐ๊ฐ ์์ฑ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ์ฃผ์ด์ง ๊ฐ์ range์ ์์ ๋ ธ๋์ ๋ ธ๋ ๋ฌธ์์ ๋๋ค.
-
range๊ฐ ์ถ์๋ ์ํ์ด๋ฉด, fragment๋ฅผ ๋ฐํํฉ๋๋ค.
-
originalStartNode, originalStartOffset, originalEndNode, originalEndOffset์ ๊ฐ๊ฐ range์ ์์ ๋ ธ๋, ์์ ์คํ์ , ๋ ๋ ธ๋, ๊ทธ๋ฆฌ๊ณ ๋ ์คํ์ ์ผ๋ก ๋ก๋๋ค.
-
originalStartNode๊ฐ originalEndNode์ด๊ณ ์ด๊ฒ์ด
CharacterData๋ ธ๋์ด๋ฉด:-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: originalStartNode.
-
clone์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset๊ณผ originalEndOffset โ originalStartOffset์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
fragment๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
commonAncestor๋ฅผ ๋ค์ ๊ณตํต ์กฐ์ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ range์ ๋๋ค.
-
firstPartiallyContainedChild๋ฅผ null๋ก ๋ก๋๋ค.
-
originalStartNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋๋ฉด: originalEndNode, firstPartiallyContainedChild๋ฅผ ๋ค์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ค์ ํฉ๋๋ค. ํด๋น ์์์ commonAncestor์ ์์์ด๋ฉฐ, ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ํฌํจํ๋ ๋ฒ์๋ range์ ๋๋ค.
-
lastPartiallyContainedChild๋ฅผ null๋ก ๋ก๋๋ค.
-
originalEndNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋๋ฉด: originalStartNode, lastPartiallyContainedChild๋ฅผ ๋ค์ ๋ง์ง๋ง ์์์ผ๋ก ์ค์ ํฉ๋๋ค. ํด๋น ์์์ commonAncestor์ ์์์ด๋ฉฐ, ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ํฌํจํ๋ ๋ฒ์๋ range์ ๋๋ค.
์ด ๋ณ์ ํ ๋น๋ค์ ์ค์ ๋ก ํญ์ ํ๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ์กฐ๊ฑด์ ์๊ฐํด ๋ด ๋๋ค: originalStartNode๊ฐ ๋ค์์ ํฌ๊ด์ ์กฐ์์ด ์๋ ๊ฒฝ์ฐ: originalEndNode. ๊ทธ๋ฌ๋ฉด originalStartNode ์์ฒด๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ํฌํจํ๋ ๋ฒ์๋ range์ด๋ฉฐ, ๊ทธ ๋ชจ๋ ์กฐ์๋ ๋ค์ ์์์ ์ด๋ฅด๊ธฐ๊น์ง ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค: commonAncestor์ ์์. commonAncestor๋ originalStartNode์ผ ์ ์์ต๋๋ค. ๋ค์์ ํฌ๊ด์ ์กฐ์์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค: originalEndNode. ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋น์ทํฉ๋๋ค. ๋ํ, ๋ ์์์ด ๋ชจ๋ ์ ์๋์ด ์๋ค๋ฉด ์ ๋๋ก ๊ฐ์ ์ ์๋ค๋ ์ ์ ์ ์ํฉ๋๋ค.
-
containedChildren์ ๋ค์ ๋ชจ๋ ์์์ ๋ชฉ๋ก์ผ๋ก ๋ก๋๋ค. ์ด๋ค์ commonAncestor์ ์์์ด๋ฉฐ, ํฌํจํ๋ ๋ฒ์๊ฐ range์ธ ๊ฒ๋ค์ ๋๋ค. ๋์ด ์์๋ ํธ๋ฆฌ ์์์ ๋๋ค.
-
containedChildren์ ๊ตฌ์ฑ์ ์ค ํ๋๋ผ๋ ๋ฌธ์ ์ ํ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
HierarchyRequestError"DOMException.์ฒซ ๋ฒ์งธ ๋๋ ๋ง์ง๋ง์ผ๋ก ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋ ๋ ธ๋๋ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๋ฌธ์ ์ ํ์ ์ ๋๋ก ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฒ์์ ๊ฒฝ๊ณ์ ์ด ๋ ์ ์์ผ๋ฉฐ, ์ด๋ค ๊ฒ์ ์กฐ์๋ ๋ ์ ์์ต๋๋ค.
-
firstPartiallyContainedChild๊ฐ
CharacterData๋ ธ๋์ด๋ฉด:์ด ๊ฒฝ์ฐ, firstPartiallyContainedChild๋ originalStartNode์ ๋๋ค.
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: originalStartNode.
-
๋ค์ ๋ฐ์ดํฐ, ์ฆ clone์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ. ๋์์ originalStartNode์ด๋ฉฐ, ์ธ์๋ originalStartOffset๊ณผ originalStartNode์ ๊ธธ์ด โ originalStartOffset์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
-
๊ทธ๋ ์ง ์๊ณ firstPartiallyContainedChild๊ฐ null์ด ์๋๋ฉด:
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: firstPartiallyContainedChild.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
subrange๋ฅผ ์๋ก์ด ๋ผ์ด๋ธ ๋ฒ์๋ก ๋ก๋๋ค. ๊ทธ ์์์ ์ (originalStartNode, originalStartOffset)์ด๊ณ , ๊ทธ ๋์ ์ (firstPartiallyContainedChild, firstPartiallyContainedChild์ ๊ธธ์ด)์ ๋๋ค.
-
subfragment๋ฅผ ๋ค์ ๋ด์ฉ ๋ณต์ ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ subrange์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: subfragment๋ฅผ clone์.
-
-
๊ฐ contained child(containedChildren์ ์ํจ)์ ๋ํด:
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: contained child. ์ด๋ subtree๋ true๋ก ์ค์ ํฉ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
-
lastPartiallyContainedChild๊ฐ
CharacterData๋ ธ๋์ด๋ฉด:์ด ๊ฒฝ์ฐ, lastPartiallyContainedChild๋ originalEndNode์ ๋๋ค.
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: originalEndNode.
-
clone์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค: ๋ฐ์ดํฐ ๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ. ๋์์ originalEndNode์ด๋ฉฐ, ์ธ์๋ 0๊ณผ originalEndOffset์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
-
๊ทธ๋ ์ง ์๊ณ lastPartiallyContainedChild๊ฐ null์ด ์๋๋ฉด:
-
clone์ ๋ค์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ก๋๋ค: lastPartiallyContainedChild.
-
๋ง๋ถ์ ๋๋ค: clone์ fragment์.
-
subrange๋ฅผ ์๋ก์ด ๋ผ์ด๋ธ ๋ฒ์๋ก ๋ก๋๋ค. ๊ทธ ์์์ ์ (lastPartiallyContainedChild, 0)์ด๊ณ , ๊ทธ ๋์ ์ (originalEndNode, originalEndOffset)์ ๋๋ค.
-
subfragment๋ฅผ ๋ค์ ๋ด์ฉ ๋ณต์ ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ subrange์ ๋๋ค.
-
๋ง๋ถ์ ๋๋ค: subfragment๋ฅผ clone์.
-
-
fragment๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
cloneContents()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ๋ด์ฉ ๋ณต์ . ๋์์ this์ ๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์ฝ์ ํฉ๋๋ค. ์ฝ์ ํ ๋ ธ๋๋ node์ด๋ฉฐ, ์ฝ์ ๋์์ ๋ผ์ด๋ธ ๋ฒ์ range์ ๋๋ค:
-
range์ ์์ ๋ ธ๋๊ฐ
ProcessingInstruction๋๋Comment๋ ธ๋์ด๊ฑฐ๋,Text๋ ธ๋์ด๋ฉด์ ๊ทธ ๋ถ๋ชจ๊ฐ null์ด๊ฑฐ๋, node์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "HierarchyRequestError"DOMException. -
referenceNode๋ฅผ null๋ก ๋ก๋๋ค.
-
range์ ์์ ๋ ธ๋๊ฐ
Text๋ ธ๋์ด๋ฉด, referenceNode๋ฅผ ํด๋นText๋ ธ๋๋ก ์ค์ ํฉ๋๋ค. -
๊ทธ๋ ์ง ์์ผ๋ฉด, referenceNode๋ฅผ ๋ค์ ์์์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด ์์์ range์ ์์ ๋ ธ๋์ ์์์ด๋ฉฐ, ๊ทธ ์ธ๋ฑ์ค๋ range์ ์์ ์คํ์ ๊ณผ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌํ ์์์ด ์์ผ๋ฉด ๊ทธ ์์์ผ๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
parent๋ฅผ range์ ์์ ๋ ธ๋๋ก ๋ก๋๋ค. ์ด๋ referenceNode๊ฐ null์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด referenceNode์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
์ฌ์ ์ฝ์ ์ ํจ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์ node, parent, referenceNode, ๊ทธ๋ฆฌ๊ณ ยซ ยป์ ๋๋ค.
-
range์ ์์ ๋ ธ๋๊ฐ
Text๋ ธ๋์ด๋ฉด, referenceNode๋ฅผ ํด๋น ๋ ธ๋๋ฅผ ๋ถํ ํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ์คํ์ ์ range์ ์์ ์คํ์ ์ ๋๋ค. -
node๊ฐ referenceNode์ด๋ฉด, referenceNode๋ฅผ ๊ทธ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
node์ ๋ถ๋ชจ๊ฐ null์ด ์๋๋ฉด, ์ ๊ฑฐํฉ๋๋ค: node๋ฅผ.
-
newOffset์ parent์ ๊ธธ์ด๋ก ๋ก๋๋ค. ์ด๋ referenceNode๊ฐ null์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด referenceNode์ ์ธ๋ฑ์ค๋ก ๋ก๋๋ค.
-
newOffset์ node์ ๊ธธ์ด๋งํผ ๋๋ฆฝ๋๋ค. ์ด๋ node๊ฐ
DocumentFragment๋ ธ๋์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด 1๋งํผ ๋๋ฆฝ๋๋ค. -
์ฌ์ ์ฝ์ ํฉ๋๋ค: node๋ฅผ parent์, referenceNode ์์.
-
range๊ฐ ์ถ์๋ ์ํ์ด๋ฉด, range์ ๋์ ์ (parent, newOffset)์ผ๋ก ์ค์ ํฉ๋๋ค.
๋ค์
insertNode(node)๋ฉ์๋ ๋จ๊ณ๋ ์ฝ์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ์ฝ์ ํ ๋ ธ๋๋ node์ด๋ฉฐ, ์ฝ์ ๋์์ this์ ๋๋ค.๋ค์
surroundContents(newParent)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๋ค์
Text๊ฐ ์๋ ๋ ธ๋๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํฌํจ๋์ด ์๊ณ , ํฌํจํ๋ ๋ฒ์๊ฐ this์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "InvalidStateError"DOMException. -
newParent๊ฐ
Document,DocumentType, ๋๋DocumentFragment๋ ธ๋์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "InvalidNodeTypeError"DOMException.์ญ์ฌ์ ์ธ ์ด์ ๋ก
CharacterData๋ ธ๋๋ ์ฌ๊ธฐ์ ๊ฒ์ฌํ์ง ์์ผ๋ฉฐ, ๋์ค์ ๋ถ์ ํจ๊ณผ๋ก ์์ธ๋ฅผ ๋์ง๊ฒ ๋ฉ๋๋ค. -
fragment๋ฅผ ๋ค์ ์ถ์ถ์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ this์ ๋๋ค.
-
newParent์ ์์์ด ์์ผ๋ฉด, ๋ชจ๋ ๊ต์ฒดํฉ๋๋ค. ๊ต์ฒดํ ๋ ธ๋๋ null์ด๋ฉฐ, ๋์์ newParent์ ๋๋ค.
-
์ฝ์ ํฉ๋๋ค: newParent๋ฅผ this์.
-
๋ง๋ถ์ ๋๋ค: fragment๋ฅผ newParent์.
-
์ ํํฉ๋๋ค. ๋์์ newParent์ด๋ฉฐ, ์ ํ์ ์ฌ์ฉํ๋ ๋ฒ์๋ this์ ๋๋ค.
๋ค์
cloneRange()๋ฉ์๋ ๋จ๊ณ๋ ์๋ก์ด ๋ผ์ด๋ธ ๋ฒ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฒ์์ ์์์ ๊ณผ ๋์ ์ this์ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.๋ค์
detach()๋ฉ์๋ ๋จ๊ณ๋ ์๋ฌด๊ฒ๋ ํ์ง ์๋ ๊ฒ์ ๋๋ค. ํด๋น ๊ธฐ๋ฅ(Range๊ฐ์ฒด ๋นํ์ฑํ)์ ์ ๊ฑฐ๋์์ง๋ง, ๋ฉ์๋ ์์ฒด๋ ํธํ์ฑ์ ์ํด ์ ์ง๋ฉ๋๋ค.
- position = range .
comparePoint(node, offset) - ์ ์ด ๋ฒ์ ์์ ์์ผ๋ฉด โ1์, ์ ์ด ๋ฒ์ ์์ ์์ผ๋ฉด 0์, ์ ์ด ๋ฒ์ ๋ค์ ์์ผ๋ฉด 1์ ๋ฐํํฉ๋๋ค.
- intersects = range .
intersectsNode(node) - range๊ฐ ๋ค์๊ณผ ๊ต์ฐจํ๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค: node.
๋ค์
isPointInRange(node, offset)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node์ ๋ฃจํธ๊ฐ this์ ๋ฃจํธ์ ๋ค๋ฅด๋ฉด, false๋ฅผ ๋ฐํํฉ๋๋ค.
-
node๊ฐ ๋ฌธ์ ์ ํ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
offset์ด node์ ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด, ๋์ง๋๋ค: "
IndexSizeError"DOMException. -
(node, offset)์ด ๋ค์๋ณด๋ค ์์ ์์ผ๋ฉด: ์์์ , ๋๋ ๋ค์๋ณด๋ค ๋ค์ ์์ผ๋ฉด: ๋์ , ๋ค์์ ๋ฐํํฉ๋๋ค: false.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
comparePoint(node, offset)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node์ ๋ฃจํธ๊ฐ this์ ๋ฃจํธ์ ๋ค๋ฅด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
WrongDocumentError"DOMException. -
node๊ฐ ๋ฌธ์ ์ ํ์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidNodeTypeError"DOMException. -
offset์ด node์ ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด, ๋์ง๋๋ค: "
IndexSizeError"DOMException. -
(node, offset)์ด ๋ค์๋ณด๋ค ์์ ์์ผ๋ฉด: ์์์ , โ1์ ๋ฐํํฉ๋๋ค.
-
(node, offset)์ด ๋ค์๋ณด๋ค ๋ค์ ์์ผ๋ฉด: ๋์ , 1์ ๋ฐํํฉ๋๋ค.
-
0์ ๋ฐํํฉ๋๋ค.
๋ค์
intersectsNode(node)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node์ ๋ฃจํธ๊ฐ this์ ๋ฃจํธ์ ๋ค๋ฅด๋ฉด, false๋ฅผ ๋ฐํํฉ๋๋ค.
-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null์ด๋ฉด, true๋ฅผ ๋ฐํํฉ๋๋ค.
-
offset์ node์ ์ธ๋ฑ์ค๋ก ๋ก๋๋ค.
-
(parent, offset)์ด ๋ค์๋ณด๋ค ์์ ์๊ณ : ๋์ , (parent, offset + 1)์ด ๋ค์๋ณด๋ค ๋ค์ ์์ผ๋ฉด: ์์์ , true๋ฅผ ๋ฐํํฉ๋๋ค.
-
false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์ ๋ฌธ์์ดํ ๋์์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํด์ผ ํฉ๋๋ค:
-
string์ ๋น ๋ฌธ์์ด๋ก ๋ก๋๋ค.
-
๋ค์ this์ ์์ ๋ ธ๋๊ฐ this์ ๋ ๋ ธ๋์ด๊ณ , ์ด๊ฒ์ด
Text๋ ธ๋์ด๋ฉด, ๋ค์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ํด๋นText๋ ธ๋์ ๋ฐ์ดํฐ ์ค ๋ค์ this์ ์์ ์คํ์ ์์ ์์ํ๊ณ ๋ค์ this์ ๋ ์คํ์ ์์ ๋๋๋ ๋ถ๋ถ ๋ฌธ์์ด์ ๋๋ค. -
๋ค์ this์ ์์ ๋ ธ๋๊ฐ
Text๋ ธ๋์ด๋ฉด, ๋ค์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ง๋ถ์ ๋๋ค. ํด๋น ๋ ธ๋์ ๋ฐ์ดํฐ ์ค this์ ์์ ์คํ์ ๋ถํฐ ๋๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ด๋ฉฐ, ๋ง๋ถ์ผ ๋์์ string์ ๋๋ค. -
๋ค์ ์ฐ๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ถ์ ๋๋ค. ์ฐ๊ฒฐํ ๊ฐ์ ๋ฐ์ดํฐ์ด๋ฉฐ, ๋ค์ ๋ชจ๋
Text๋ ธ๋์ ๋ฐ์ดํฐ์ ๋๋ค. ํด๋น ๋ ธ๋๋ ํฌํจ๋์ด ์์ผ๋ฉฐ, ํฌํจํ๋ ๋ฒ์๋ this์ ๋๋ค. ์ฐ๊ฒฐ ์์๋ ํธ๋ฆฌ ์์์ด๋ฉฐ, ๋ง๋ถ์ผ ๋์์ string์ ๋๋ค. -
๋ค์ this์ ๋ ๋ ธ๋๊ฐ
Text๋ ธ๋์ด๋ฉด, ํด๋น ๋ ธ๋์ ๋ฐ์ดํฐ ์ค ์์๋ถํฐ ๋ค์ this์ ๋ ์คํ์ ๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ string์ ๋ง๋ถ์ ๋๋ค. -
string์ ๋ฐํํฉ๋๋ค.
๋ค์
createContextualFragment(),getClientRects(), ๊ทธ๋ฆฌ๊ณgetBoundingClientRect()๋ฉ์๋๋ ๋ค๋ฅธ ๋ช ์ธ์ ์ ์๋์ด ์์ต๋๋ค. [DOM-Parsing] [CSSOM-VIEW]6. ํธ๋๋ฒ์ค(Traversal)
NodeIterator๋ฐTreeWalker๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ํธ๋ฆฌ๋ฅผ ํํฐ๋งํ๊ณ ์ํํ ์ ์์ต๋๋ค.๊ฐ
NodeIterator๋ฐTreeWalker๊ฐ์ฒด์๋ ์ฌ๊ท ํธ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ถ๋ฆฌ์ธ ๊ฐ์ธ ํ์ฑ ์ํ ์ฌ๋ถ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์ด ๊ฐ์ ์ด๊ธฐ์๋ false์ ๋๋ค.๊ฐ
NodeIterator๋ฐTreeWalker๊ฐ์ฒด์๋ ๋ค์ ํญ๋ชฉ๋ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ๋ฃจํธ(๋ ธ๋), whatToShow(๋นํธ๋ง์คํฌ), ๊ทธ๋ฆฌ๊ณ ํํฐ(์ฝ๋ฐฑ)์ ๋๋ค.ํํฐ๋งํ๋ ค๋ฉด, ๋ ธ๋ node๋ฅผ ๋ค์ ์ค ํ๋์ธ
NodeIterator๋๋TreeWalker๊ฐ์ฒด traverser ๋ด์์:-
traverser์ ํ์ฑ ์ํ ์ฌ๋ถ๊ฐ true์ด๋ฉด "
InvalidStateError"DOMException์ ๋์ง๋๋ค. -
n์ node์
nodeType์์ฑ ๊ฐ โ 1๋ก ์ค์ ํฉ๋๋ค. -
traverser์ n๋ฒ์งธ ๋นํธ(0์ ์ตํ์ ๋นํธ)๊ฐ whatToShow์์ ์ค์ ๋์ง ์์์ผ๋ฉด
FILTER_SKIP์ ๋ฐํํฉ๋๋ค. -
traverser์ ํํฐ๊ฐ null์ด๋ฉด
FILTER_ACCEPT๋ฅผ ๋ฐํํฉ๋๋ค. -
traverser์ ํ์ฑ ์ํ ์ฌ๋ถ๋ฅผ true๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ์ฌ์ฉ์ ๊ฐ์ฒด์ ์์ ์ ํธ์ถํ ๋ฐํ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ traverser์ ํํฐ, "
acceptNode", ๊ทธ๋ฆฌ๊ณ ยซ node ยป๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ธ๊ฐ ๋ฐ์ํ๋ฉด traverser์ ํ์ฑ ์ํ ์ฌ๋ถ๋ฅผ false๋ก ์ค์ ํ๊ณ ์์ธ๋ฅผ ๋ค์ ๋์ง๋๋ค. -
traverser์ ํ์ฑ ์ํ ์ฌ๋ถ๋ฅผ false๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ๋ฐํํฉ๋๋ค.
6.1. ์ธํฐํ์ด์ค
NodeIterator[
Exposed =Window ]interface { [NodeIterator SameObject ]readonly attribute Node root ;readonly attribute Node referenceNode ;readonly attribute boolean pointerBeforeReferenceNode ;readonly attribute unsigned long whatToShow ;readonly attribute NodeFilter ?filter ;Node ?nextNode ();Node ?previousNode ();undefined detach (); };NodeIterator๊ฐ์ฒด๋createNodeIterator()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ฉ์๋๋Document๊ฐ์ฒด์์ ์ ๊ณต๋ฉ๋๋ค.๊ฐ
NodeIterator๊ฐ์ฒด์๋ ์ฐ๊ฒฐ๋ ๋ฐ๋ณต์ ์ปฌ๋ ์ ์ด ์์ผ๋ฉฐ, ์ด๋NodeIterator๊ฐ์ฒด์ ๋ฃจํธ๋ฅผ ๋ฃจํธ๋ก ํ๋ ์ปฌ๋ ์ ์ผ๋ก, ํํฐ๊ฐ ๋ชจ๋ ๋ ธ๋์ ์ผ์นํฉ๋๋ค.๋ ธ๋ ํฌ์ธํฐ๋ ๋ ธ๋(๋ ธ๋)์ ์์ชฝ ํฌ์ธํฐ(๋ถ๋ฆฌ์ธ)๋ก ๊ตฌ์ฑ๋ ํํ์ ๋๋ค.
๊ฐ
NodeIterator๊ฐ์ฒด์๋ ์ฐ๊ฒฐ๋ ์ฐธ์กฐ( ๋ ธ๋ ํฌ์ธํฐ)์ ํ๋ณด ์ฐธ์กฐ(null ๋๋ ๋ ธ๋ ํฌ์ธํฐ์ด๋ฉฐ, ์ด๊ธฐ๊ฐ์ null)๋ ์์ต๋๋ค.์์ ์ธ๊ธํ๋ฏ์ด
NodeIterator๊ฐ์ฒด์๋ ํ์ฑ ์ํ ์ฌ๋ถ, ๋ฃจํธ, whatToShow, ๊ทธ๋ฆฌ๊ณ ํํฐ๋ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.NodeIterator๊ฐ์ฒด nodeIterator์ ๋ ธ๋ toBeRemovedNode๊ฐ ์ฃผ์ด์ก์ ๋NodeIterator์ฌ์ ์ ๊ฑฐ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
nodeIterator์ ์ฐธ์กฐ๋ฅผ nodeIterator์ ์ฐธ์กฐ, nodeIterator, ๊ทธ๋ฆฌ๊ณ toBeRemovedNode๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ํฌ์ธํฐ๋ฅผ ์กฐ์ ํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
nodeIterator์ ํ๋ณด ์ฐธ์กฐ๊ฐ null์ด ์๋๋ฉด nodeIterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ nodeIterator์ ํ๋ณด ์ฐธ์กฐ, nodeIterator, toBeRemovedNode๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ํฌ์ธํฐ๋ฅผ ์กฐ์ ํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
๋ ธ๋ ํฌ์ธํฐ nodePointer,
NodeIterator๊ฐ์ฒด nodeIterator, ๊ทธ๋ฆฌ๊ณ ๋ ธ๋ toBeRemovedNode๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ธ๋ ํฌ์ธํฐ๋ฅผ ์กฐ์ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค. ์ด ๋จ๊ณ๋ ๋ ธ๋ ํฌ์ธํฐ๋ฅผ ๋ฐํํฉ๋๋ค.-
toBeRemovedNode๊ฐ nodePointer์ ๋ ธ๋์ ํฌ๊ด์ ์กฐ์์ด ์๋๊ฑฐ๋, toBeRemovedNode๊ฐ nodeIterator์ ๋ฃจํธ์ ํฌ๊ด์ ์กฐ์์ด๋ฉด nodePointer๋ฅผ ๋ฐํํฉ๋๋ค.
-
nodePointer์ ์์ชฝ ํฌ์ธํฐ๊ฐ true์ด๋ฉด:
-
next๋ฅผ toBeRemovedNode์ ์ฒซ ๋ฒ์งธ ํ์ ๋ ธ๋ ์ค nodeIterator์ ๋ฃจํธ์ ํฌ๊ด์ ์์์ด๋ฉด์ toBeRemovedNode์ ํฌ๊ด์ ์์์ด ์๋ ๋ ธ๋๋ก ์ค์ ํฉ๋๋ค. ํด๋น ๋ ธ๋๊ฐ ์์ผ๋ฉด ์ฌ์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด null๋ก ์ค์ ํฉ๋๋ค.
-
next๊ฐ null์ด ์๋๋ฉด (next, true)๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
toBeRemovedNode์ ์ด์ ํ์ ๋ ธ๋๊ฐ null์ด๋ฉด newNode๋ฅผ toBeRemovedNode์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด toBeRemovedNode์ ์ด์ ํ์ ๋ ธ๋์ ํฌ๊ด์ ์์ ์ค ํธ๋ฆฌ ์์์์ ๋ง์ง๋ง์ ๋ํ๋๋ ๋ ธ๋๋ก ์ค์ ํฉ๋๋ค.
-
(newNode, false)๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
referenceNodegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์ฐธ์กฐ์ ๋ ธ๋.๋ค์
pointerBeforeReferenceNodegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์ฐธ์กฐ์ ํฌ์ธํฐ๊ฐ ์์ ์๋์ง ์ฌ๋ถ.๋ค์
whatToShowgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ whatToShow.๋ค์๊ณผ ๊ฐ์ด ์ํํฉ๋๋ค. ์ฃผ์ด์ง ๊ฐ์
NodeIterator๊ฐ์ฒด iterator์ "next" ๋๋ "previous"์ธ type์ ๋๋ค:-
iterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ iterator์ ์ฐธ์กฐ๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ null๋ก ๋ก๋๋ค.
-
true์ธ ๋์:
-
type์ด "
next"์ด๋ฉด:-
iterator์ ํ๋ณด ์ฐธ์กฐ์ ํฌ์ธํฐ๊ฐ ์์ ์๋์ง ์ฌ๋ถ๊ฐ false์ด๋ฉด:
-
following์ ๋ค์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ก ๋ก๋๋ค. ์ด ๋ ธ๋๋ ๋ค์์ ํํํฉ๋๋ค: iterator์ ํ๋ณด ์ฐธ์กฐ์ ๋ ธ๋. ์ฐพ๋ ๋ฒ์๋ iterator์ ๋ฐ๋ณต์ ์ปฌ๋ ์ ์ ๋๋ค. ๊ทธ๋ฌํ ํด๋น ๋ ธ๋๊ฐ ์์ผ๋ฉด, ๋ฐ๋ณต์ ์ค๋จํฉ๋๋ค.
-
iterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ (following, false)๋ก ์ค์ ํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, iterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ (iterator์ ํ๋ณด ์ฐธ์กฐ์ ๋ ธ๋, false)๋ก ์ค์ ํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด:
-
iterator์ ํ๋ณด ์ฐธ์กฐ์ ํฌ์ธํฐ๊ฐ ์์ ์๋์ง ์ฌ๋ถ๊ฐ true์ด๋ฉด:
-
preceding์ ๋ค์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ก ๋ก๋๋ค. ์ด ๋ ธ๋๋ ๋ค์์ ์ ํํฉ๋๋ค: iterator์ ํ๋ณด ์ฐธ์กฐ์ ๋ ธ๋. ์ฐพ๋ ๋ฒ์๋ iterator์ ๋ฐ๋ณต์ ์ปฌ๋ ์ ์ ๋๋ค. ๊ทธ๋ฌํ ํด๋น ๋ ธ๋๊ฐ ์์ผ๋ฉด, ๋ฐ๋ณต์ ์ค๋จํฉ๋๋ค.
-
iterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ (preceding, true)๋ก ์ค์ ํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์์ผ๋ฉด, iterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ (iterator์ ํ๋ณด ์ฐธ์กฐ์ ๋ ธ๋, true)๋ก ์ค์ ํฉ๋๋ค.
-
-
node๋ฅผ iterator์ ํ๋ณด ์ฐธ์กฐ์ ๋ ธ๋๋ก ๋ก๋๋ค.
-
filterResult๋ฅผ ๋ค์ ํํฐ๋ง์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ node์ด๋ฉฐ, ์ฌ์ฉํ๋ ๋ฐ๋ณต์๋ iterator์ ๋๋ค. ์ด ๊ณผ์ ์์ ์์ธ๋ฅผ ๋์ง๋ฉด, iterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ null๋ก ์ค์ ํ๊ณ ํด๋น ์์ธ๋ฅผ ๋ค์ ๋์ง๋๋ค.
-
filterResult๊ฐ
FILTER_ACCEPT์ด๋ฉด:-
iterator์ ์ฐธ์กฐ๋ฅผ iterator์ ํ๋ณด ์ฐธ์กฐ๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ node๋ก ์ค์ ํฉ๋๋ค.
-
-
-
iterator์ ํ๋ณด ์ฐธ์กฐ๋ฅผ null๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
nextNode()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์ํ. ์ธ์๋ this์ "next"์ ๋๋ค.๋ค์
previousNode()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: ์ํ. ์ธ์๋ this์ "previous"์ ๋๋ค.๋ค์
detach()๋ฉ์๋ ๋จ๊ณ๋ ์๋ฌด๊ฒ๋ ํ์ง ์๋ ๊ฒ์ ๋๋ค. ํด๋น ๊ธฐ๋ฅ(NodeIterator๊ฐ์ฒด ๋นํ์ฑํ)์ ์ ๊ฑฐ๋์์ง๋ง, ๋ฉ์๋ ์์ฒด๋ ํธํ์ฑ์ ์ํด ์ ์ง๋ฉ๋๋ค.6.2. ์ธํฐํ์ด์ค
TreeWalker[
Exposed =Window ]interface { [TreeWalker SameObject ]readonly attribute Node root ;readonly attribute unsigned long whatToShow ;readonly attribute NodeFilter ?filter ;attribute Node currentNode ;Node ?parentNode ();Node ?firstChild ();Node ?lastChild ();Node ?previousSibling ();Node ?nextSibling ();Node ?previousNode ();Node ?nextNode (); };TreeWalker๊ฐ์ฒด๋createTreeWalker()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌDocument๊ฐ์ฒด์์ ์์ฑํ ์ ์์ต๋๋ค.๊ฐ
TreeWalker๊ฐ์ฒด์๋ ์ฐ๊ฒฐ๋ ํ์ฌ ๋ ธ๋(๋ ธ๋)๊ฐ ์์ต๋๋ค.์์ ์ธ๊ธํ๋ฏ์ด
TreeWalker๊ฐ์ฒด์๋ ๋ฃจํธ, whatToShow, ๊ทธ๋ฆฌ๊ณ ํํฐ๋ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.๋ค์
whatToShowgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ whatToShow.๋ค์
currentNodegetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ํ์ฌ ๋ ธ๋.๋ค์
currentNodesetter ๋จ๊ณ๋ this์ ํ์ฌ ๋ ธ๋๋ฅผ ์ฃผ์ด์ง ๊ฐ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค.
๋ค์
parentNode()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๋ฅผ this์ ํ์ฌ ๋ ธ๋๋ก ๋ก๋๋ค.
-
node๊ฐ null์ด ์๋๊ณ this์ ๋ฃจํธ๊ฐ ์๋ ๋์:
-
node๋ฅผ node์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
node๊ฐ null์ด ์๋๊ณ ํํฐ๋ง(๋์: node, ์ํํ ๊ฐ์ฒด: this)์ ๋ฐํ๊ฐ์ด
FILTER_ACCEPT์ด๋ฉด, this์ ํ์ฌ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํ๊ณ node๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
null์ ๋ฐํํฉ๋๋ค.
์์ ์ํ๋ฅผ ์ํํ๋ ค๋ฉด, ์ฃผ์ด์ง
TreeWalker๊ฐ์ฒด walker์ "first" ๋๋ "last"์ธ type์ ๋ํด:-
node๋ฅผ walker์ ํ์ฌ ๋ ธ๋๋ก ๋ก๋๋ค.
-
node๋ฅผ node์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ค์ ํฉ๋๋ค. ๋จ, type์ด "
first"์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด node์ ๋ง์ง๋ง ์์์ผ๋ก ์ค์ ํฉ๋๋ค. -
node๊ฐ null์ด ์๋ ๋์:
-
result๋ฅผ ๋ค์ ํํฐ๋ง์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ node์ด๋ฉฐ, ์ํํ ๊ฐ์ฒด๋ walker์ ๋๋ค.
-
result๊ฐ
FILTER_ACCEPT์ด๋ฉด, walker์ ํ์ฌ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํ๊ณ node๋ฅผ ๋ฐํํฉ๋๋ค. -
result๊ฐ
FILTER_SKIP์ด๋ฉด:-
child๋ฅผ node์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ๋ก๋๋ค. ๋จ, type์ด "
first"์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด node์ ๋ง์ง๋ง ์์์ผ๋ก ๋ก๋๋ค. -
child๊ฐ null์ด ์๋๋ฉด, node๋ฅผ child๋ก ์ค์ ํ๊ณ ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๋๋ค.
-
-
node๊ฐ null์ด ์๋ ๋์:
-
sibling์ node์ ๋ค์ ํ์ ๋ก ๋ก๋๋ค. ๋จ, type์ด "
first"์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด node์ ์ด์ ํ์ ๋ก ๋ก๋๋ค. -
sibling์ด null์ด ์๋๋ฉด, node๋ฅผ sibling์ผ๋ก ์ค์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐ๋ณต์ ์ค๋จํฉ๋๋ค.
-
parent๋ฅผ node์ ๋ถ๋ชจ๋ก ๋ก๋๋ค.
-
parent๊ฐ null, walker์ ๋ฃจํธ, ๋๋ walker์ ํ์ฌ ๋ ธ๋์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
node๋ฅผ parent๋ก ์ค์ ํฉ๋๋ค.
-
-
-
null์ ๋ฐํํฉ๋๋ค.
๋ค์
firstChild()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ ์ํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ์ธ์๋ this์ "first"์ ๋๋ค.๋ค์
lastChild()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ ์ํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ์ธ์๋ this์ "last"์ ๋๋ค.ํ์ ์ํ๋ฅผ ์ํํ๋ ค๋ฉด, ์ฃผ์ด์ง
TreeWalker๊ฐ์ฒด walker์ "next" ๋๋ "previous"์ธ type์ ๋ํด:-
node๋ฅผ walker์ ํ์ฌ ๋ ธ๋๋ก ๋ก๋๋ค.
-
node๊ฐ ๋ฃจํธ์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
true์ธ ๋์:
-
sibling์ node์ ๋ค์ ํ์ ๋ก ๋ก๋๋ค. ๋จ, type์ด "
next"์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด node์ ์ด์ ํ์ ๋ก ๋ก๋๋ค. -
sibling์ด null์ด ์๋ ๋์:
-
node๋ฅผ sibling์ผ๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ๋ค์ ํํฐ๋ง์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ node์ด๋ฉฐ, ์ํํ ๊ฐ์ฒด๋ walker์ ๋๋ค.
-
result๊ฐ
FILTER_ACCEPT์ด๋ฉด, walker์ ํ์ฌ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํ๊ณ node๋ฅผ ๋ฐํํฉ๋๋ค. -
sibling์ node์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ค์ ํฉ๋๋ค. ๋จ, type์ด "
next"์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด node์ ๋ง์ง๋ง ์์์ผ๋ก ์ค์ ํฉ๋๋ค. -
result๊ฐ
FILTER_REJECT์ด๊ฑฐ๋ sibling์ด null์ด๋ฉด, sibling์ node์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค. ๋จ, type์ ๊ฐ์ด "next"์ธ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด node์ ์ด์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
-
node๋ฅผ node์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
node๊ฐ null์ด๊ฑฐ๋ walker์ ๋ฃจํธ์ด๋ฉด, ๋ค์์ ๋ฐํํฉ๋๋ค: null.
-
๋ค์ ํํฐ๋ง์ ๋ฐํ๊ฐ(๋์: node, ์ํํ ๊ฐ์ฒด: walker)์ด
FILTER_ACCEPT์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
๋ค์
nextSibling()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ ์ํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ์ธ์๋ this์ "next"์ ๋๋ค.๋ค์
previousSibling()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ ์ํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ์ธ์๋ this์ "previous"์ ๋๋ค.๋ค์
previousNode()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๋ฅผ this์ ํ์ฌ ๋ ธ๋๋ก ๋ก๋๋ค.
-
node๊ฐ this์ ๋ฃจํธ๊ฐ ์๋ ๋์:
-
sibling์ node์ ์ด์ ํ์ ๋ก ๋ก๋๋ค.
-
sibling์ด null์ด ์๋ ๋์:
-
node๋ฅผ sibling์ผ๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ๋ค์ ํํฐ๋ง์ ๊ฒฐ๊ณผ๋ก ๋ก๋๋ค. ๋์์ node์ด๋ฉฐ, ์ํํ ๊ฐ์ฒด๋ this์ ๋๋ค.
-
result๊ฐ
FILTER_REJECT๊ฐ ์๋๊ณ node์ ์์์ด ์๋ ๋์:-
node๋ฅผ node์ ๋ง์ง๋ง ์์์ผ๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ๋ค์ ํํฐ๋ง์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ๋์์ node์ด๋ฉฐ, ์ํํ ๊ฐ์ฒด๋ this์ ๋๋ค.
-
-
result๊ฐ
FILTER_ACCEPT์ด๋ฉด, this์ ํ์ฌ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํ๊ณ node๋ฅผ ๋ฐํํฉ๋๋ค. -
sibling์ node์ ์ด์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
-
node๊ฐ this์ ๋ฃจํธ์ด๊ฑฐ๋ node์ ๋ถ๋ชจ๊ฐ null์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
node๋ฅผ node์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
๋ค์ ํํฐ๋ง์ ๋ฐํ๊ฐ(๋์: node, ์ํํ ๊ฐ์ฒด: this)์ด
FILTER_ACCEPT์ด๋ฉด, this์ ํ์ฌ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํ๊ณ node๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
null์ ๋ฐํํฉ๋๋ค.
๋ค์
nextNode()๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
node๋ฅผ this์ ํ์ฌ ๋ ธ๋๋ก ๋ก๋๋ค.
-
result๋ฅผ
FILTER_ACCEPT๋ก ๋ก๋๋ค. -
true์ธ ๋์:
-
result๊ฐ
FILTER_REJECT๊ฐ ์๋๊ณ node์ ์์์ด ์๋ ๋์:-
node๋ฅผ ์์ ์ ์ฒซ ๋ฒ์งธ ์์์ผ๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ๋ค์ ํํฐ๋ง์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ๋์์ node์ด๋ฉฐ, ์ํํ ๊ฐ์ฒด๋ this์ ๋๋ค.
-
result๊ฐ
FILTER_ACCEPT์ด๋ฉด, this์ ํ์ฌ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํ๊ณ node๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
sibling์ null๋ก ๋ก๋๋ค.
-
temporary๋ฅผ node๋ก ๋ก๋๋ค.
-
temporary๊ฐ null์ด ์๋ ๋์:
-
sibling์ temporary์ ๋ค์ ํ์ ๋ก ์ค์ ํฉ๋๋ค.
-
sibling์ด null์ด ์๋๋ฉด, ๋ฐ๋ณต์ ์ค๋จํฉ๋๋ค.
-
temporary๋ฅผ temporary์ ๋ถ๋ชจ๋ก ์ค์ ํฉ๋๋ค.
-
sibling์ด null์ด๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
node๋ฅผ sibling์ผ๋ก ์ค์ ํฉ๋๋ค.
-
result๋ฅผ ๋ค์ ํํฐ๋ง์ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค. ๋์์ node์ด๋ฉฐ, ์ํํ ๊ฐ์ฒด๋ this์ ๋๋ค.
-
result๊ฐ
FILTER_ACCEPT์ด๋ฉด, this์ ํ์ฌ ๋ ธ๋๋ฅผ node๋ก ์ค์ ํ๊ณ node๋ฅผ ๋ฐํํฉ๋๋ค.
-
6.3. ์ธํฐํ์ด์ค
NodeFilter[
Exposed =Window ]callback interface { // Constants for acceptNode()NodeFilter const unsigned short FILTER_ACCEPT = 1;const unsigned short FILTER_REJECT = 2;const unsigned short FILTER_SKIP = 3; // Constants for whatToShowconst unsigned long SHOW_ALL = 0xFFFFFFFF;const unsigned long SHOW_ELEMENT = 0x1;const unsigned long SHOW_ATTRIBUTE = 0x2;const unsigned long SHOW_TEXT = 0x4;const unsigned long SHOW_CDATA_SECTION = 0x8;const unsigned long = 0x10; // legacySHOW_ENTITY_REFERENCE const unsigned long = 0x20; // legacySHOW_ENTITY const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;const unsigned long SHOW_COMMENT = 0x80;const unsigned long SHOW_DOCUMENT = 0x100;const unsigned long SHOW_DOCUMENT_TYPE = 0x200;const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;const unsigned long = 0x800; // legacySHOW_NOTATION unsigned short (acceptNode Node ); };node NodeFilter๊ฐ์ฒด๋ ํํฐ๋ก์NodeIterator๋ฐTreeWalker๊ฐ์ฒด์ ์ฌ์ฉํ ์ ์๊ณ , whatToShow ๋นํธ๋ง์คํฌ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.NodeFilter๊ฐ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ก ๊ตฌํ๋ฉ๋๋ค.์ด ์์๋ค์ filter(ํํฐ) ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค:
FILTER_ACCEPT(1);FILTER_REJECT(2);FILTER_SKIP(3);
์ด ์์๋ค์ whatToShow์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
SHOW_ALL(4294967295, 16์ง์๋ก FFFFFFFF);SHOW_ELEMENT(1);SHOW_ATTRIBUTE(2);SHOW_TEXT(4);SHOW_CDATA_SECTION(8);SHOW_PROCESSING_INSTRUCTION(64, 16์ง์๋ก 40);SHOW_COMMENT(128, 16์ง์๋ก 80);SHOW_DOCUMENT(256, 16์ง์๋ก 100);SHOW_DOCUMENT_TYPE(512, 16์ง์๋ก 200);SHOW_DOCUMENT_FRAGMENT(1024, 16์ง์๋ก 400);
7. ์งํฉ(Sets)
์,
DOMTokenList๋ผ๋ ์ด๋ฆ์ ์ ๊ฐ์ค๋ฌ์ด ๋ ๊ฑฐ์ ์ค๋ฅ์ ๋๋ค.7.1. ์ธํฐํ์ด์ค
DOMTokenList[
Exposed =Window ]interface {DOMTokenList readonly attribute unsigned long length ;getter DOMString ?item (unsigned long );index boolean contains (DOMString ); [token CEReactions ]undefined add (DOMString ...); [tokens CEReactions ]undefined remove (DOMString ...); [tokens CEReactions ]boolean toggle (DOMString ,token optional boolean ); [force CEReactions ]boolean replace (DOMString ,token DOMString );newToken boolean supports (DOMString ); [token CEReactions ]stringifier attribute DOMString value ;iterable <DOMString >; };ํ๋์
DOMTokenList๊ฐ์ฒด์๋ ์ฐ๊ฒฐ๋ ํ ํฐ ์งํฉ(์งํฉ)์ด ์์ผ๋ฉฐ, ์ด๋ ์ด๊ธฐ์๋ ๋น์ด ์์ต๋๋ค.ํ๋์
DOMTokenList๊ฐ์ฒด์๋ ์ฐ๊ฒฐ๋ ์์ (์์)์ ์์ฑ ์ด๋ฆ(์์ฑ์ ๋ก์ปฌ ์ด๋ฆ)๋ ์์ต๋๋ค.๋ช ์ธ๋
DOMTokenList์ ์์์ ์์ฑ ์ด๋ฆ์ ๋ํ ์ง์๋๋ ํ ํฐ์ ์ ์ํ ์ ์์ต๋๋ค.DOMTokenList๊ฐ์ฒด set์ ๊ฒ์ฆ ๋จ๊ณ๋ ์ฃผ์ด์ง token์ ๋ํด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
set์ ์์์ ์์ฑ ์ด๋ฆ์ ์ง์๋๋ ํ ํฐ์ด ์ ์๋์ด ์์ง ์์ผ๋ฉด
TypeError๋ฅผ ๋์ง๋๋ค. -
lowercaseToken์ token์ ASCII ์๋ฌธ์๋ก ๋ณํํ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
lowercaseToken์ด set์ ์์์ ์์ฑ ์ด๋ฆ์ ์ง์๋๋ ํ ํฐ์ ์กด์ฌํ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.
-
false๋ฅผ ๋ฐํํฉ๋๋ค.
DOMTokenList๊ฐ์ฒด set์ ๊ฐฑ์ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
null, set์ ์์ฑ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ set์ ์์๊ฐ ์ฃผ์ด์ก์ ๋ ๋ค์์คํ์ด์ค์ ๋ก์ปฌ ์ด๋ฆ์ผ๋ก ์์ฑ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๊ฐ null์ด๊ณ set์ ํ ํฐ ์งํฉ์ด ๋น์ด ์์ผ๋ฉด ๋ฐํํฉ๋๋ค.
-
set์ ์์, set์ ์์ฑ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ set์ ํ ํฐ ์งํฉ์ ๋ํด ์์๊ฐ ์๋ ์งํฉ ์ง๋ ฌํ๊ธฐ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ก์ ๋ ์์ฑ ๊ฐ์ ์ค์ ํฉ๋๋ค.
DOMTokenList๊ฐ์ฒด set์ ์ง๋ ฌํ ๋จ๊ณ์์๋ set์ ์์์ set์ ์์ฑ ์ด๋ฆ์ด ์ฃผ์ด์ก์ ๋ ์์ฑ ๊ฐ์ ๊ฐ์ ธ์ค๋ ์์ ์ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
DOMTokenList๊ฐ์ฒด set์๋ set์ ์์์ ๋ํ ๋ค์ ์์ฑ ๋ณ๊ฒฝ ๋จ๊ณ๊ฐ ์์ต๋๋ค.-
localName์ด set์ ์์ฑ ์ด๋ฆ์ด๊ณ , namespace๊ฐ null์ด๊ณ value๊ฐ null์ด๋ฉด set์ ํ ํฐ ์งํฉ์ ๋น์๋๋ค.
-
๊ทธ๋ ์ง ์๊ณ localName์ด set์ ์์ฑ ์ด๋ฆ์ด๊ณ namespace๊ฐ null์ด๋ฉด set์ ํ ํฐ ์งํฉ์ value๋ฅผ ํ์ฑํ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
DOMTokenList๊ฐ์ฒด set์ด ์์ฑ๋ ๋:-
element๋ฅผ set์ ์์๋ก ์ค์ ํฉ๋๋ค.
-
attributeName์ set์ ์์ฑ ์ด๋ฆ์ผ๋ก ์ค์ ํฉ๋๋ค.
-
value๋ฅผ element์ attributeName์ด ์ฃผ์ด์ก์ ๋ ์์ฑ ๊ฐ์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ก ์ค์ ํฉ๋๋ค.
-
element, attributeName, value, value, null์ ๋ํด ์์ฑ ๋ณ๊ฒฝ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
tokenlist .length-
ํ ํฐ์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
tokenlist .item(index)tokenlist[index]-
์ธ๋ฑ์ค๊ฐ index์ธ ํ ํฐ์ ๋ฐํํฉ๋๋ค.
tokenlist .contains(token)-
token์ด ์กด์ฌํ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
tokenlist . add(tokensโฆ)-
์ ๋ฌ๋ ๋ชจ๋ ์ธ์๋ฅผ ์ถ๊ฐํ๋, ์ด๋ฏธ ์กด์ฌํ๋ ์ธ์๋ ์ ์ธํฉ๋๋ค.
์ธ์ ์ค ํ๋๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด "
SyntaxError"DOMException์ ๋์ง๋๋ค.์ธ์ ์ค ํ๋์ ASCII ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด "
InvalidCharacterError"DOMException์ ๋์ง๋๋ค. tokenlist . remove(tokensโฆ)-
์ ๋ฌ๋ ์ธ์๊ฐ ์กด์ฌํ๋ฉด ์ ๊ฑฐํฉ๋๋ค.
์ธ์ ์ค ํ๋๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด "
SyntaxError"DOMException์ ๋์ง๋๋ค.์ธ์ ์ค ํ๋์ ASCII ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด "
InvalidCharacterError"DOMException์ ๋์ง๋๋ค. tokenlist . toggle(token [, force])-
force๊ฐ ์ฃผ์ด์ง์ง ์์ผ๋ฉด token์ "ํ ๊ธ"ํ์ฌ, ์กด์ฌํ๋ฉด ์ ๊ฑฐํ๊ณ ์กด์ฌํ์ง ์์ผ๋ฉด ์ถ๊ฐํฉ๋๋ค. force๊ฐ true์ด๋ฉด token์ ์ถ๊ฐํฉ๋๋ค. (์ด๋
add()์ ๊ฐ์ต๋๋ค.) force๊ฐ false์ด๋ฉด token์ ์ ๊ฑฐํฉ๋๋ค. (์ด๋remove()์ ๊ฐ์ต๋๋ค.)ํ์ฌ token์ด ์กด์ฌํ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
token์ด ๋น์ด ์์ผ๋ฉด "
SyntaxError"DOMException์ ๋์ง๋๋ค.token์ ๊ณต๋ฐฑ์ด ํฌํจ๋์ด ์์ผ๋ฉด "
InvalidCharacterError"DOMException์ ๋์ง๋๋ค. tokenlist . replace(token, newToken)-
token์ newToken์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
token์ด newToken์ผ๋ก ๊ต์ฒด๋์์ผ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
์ธ์ ์ค ํ๋๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด "
SyntaxError"DOMException์ ๋์ง๋๋ค.์ธ์ ์ค ํ๋์ ASCII ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด "
InvalidCharacterError"DOMException์ ๋์ง๋๋ค. tokenlist . supports(token)-
token์ด ์ฐ๊ฒฐ๋ ์์ฑ์ ์ง์๋๋ ํ ํฐ์ ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
์ฐ๊ฒฐ๋ ์์ฑ์ ์ง์๋๋ ํ ํฐ์ด ์ ์๋์ด ์์ง ์์ผ๋ฉด
TypeError๋ฅผ ๋์ง๋๋ค. tokenlist .value-
์ฐ๊ฒฐ๋ ์งํฉ์ ๋ฌธ์์ด๋ก ๋ฐํํฉ๋๋ค.
์ค์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ์์ฑ์ ๋ณ๊ฒฝํฉ๋๋ค.
๋ค์
lengthgetter ๋จ๊ณ๋ ๋ค์์ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ํ ํฐ ์งํฉ์ ํฌ๊ธฐ.๊ฐ์ฒด์ ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๋ ๋ค์ ๋ฒ์์ ์ซ์์ ๋๋ค: 0๋ถํฐ ๊ฐ์ฒด์ ํ ํฐ ์งํฉ์ ํฌ๊ธฐ โ 1๊น์ง. ๋จ, ํ ํฐ ์งํฉ์ด ๋น์ด ์์ผ๋ฉด, ์ด ๊ฒฝ์ฐ์๋ ์ง์๋๋ ์์ฑ ์ธ๋ฑ์ค๊ฐ ์์ต๋๋ค.
๋ค์
item(index)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
index๊ฐ this์ ํ ํฐ ์งํฉ์ ํฌ๊ธฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด, null์ ๋ฐํํฉ๋๋ค.
-
๋ค์์ ๋ฐํํฉ๋๋ค: this์ ํ ํฐ ์งํฉ[index].
๋ค์
contains(token)๋ฉ์๋ ๋จ๊ณ๋ true๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค. ๋จ, this์ ํ ํฐ ์งํฉ[token]์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.๋ค์
add(tokensโฆ)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๊ฐ token(tokens์ ์ํจ)์ ๋ํด:
-
token์ด ๋น ๋ฌธ์์ด์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
SyntaxError"DOMException. -
token์ ASCII ๊ณต๋ฐฑ์ด ํ๋๋ผ๋ ํฌํจ๋์ด ์์ผ๋ฉด, ๋์ง๋๋ค: ๋ค์ ์์ธ์ธ "
InvalidCharacterError"DOMException.
-
-
๊ฐ token(tokens์ ์ํจ)์ ๋ํด: ๋ง๋ถ์ ๋๋ค: token์ this์ ํ ํฐ ์งํฉ์.
-
๋ค์ ๊ฐฑ์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
๋ค์
remove(tokensโฆ)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
๊ฐ token(tokens์ ์ํจ)์ ๋ํด:
-
token์ด ๋น ๋ฌธ์์ด์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
SyntaxError"DOMException. -
token์ ASCII ๊ณต๋ฐฑ์ด ํ๋๋ผ๋ ํฌํจ๋์ด ์์ผ๋ฉด, ๋์ง๋๋ค: ๋ค์ ์์ธ์ธ "
InvalidCharacterError"DOMException.
-
-
๊ฐ token(tokens์ ์ํจ)์ ๋ํด: ์ ๊ฑฐํฉ๋๋ค: token์ ๋ค์์์: this์ ํ ํฐ ์งํฉ.
-
๋ค์ ๊ฐฑ์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
๋ค์
toggle(token, force)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
token์ด ๋น ๋ฌธ์์ด์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
SyntaxError"DOMException. -
token์ ASCII ๊ณต๋ฐฑ์ด ํ๋๋ผ๋ ํฌํจ๋์ด ์์ผ๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException. -
๋ง์ฝ this์ ํ ํฐ ์งํฉ[token]์ด ์กด์ฌํ๋ฉด:
-
force๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋ false์ด๋ฉด, ์ ๊ฑฐํฉ๋๋ค: token์ this์ ํ ํฐ ์งํฉ์์. ๊ทธ๋ฐ ๋ค์ ๊ฐฑ์ ๋จ๊ณ๋ฅผ ์คํํ๊ณ ๋ฐํํฉ๋๋ค: false.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
-
-
๊ทธ๋ ์ง ์๊ณ , force๊ฐ ์ฃผ์ด์ง์ง ์์๊ฑฐ๋ true์ด๋ฉด, ๋ง๋ถ์ ๋๋ค: token์ ๋ค์ this์ ํ ํฐ ์งํฉ์. ๊ทธ๋ฐ ๋ค์ ๊ฐฑ์ ๋จ๊ณ๋ฅผ ์คํํ๊ณ true๋ฅผ ๋ฐํํฉ๋๋ค.
-
false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์ ๊ฐฑ์ ๋จ๊ณ๋
toggle()์์ ์น ํธํ์ฑ์ ์ํด ํญ์ ์คํ๋์ง๋ ์์ต๋๋ค.๋ค์
replace(token, newToken)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
token ๋๋ newToken ์ค ํ๋๋ผ๋ ๋น ๋ฌธ์์ด์ด๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
SyntaxError"DOMException. -
token ๋๋ newToken ์ค ํ๋๋ผ๋ ASCII ๊ณต๋ฐฑ์ ํฌํจํ๋ฉด, ๋ค์ ์์ธ๋ฅผ ๋์ง๋๋ค: "
InvalidCharacterError"DOMException. -
๋ง์ฝ this์ ํ ํฐ ์งํฉ์ ๋ค์ ํ ํฐ์ด ํฌํจ๋์ด ์์ง ์์ผ๋ฉด: token, false๋ฅผ ๋ฐํํฉ๋๋ค.
-
๊ต์ฒดํฉ๋๋ค: token์ this์ ํ ํฐ ์งํฉ์์ newToken์ผ๋ก.
-
๋ค์ ๊ฐฑ์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
-
true๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์ ๊ฐฑ์ ๋จ๊ณ๋
replace()์์ ์น ํธํ์ฑ์ ์ํด ํญ์ ์คํ๋์ง๋ ์์ต๋๋ค.๋ค์
supports(token)๋ฉ์๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:-
result๋ฅผ ๋ค์ ๊ฒ์ฆ ๋จ๊ณ์ ๋ฐํ๊ฐ์ผ๋ก ๋ก๋๋ค. ํธ์ถ ์ธ์๋ token์ ๋๋ค.
-
result๋ฅผ ๋ฐํํฉ๋๋ค.
๋ค์
valuegetter ๋จ๊ณ๋ ๋ค์ ๋จ๊ณ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค: this์ ์ง๋ ฌํ ๋จ๊ณ.๋ค์
valuesetter ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ ๊ฐ ์ค์ ์ ์ํํ๋ ๊ฒ์ ๋๋ค. ๋์์ this์ ์์์ด๋ฉฐ, ์ฌ์ฉํ ์ธ์๋ this์ ์์ฑ ์ด๋ฆ๊ณผ ์ฃผ์ด์ง ๊ฐ์ ๋๋ค.8. XPath
DOM Level 3 XPath๋ XPath 1.0 ํํ์์ ํ๊ฐํ๋ API๋ฅผ ์ ์ํ์ต๋๋ค. ์ด API๋ค์ ๋๋ฆฌ ๊ตฌํ๋์ด ์์ง๋ง ์ ์ง ๊ด๋ฆฌ๋๊ณ ์์ง ์์ต๋๋ค. ์ธํฐํ์ด์ค ์ ์๋ Web IDL์ด ๋ณ๊ฒฝ๋ ๋ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ์ฌ๊ธฐ์์ ์ ์ง๋๊ณ ์์ต๋๋ค. ์ด๋ฌํ API์ ์ ์ฒด ์ ์๋ ์ฌ์ ํ ํ์ํ๋ฉฐ, ๊ด๋ จ ์์ ์ whatwg/dom#67์์ ์ถ์ ๋ฐ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. [DOM-Level-3-XPath] [XPath] [WEBIDL]
8.1. ์ธํฐํ์ด์ค
XPathResult[
Exposed =Window ]interface {XPathResult const unsigned short = 0;ANY_TYPE const unsigned short = 1;NUMBER_TYPE const unsigned short = 2;STRING_TYPE const unsigned short = 3;BOOLEAN_TYPE const unsigned short = 4;UNORDERED_NODE_ITERATOR_TYPE const unsigned short = 5;ORDERED_NODE_ITERATOR_TYPE const unsigned short = 6;UNORDERED_NODE_SNAPSHOT_TYPE const unsigned short = 7;ORDERED_NODE_SNAPSHOT_TYPE const unsigned short = 8;ANY_UNORDERED_NODE_TYPE const unsigned short = 9;FIRST_ORDERED_NODE_TYPE readonly attribute unsigned short ;resultType readonly attribute unrestricted double ;numberValue readonly attribute DOMString ;stringValue readonly attribute boolean ;booleanValue readonly attribute Node ?;singleNodeValue readonly attribute boolean ;invalidIteratorState readonly attribute unsigned long ;snapshotLength Node ?();iterateNext Node ?(snapshotItem unsigned long ); };index 8.2. ์ธํฐํ์ด์ค
XPathExpression[
Exposed =Window ]interface { // XPathResult.ANY_TYPE = 0XPathExpression XPathResult (evaluate Node ,contextNode optional unsigned short = 0,type optional XPathResult ?=result null ); };8.3. ๋ฏน์ค์ธ
XPathEvaluatorBasecallback interface {XPathNSResolver DOMString ?(lookupNamespaceURI DOMString ?); };prefix interface mixin { [XPathEvaluatorBase NewObject ]XPathExpression (createExpression DOMString ,expression optional XPathNSResolver ?=resolver null );Node createNSResolver (Node ); // legacy // XPathResult.ANY_TYPE = 0nodeResolver XPathResult (evaluate DOMString ,expression Node ,contextNode optional XPathNSResolver ?=resolver null ,optional unsigned short = 0,type optional XPathResult ?=result null ); };Document includes XPathEvaluatorBase ;createNSResolver(nodeResolver)๋ฉ์๋์ ๋จ๊ณ๋ nodeResolver๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.์ด ๋ฉ์๋๋ ์ค์ง ์ญ์ฌ์ ์ด์ ๋ก ์กด์ฌํฉ๋๋ค.
8.4. ์ธํฐํ์ด์ค
XPathEvaluator[
Exposed =Window ]interface {XPathEvaluator (); };constructor XPathEvaluator includes XPathEvaluatorBase ;์ญ์ฌ์ ์ธ ์ด์ ๋ก
XPathEvaluator๋ฅผ ์์ฑํ ์๋ ์๊ณDocument์์ ๋์ผํ ๋ฉ์๋์ ์ ๊ทผํ ์๋ ์๋ค.9. XSLT
๋ธ๋ผ์ฐ์ ์์ ํด๋ผ์ด์ธํธ ์ธก XSLT๋ฅผ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค. ๋ธ๋ผ์ฐ์ ์ XSLT ๊ตฌํ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ทจ์ฝ์ ์ ๋งค์ฐ ์ทจ์ฝํ๋ฉฐ, ์น ํ๋ซํผ์ ์์ ํ ๋์ฒด ์๋จ์ผ๋ก JavaScript๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ํด ์๋ค. ์ด๋ฌํ ์ด์ ๋ก ์ด ๊ธฐ๋ฅ์ ์น ํ๋ซํผ์์ ์ ๊ฑฐ๋๋ ์ค์ด๋ค. (์ด๋ ์๋ ์ด ๊ฑธ๋ฆฌ๋ ๊ธด ๊ณผ์ ์ด๋ค.)
XSL Transformations (XSLT)๋ XML ๋ฌธ์๋ฅผ ๋ค๋ฅธ XML ๋ฌธ์๋ก ๋ณํํ๋ ์ธ์ด์ ๋๋ค. ์ด ์น์ ์์ ์ ์๋ API๋ ๋๋ฆฌ ๊ตฌํ๋์ด ์์ผ๋ฉฐ, Web IDL์ด ๋ณ๊ฒฝ๋ ๋ ์ ๋ฐ์ดํธ๋ ์ ์๋๋ก ์ด๊ณณ์์ ์ ์ง ๊ด๋ฆฌ๋ฉ๋๋ค. ์ด๋ฌํ API์ ์ ์ฒด ์ ์๋ ์ฌ์ ํ ํ์ํ๋ฉฐ, ๊ด๋ จ ์์ ์ whatwg/dom#181์์ ์ถ์ ๋ฐ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. [XSLT]
9.1. ์ธํฐํ์ด์ค
XSLTProcessor[
Exposed =Window ]interface {XSLTProcessor ();constructor undefined (importStylesheet Node ); [style CEReactions ]DocumentFragment (transformToFragment Node ,source Document ); [output CEReactions ]Document (transformToDocument Node );source undefined ([setParameter LegacyNullToEmptyString ]DOMString ,namespaceURI DOMString ,localName any );value any ([getParameter LegacyNullToEmptyString ]DOMString ,namespaceURI DOMString );localName undefined ([removeParameter LegacyNullToEmptyString ]DOMString ,namespaceURI DOMString );localName undefined ();clearParameters undefined (); };reset 10. ๋ณด์ ๋ฐ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๊ณ ๋ ค ์ฌํญ
์ด ํ์ค์๋ ์๋ ค์ง ๋ณด์ ๋๋ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๊ณ ๋ ค ์ฌํญ์ด ์์ต๋๋ค.
11. ๊ณผ๊ฑฐ(Historical)
์ด ํ์ค์๋ ์ ๊ฑฐ๋ ์ฌ๋ฌ ์ธํฐํ์ด์ค์ ์ธํฐํ์ด์ค ๋ฉค๋ฒ๊ฐ ์์์ต๋๋ค.
์๋ ์ธํฐํ์ด์ค๋ค์ด ์ ๊ฑฐ๋์์ต๋๋ค:
DOMConfigurationDOMErrorDOMErrorHandlerDOMImplementationListDOMImplementationSourceDOMLocatorDOMObjectDOMUserDataEntityEntityReferenceMutationEventMutationNameEventNameListNotationRangeExceptionTypeInfoUserDataHandler
๊ทธ๋ฆฌ๊ณ ์๋ ์ธํฐํ์ด์ค ๋ฉค๋ฒ๋ค์ด ์ ๊ฑฐ๋์์ต๋๋ค:
Attr-
schemaTypeInfoisId
Document-
createEntityReference()xmlEncodingxmlStandalonexmlVersionstrictErrorCheckingdomConfignormalizeDocument()renameNode()
DocumentType-
entitiesnotationsinternalSubset
DOMImplementation-
getFeature()
Element-
schemaTypeInfosetIdAttribute()setIdAttributeNS()setIdAttributeNode()
Node-
isSupportedgetFeature()getUserData()setUserData()
NodeIterator-
expandEntityReferences
Text-
isElementContentWhitespacereplaceWholeText()
TreeWalker-
expandEntityReferences
๊ฐ์ฌ์ ๊ธ
DOM์ ์ํธ์ด์ฉ์ฑ์ ๋์ด๊ณ ์ด ํ์ค์ ๋ชฉํ๋ฅผ ๋ฐ์ ์ํค๋ ๋ฐ ์๋ง์ ์ฌ๋๋ค์ด ์ค๋ ์ธ์ ๋์ ๋์์ ์ฃผ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ์ค๋๋ ์ด ํ์ค์ด ์ด ์๋ฆฌ์ ์ค๊ธฐ๊น์ง ๋ง์ ๋ถ๋ค์ด ๊ธฐ์ฌํด ์ฃผ์ จ์ต๋๋ค.
์ด์ ๊ฐ์ฌ์ ๋ง์์ ์ ํฉ๋๋ค: Adam Klein, Adrian Bateman, Ahmid snuggs, Alex Komoroske, Alex Russell, Alexey Shvayka, Andreas Kling, Andreu Botella, Anthony Ramine, Arkadiusz Michalski, Armen Michaeli, Arnaud Le Hors, Arun Ranganathan, Benjamin Gruenbaum, Bjรถrn Hรถhrmann, Boris Zbarsky, Brandon Payton, Brandon Slade, Brandon Wallace, Brian Kardell, C. Scott Ananian, Cameron McCormack, Chris Dumez, Chris Paris, Chris Rebert, Cyrille Tuzi, Dan Burzo, Daniel Clark, Daniel Glazman, Darien Maillet Valentine, Darin Fisher, David Baron, David Bruant, David Flanagan, David Hรฅsรคther, David Hyatt, Deepak Sherveghar, Dethe Elza, Dimitri Glazkov, Domenic Denicola, Dominic Cooney, Dominique Hazaรซl-Massieux, Don Jordan, Doug Schepers, Edgar Chen, Elisรฉe Maurer, Elliott Sprehn, Emilio Cobos รlvarez, Eric Bidelman, Erik Arvidsson, Evgeny Kapun, Franรงois Daoust, Franรงois Remy, Gary Kacmarcik, Gavin Nicol, Giorgio Liscio, Glen Huang, Glenn Adams, Glenn Maynard, Hajime Morrita, Harald Alvestrand, Hayato Ito, Henri Sivonen, Hongchan Choi, Hunan Rostomyan, Ian Hickson, Igor Bukanov, Jacob Rossi, Jake Archibald, Jake Verbaten, James Graham, James Greene, James M Snell, James Robinson, Jayson Chen, Jeffrey Yasskin, Jens Lindstrรถm, Jeremy Davis, Jesse McCarthy, Jinho Bang, Joรฃo Eiras, Joe Kesselman, John Atkins, John Dai, Jonas Sicking, Jonathan Kingston, Jonathan Robie, Joris van der Wel, Joshua Bell, J. S. Choi, Jungkee Song, Justin Summerlin, Kagami Sascha Rosylight, ๅๅบท่ฑช (Kang-Hao Lu), ็ฐๆๅฅไบบ (Kent TAMURA), Kevin J. Sung, Kevin Sweeney, Kirill Topolyan, Koji Ishii, Lachlan Hunt, Lauren Wood, Luca Casonato, Luke Zielinski, Magne Andersson, Majid Valipour, Malte Ubl, Manish Goregaokar, Manish Tripathi, Marcos Caceres, Mark Miller, Martijn van der Ven, Mason Freed, Mats Palmgren, Mounir Lamouri, Michael Stramel, Michaelโข Smith, Mike Champion, Mike Taylor, Mike West, Nicolรกs Peรฑa Moreno, Nidhi Jaju, Ojan Vafai, Oliver Nightingale, Olli Pettay, Ondลej ลฝรกra, Peter Sharpe, Philip Jรคgenstedt, Philippe Le Hรฉgaret, Piers Wombwell, Pierre-Marie Dartus, prosodyโGab Vereable Context(, Rafael Weinstein, Rakina Zata Amni, Richard Bradshaw, Rick Byers, Rick Waldron, Robbert Broersma, Robin Berjon, Roland Steiner, Rune F. Halvorsen, Russell Bicknell, Ruud Steltenpool, Ryosuke Niwa, Sam Dutton, Sam Sneddon, Samuel Giles, Sanket Joshi, Scott Haseley, Sebastian Mayr, Seo Sanghyeon, Sergey G. Grekhov, Shiki Okasaka, Shinya Kawanaka, Simon Pieters, Simon Wรผlker, Stef Busking, Steve Byrne, Steven Obiajulu, Stig Halvorsen, Tab Atkins, Takashi Sakamoto, Takayoshi Kochi, Theresa OโConnor, Theodore Dubois, timeless, Timo Tijhof, Tobie Langel, Tom Pixley, Travis Leithead, Trevor Rowbotham, triple-underscore, Tristan Fraipont, Veli ลenol, Vidur Apparao, Warren He, Xidorn Quan, Yash Handa, Yehuda Katz, Yoav Weiss, Yoichi Osato, Yoshinori Sano, Yu Han, Yusuke Abe, and Zack Weinberg ์ฌ๋ฌ๋ถ ๋ชจ๋ ์ ๋ง ํ๋ฅญํฉ๋๋ค!
์ด ํ์ค์ Anne van Kesteren (Apple, annevk@annevk.nl) ๊ทธ๋ฆฌ๊ณ Aryeh Gregor(ayg@aryeh.name), Ms2ger(ms2ger@gmail.com)์ ํฐ ๊ธฐ์ฌ๋ก ์์ฑ๋์์ต๋๋ค.
์ง์ ์ฌ์ฐ๊ถ(Intellectual property rights)
์ปค์คํ ์์ ๊ด๋ จ ํตํฉ ์ง์ ์ ๊ฐ์ ์ด๋ ฅ ์ผ๋ถ๋ custom elements์์ ๋ณผ ์ ์์ผ๋ฉฐ, w3c/webcomponents ์ ์ฅ์์์ ํ์ธํ ์ ์์ต๋๋ค. ํด๋น ์ ์ฅ์๋ W3C ์ํํธ์จ์ด ๋ฐ ๋ฌธ์ ๋ผ์ด์ ์ค๋ก ์ ๊ณต๋ฉ๋๋ค.Copyright ยฉ WHATWG (Apple, Google, Mozilla, Microsoft). ์ด ์ ์๋ฌผ์ ํฌ๋ฆฌ์์ดํฐ๋ธ ์ปค๋จผ์ฆ ์ ์์ํ์ 4.0 ๊ตญ์ ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์ด์ฉํ ์ ์์ต๋๋ค. ์ผ๋ถ๊ฐ ์์ค ์ฝ๋์ ํตํฉ๋๋ ๊ฒฝ์ฐ, ํด๋น ๋ถ๋ถ์ BSD 3-Clause License๋ก ์์ค ์ฝ๋์ ์ ์ฉ๋ฉ๋๋ค.
์ด ๋ฌธ์๋ Living Standard์ ๋๋ค. ํนํ ์ฌ์ฌ ๋ฒ์ ์ ๊ด์ฌ ์๋ ๋ถ๋ค์ Living Standard Review Draft๋ฅผ ์ฐธ๊ณ ํ์ธ์.