Skip to content

Commit

Permalink
Merge pull request #1224 from Ryan-Dia/ryan-dia
Browse files Browse the repository at this point in the history
39-2μž₯ DOM - 강철원
  • Loading branch information
Ryan-Dia authored Jan 17, 2024
2 parents 63ded9e + 729b16f commit b6551e7
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions docs/39_DOM/강철원B.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,45 @@ HTML λ¬Έμ„œλŠ” HTML μš”μ†Œλ“€μ˜ μ§‘ν•©μœΌλ‘œ 이뀄지며, HTML μš”μ†ŒλŠ” 쀑

![image](https://user-images.githubusercontent.com/76567238/222152715-6be40e62-6a5d-4925-9a55-818248ddc231.png)

## 2. μš”μ†Œ λ…Έλ“œ 취득

`HTML`의 κ΅¬μ‘°λ‚˜ λ‚΄μš© λ˜λŠ” μŠ€νƒ€μΌ 등을 λ™μ μœΌλ‘œ μ‘°μž‘ν•˜λ €λ©΄ λ¨Όμ € μš”μ†Œ λ…Έλ“œλ₯Ό 취득해야 ν•©λ‹ˆλ‹€. ν…μŠ€νŠΈ λ…Έλ“œλŠ” μš”μ†Œ λ…Έλ“œμ˜ μžμ‹ λ…Έλ“œμ΄κ³ , μ–΄νŠΈλ¦¬λ·°νŠΈ λ…Έλ“œλŠ” μš”μ†Œ λ…Έλ“œμ™€ μ—°κ²°λ˜μ–΄ 있기 λ•Œλ¬Έμ— ν…μŠ€νŠΈ λ…Έλ“œλ‚˜ μ–΄νŠΈλ¦¬λ·°νŠΈ λ…Έλ“œλ₯Ό μ‘°μž‘ν•˜κ³ μž ν•  λ•Œλ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

>예λ₯Ό λ“€μ–΄, `HTML` λ¬Έμ„œ λ‚΄μ˜ `h1` μš”μ†Œμ˜ ν…μŠ€νŠΈλ₯Ό λ³€κ²½ν•˜κ³  싢은 경우λ₯Ό μƒκ°ν•΄λ΄…μ‹œλ‹€. 이 경우 λ¨Όμ € `DOM` 트리 내에 μ‘΄μž¬ν•˜λŠ” `h1`μš”μ†Œ λ…Έλ“œλ₯Ό 취득할 ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€. 그리고 μ·¨λ“ν•œ μš”μ†Œ λ…Έλ“œμ˜ μžμ‹ λ…Έλ“œμΈ ν…μŠ€νŠΈ λ…Έλ“œλ₯Ό λ³€κ²½ν•˜λ©΄ ν•΄λ‹Ή `h1`μš”μ†Œ λ…Έλ“œλ₯Ό 취득할 ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€. 그리고 μ·¨λ“ν•œ μš”μ†Œ λ…Έλ“œμ˜ μžμ‹ λ…Έλ“œμΈ ν…μŠ€νŠΈ λ…Έλ“œλ₯Ό λ³€κ²½ν•˜λ©΄ ν•΄λ‹Ή `h1` μš”μ†Œμ˜ ν…μŠ€νŠΈκ°€ λ³€κ²½λ©λ‹ˆλ‹€.
### 1) `id`λ₯Ό μ΄μš©ν•œ μš”μ†Œ λ…Έλ“œ 취득

`Document.prototype.getElementById` λ©”μ„œλ“œλŠ” 인수둜 μ „λ‹¬ν•œ `id` μ–΄νŠΈλ¦¬λ·°νŠΈ κ°’(μ΄ν•˜ idκ°’)을 κ°–λŠ” ν•˜λ‚˜μ˜ μš”μ†Œ λ…Έλ“œλ₯Ό νƒμƒ‰ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€. `getElementById`λ©”μ„œλ“œλŠ” `Document.prototype`의 ν”„λ‘œνΌν‹°μž…λ‹ˆλ‹€. λ”°λΌμ„œ λ°˜λ“œμ‹œ λ¬Έμ„œ λ…Έλ“œμΈ `document`λ₯Ό 톡해 ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.



`DOM`은 `HTML`λ¬Έμ„œμ˜ 계측적 ꡬ쑰와 정보λ₯Ό ν‘œν˜„ν•˜λŠ” 것은 λ¬Όλ‘  λ…Έλ“œ 객체의 μ’…λ₯˜, 즉 λ…Έλ“œ νƒ€μž…μ— 따라 ν•„μš”ν•œ κΈ°λŠ₯을 ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œμ˜ 집합인 `DOM API`둜 μ œκ³΅ν•©λ‹ˆλ‹€. 이 `DOM API`λ₯Ό 톡해 `HTML`의 κ΅¬μ‘°λ‚˜ λ‚΄μš© λ˜λŠ” μŠ€νƒ€μΌλ“±μ„ λ™μ μœΌλ‘œ μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


- `id`값은 HTML λ¬Έμ„œ λ‚΄μ—μ„œ μœ μΌν•œ 값이어야 ν•˜λ©°, `class`μ–΄νŠΈλ¦¬λ·°νŠΈμ™€λŠ” 달리 곡백 문자둜 κ΅¬λΆ„ν•˜μ—¬ μ—¬λŸ¬κ°œμ˜ 값을 κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€.
- 단, HTML λ¬Έμ„œ 내에 μ€‘λ³΅λœ `id`값을 κ°–λŠ” HTML μš”μ†Œκ°€ μ—¬λŸ¬ 개 μ‘΄μž¬ν•˜λ”λΌλ„ μ–΄λ– ν•œ μ—λŸ¬λ„ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
- 즉, HTML λ¬Έμ„œ λ‚΄μ—λŠ” μ€‘λ³΅λœ `id`값을 κ°–λŠ” μš”μ†Œκ°€ μ—¬λŸ¬ 개 μ‘΄μž¬ν•  κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.
- μ΄λŸ¬ν•œ 경우 `getElementById` λ©”μ„œλ“œλŠ” 인수둜 μ „λ‹¬λœ `id`값을 κ°–λŠ” 첫 번째 μš”μ†Œ λ…Έλ“œλ§Œ λ°˜ν™˜ν•©λ‹ˆλ‹€. (`getElementById` λ©”μ„œλ“œλŠ” μ–Έμ œλ‚˜ 단 ν•˜λ‚˜μ˜ μš”μ†Œ λ…Έλ“œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€)
- λ§Œμ•½ 인수둜 μ „λ‹¬λœ `id`값을 κ°–λŠ” HTML μš”μ†Œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 `getElementById`λ©”μ„œλ“œλŠ” `null`을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
- HTML μš”μ†Œμ— `id` μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό λΆ€μ—¬ν•˜λ©΄ `id` κ°’κ³Ό λ™μΌν•œ μ΄λ¦„μ˜ μ „μ—­ λ³€μˆ˜κ°€ μ•”λ¬΅μ μœΌλ‘œ μ„ μ–Έλ˜κ³  ν•΄λ‹Ή λ…Έλ“œ 객체가 ν• λ‹Ήλ˜λŠ” λΆ€μˆ˜ νš¨κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€.
- 단, `id`κ°’κ³Ό λ™μΌν•œ μ΄λ¦„μ˜ μ „μ—­ λ³€μˆ˜κ°€ 이미 μ„ μ–Έλ˜μ–΄ 있으면 이 μ „μ—­ λ³€μˆ˜μ— λ…Έλ“œ 객체가 μž¬ν• λ‹Ήλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

### 2) νƒœκ·Έ 이름을 μ΄μš©ν•œ μš”μ†Œ λ…Έλ“œ 취득

`Document.prototype/Element.prototype.getElementsByTagName` λ©”μ„œλ“œλŠ” 인수둜 μ „λ‹¬ν•œ νƒœκ·Έ 이름을 κ°–λŠ” λͺ¨λ“  μš”μ†Œ λ…Έλ“œλ“€μ„ νƒμƒ‰ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€. λ©”μ„œλ“œ 이름에 ν¬ν•¨λœ `Elements`κ°€ λ³΅μˆ˜ν˜•μΈ κ²ƒμ—μ„œ μ•Œ 수 μžˆλ“―μ΄ `getElementsByTagName`λ©”μ„œλ“œλŠ” μ—¬λŸ¬ 개의 μš”μ†Œ λ…Έλ“œ 객체λ₯Ό κ°–λŠ” `DOM`μ»¬λ ‰μ…˜ 객체인 `HTMLCollection`객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.


- ν•¨μˆ˜λŠ” ν•˜λ‚˜μ˜ κ°’λ§Œ λ°˜ν™˜ν•  수 μžˆμœΌλ―€λ‘œ μ—¬λŸ¬ 개의 값을 λ°˜ν™˜ν•˜λ €λ©΄ λ°°μ—΄μ΄λ‚˜ 객체와 같은 μžλ£Œκ΅¬μ‘°μ— λ‹΄μ•„ λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
- `getElementsByTagName`λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” `DOM` μ»¬λ ‰μ…˜ 객체인 `HTMLCollection`κ°μ²΄λŠ” μœ μ‚¬ λ°°μ—΄ κ°μ²΄μ΄λ©΄μ„œ μ΄ν„°λŸ¬λΈ”μž…λ‹ˆλ‹€.

### 3) classλ₯Ό μ΄μš©ν•œ μš”μ†Œ λ…Έλ“œ 취득

`Document.prototype/Element.prototype.getElementsByClassName` λ©”μ„œλ“œλŠ” 인수둜 μ „λ‹¬ν•œ `Class` μ–΄νŠΈλ¦¬λ·°νŠΈ 값을 κ°–λŠ” λͺ¨λ“  μš”μ†Œ λ…Έλ“œλ“€μ„ νƒμƒ‰ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€. 인수둜 전달할 `class`값은 곡백으둜 κ΅¬λΆ„ν•˜μ—¬ μ—¬λŸ¬ 개의 `class`λ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.
`getElementsByTagName` λ©”μ„œλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ `getElementsByClassName`λ©”μ„œλ“œλŠ” μ—¬λŸ¬ 개의 μš”μ†Œ λ…Έλ“œ 객체λ₯Ό κ°–λŠ” `DOM`μ»¬λ ‰μ…˜ 객체인 `HTMLCollection`객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

- `document`λ₯Ό 톡해 ν˜ΈμΆœν•˜λ©° `DOM`μ „μ²΄μ—μ„œ μš”μ†Œ λ…Έλ“œλ₯Ό νƒμƒ‰ν•˜μ—¬ λ°˜ν™˜ν•˜κ³  `Element.prototype.getElementsByClassName`λ©”μ„œλ“œλŠ” νŠΉμ • μš”μ†Œ λ…Έλ“œλ₯Ό 톡해 ν˜ΈμΆœν•˜λ©° νŠΉμ • μš”μ†Œ λ…Έλ“œμ˜ μžμ† λ…Έλ“œ μ€‘μ—μ„œ μš”μ†Œ λ…Έλ“œλ₯Ό νƒμƒ‰ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.
- λ§Œμ•½ 인수둜 μ „λ‹¬λœ `class`값을 κ°–λŠ” μš”μ†Œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 `getElementsByClassName`λ©”μ„œλ“œλŠ” 빈 `HTMLCollection`객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.




0 comments on commit b6551e7

Please sign in to comment.