You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/1-document/04-searching-elements-dom/article.md
+33-33Lines changed: 33 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@
6
6
7
7
## document.getElementById 혹은 id를 사용해 요소 검색하기
8
8
9
-
요소에 `id` 속성이 있으면 요소의 위치에 상관없이 `document.getElementById(id)`라는 메서드를 이용해 요소에 접근할 수 있습니다.
9
+
요소에 `id` 속성이 있으면 위치에 상관없이 메서드 `document.getElementById(id)`를 이용해 접근할 수 있습니다.
10
10
11
11
예시:
12
12
@@ -26,23 +26,23 @@
26
26
</script>
27
27
```
28
28
29
-
요소에 `id` 속성이 있으면 `id` 속성값을 그대로 딴 전역 변수 하나가 만들어지는데, 이를 이용할 수도 있습니다.
29
+
이에 더하여 `id` 속성값을 그대로 딴 전역 변수를 이용해 접근할 수도 있습니다.
30
30
31
31
```html run
32
32
<divid="*!*elem*/!*">
33
33
<divid="*!*elem-content*/!*">Element</div>
34
34
</div>
35
35
36
36
<script>
37
-
// 변수 elem은 id가 "elem"인 DOM 요소를 참조합니다.
37
+
// 변수 elem은 id가 'elem'인 요소를 참조합니다.
38
38
elem.style.background='red';
39
39
40
40
// id가 elem-content인 요소는 중간에 하이픈(-)이 있기 때문에 변수 이름으로 쓸 수 없습니다.
41
-
// 이럴 땐 window['elem-content']같이 대괄호(`[...]`)를 이용할 수 있습니다.
41
+
// 이럴 땐 대괄호(`[...]`)를 사용해서 window['elem-content']로 접근하면 됩니다.
42
42
</script>
43
43
```
44
44
45
-
그런데 이렇게 자동으로 선언된 전역변수는 동일한 이름을 가진 변수가 선언되면 무용지물이 됩니다.
45
+
그런데 이렇게 요소 id를 따서 자동으로 선언된 전역변수는 동일한 이름을 가진 변수가 선언되면 무용지물이 됩니다.
46
46
47
47
```html run untrusted height=0
48
48
<divid="elem"></div>
@@ -55,11 +55,11 @@
55
55
```
56
56
57
57
```warn header="id를 따서 만들어진 전역변수를 요소 접근 시 사용하지 마세요."
58
-
`id`에 대응하는 전역변수는 [명세](http://www.whatwg.org/specs/web-apps/current-work/#dom-window-nameditem)의 내용을 구현한 것으로 표준이긴 하지만 하위 호환성을 위해 남겨둔 동작입니다.
58
+
`id`에 대응하는 전역변수는 [명세서](http://www.whatwg.org/specs/web-apps/current-work/#dom-window-nameditem)의 내용을 구현해 만들어진 것으로 표준이긴 하지만 하위 호환성을 위해 남겨둔 동작입니다.
59
59
60
-
브라우저는 스크립트의 네임스페이스와 DOM의 네임스페이스를 함께 사용할 수 있도록 해서 개발자의 편의를 도모합니다. 그런데 이런 방식은 스크립트가 간단할 땐 괜찮지만, 이름이 충돌할 가능성이 있기 때문에 추천하는 방식은 아닙니다. 뷰 영역을 관장하는 HTML을 보지 않은 상황에서 스크립트만 보고 변수의 출처를 알기 힘들다는 단점도 있죠.
60
+
브라우저는 스크립트의 네임스페이스와 DOM의 네임스페이스를 함께 사용할 수 있도록 해서 개발자의 편의를 도모합니다. 그런데 이런 방식은 스크립트가 간단할 땐 괜찮지만, 이름이 충돌할 가능성이 있기 때문에 추천하는 방식은 아닙니다. HTML을 보지 않은 상황에서 코드만 보고 변수의 출처를 알기 힘들다는 단점도 있습니다.
61
61
62
-
본 튜토리얼에선 코드를 간결하게 작성하기 위해 요소의 출처가 명확한 경우, `id`를 사용해 요소에 직접 접근하는 방법을 사용할 예정입니다.
62
+
본 튜토리얼에선 간결성을 위해 요소의 출처가 명확한 경우, `id`를 사용해 요소에 직접 접근하는 방법을 사용할 예정입니다.
63
63
64
64
실무에선 `document.getElementById`를 사용하시길 바랍니다.
65
65
```
@@ -78,32 +78,32 @@
78
78
79
79
`elem.querySelectorAll(css)`은 다재다능한 요소 검색 메서드입니다. 이 메서드는 `elem`의 자식 요소 중 주어진 CSS 선택자에 대응하는 요소 모두를 반환합니다.
80
80
81
-
아래 예시는 `document` 내 마지막 `<li>`요소 모두를 반환합니다.
81
+
아래 예시는 마지막 `<li>`요소 모두를 반환합니다.
82
82
83
83
```html run
84
84
<ul>
85
-
<li>The</li>
86
-
<li>test</li>
85
+
<li>1-1</li>
86
+
<li>1-2</li>
87
87
</ul>
88
88
<ul>
89
-
<li>has</li>
90
-
<li>passed</li>
89
+
<li>2-1</li>
90
+
<li>2-2</li>
91
91
</ul>
92
92
<script>
93
93
*!*
94
94
let elements = document.querySelectorAll('ul > li:last-child');
95
95
*/!*
96
96
97
97
for (let elem of elements) {
98
-
alert(elem.innerHTML); // "test", "passed"
98
+
alert(elem.innerHTML); // "1-2", "2-2"
99
99
}
100
100
</script>
101
101
```
102
102
103
103
`querySelectorAll`은 CSS 선택자를 활용할 수 있다는 점에서 아주 유용합니다.
104
104
105
105
```smart header="가상 클래스도 사용할 수 있습니다."
106
-
querySelectorAll에는 `:hover`나 `:active` 같은 CSS 선택자의 가상 클래스(pseudo-class)도 사용할 수 있습니다. `document.querySelectorAll(':hover')`을 사용하면 마우스 포인터가 위에 있는(hover 상태인) 요소 모두를 담은 컬렉션이 반환됩니다. 참고: 컬렉션은 DOM 트리 최상단에 위치한 `<html>`부터 가장 하단의 요소 순으로 채워집니다.
106
+
querySelectorAll에는 `:hover`나 `:active` 같은 CSS 선택자의 가상 클래스(pseudo-class)도 사용할 수 있습니다. `document.querySelectorAll(':hover')`을 사용하면 마우스 포인터가 위에 있는(hover 상태인) 요소 모두를 담은 컬렉션이 반환됩니다. 이때 컬렉션은 DOM 트리 최상단에 위치한 `<html>`부터 가장 하단의 요소 순으로 채워집니다.
107
107
```
108
108
109
109
## querySelector [#querySelector]
@@ -140,9 +140,9 @@ querySelectorAll에는 `:hover`나 `:active` 같은 CSS 선택자의 가상 클
140
140
141
141
## closest
142
142
143
-
부모 요소, 부모 요소의 부모 요소 등 DOM 트리에서 특정 요소의 상위에 있는 요소들을 한데 묶어 해당 요소의 *조상* 요소라고 부릅니다.
143
+
부모 요소, 부모 요소의 부모 요소 등 DOM 트리에서 특정 요소의 상위에 있는 요소들은 *조상(ancestor)* 요소라고 합니다.
144
144
145
-
`elem.closest(css)`메서드는`elem` 자기 자신을 포함하여 CSS 선택자와 일치하는 가장 가까운 조상 요소를 찾을 수 있게 도와줍니다.
145
+
메서드 `elem.closest(css)`는`elem` 자기 자신을 포함하여 CSS 선택자와 일치하는 가장 가까운 조상 요소를 찾을 수 있게 도와줍니다.
146
146
147
147
`closest`메서드는 해당 요소부터 시작해 DOM 트리를 한 단계씩 거슬러 올라가면서 원하는 요소를 찾습니다. CSS 선택자와 일치하는 요소를 찾으면, 검색을 중단하고 해당 요소를 반환합니다.
148
148
@@ -176,7 +176,7 @@ querySelectorAll에는 `:hover`나 `:active` 같은 CSS 선택자의 가상 클
176
176
177
177
튜토리얼의 완성도를 높이고 오래된 스크립트에서 해당 메서드들을 만날 때 당황하지 않으시길 바라면서 이 메서드들을 잠시 언급하도록 하겠습니다.
178
178
179
-
-`elem.getElementsByTagName(tag)` -- 주어진 태그에 해당하는 요소를 찾고, 대응하는 요소를 담은 컬렉션을 반환합니다. 매개변수 `tag`에 `"*"`이 들어가면, "모든 태그"가 검색됩니다.
179
+
-`elem.getElementsByTagName(tag)` -- 주어진 태그에 해당하는 요소를 찾고, 대응하는 요소를 담은 컬렉션을 반환합니다. 매개변수 `tag`에 `"*"`이 들어가면, '모든 태그'가 검색됩니다.
180
180
-`elem.getElementsByClassName(className)` -- class 속성값을 기준으로 요소를 찾고, 대응하는 요소를 담은 컬렉션을 반환합니다.
181
181
-`document.getElementsByName(name)` -- 아주 드물게 쓰이는 메서드로, 문서 전체를 대상으로 검색을 수행합니다. 검색 기준은 `name` 속성값이고, 이 메서드 역시 검색 결과를 담은 컬렉션을 반환합니다.
182
182
@@ -218,10 +218,10 @@ let divs = document.getElementsByTagName('div');
218
218
</script>
219
219
```
220
220
221
-
```warn header="`\"s\"`를 절대 빠트리지 마세요!"
222
-
초보 개발자들은 가끔 `"s"`를 빼먹는 실수를 하곤 합니다. <code>getElement<b>s</b>ByTagName</code>를 써야 하는데`"s"`를 빠트리고`getElementByTagName`을 입력하곤 하죠.
221
+
```warn header="`'s'`를 절대 빠트리지 마세요!"
222
+
초보 개발자들은 가끔 `'s'`를 빼먹는 실수를 하곤 합니다. <code>getElement<b>s</b>ByTagName</code>를 써야 하는데 `getElementByTagName`을 입력하곤 하죠.
223
223
224
-
`getElementById`는 요소 하나만을 반환하기 때문에 `"s"`가 없습니다. `getElementsByTagName`등의 메서드는 대응하는 요소를 담은 컬렉션을 반환하기 때문에 메서드 중간에 `"s"`가 들어갑니다.
224
+
`getElementById`는 요소 하나만을 반환하기 때문에 `s`가 없습니다. `getElementsByTagName`등의 메서드는 대응하는 요소를 담은 컬렉션을 반환하기 때문에 메서드 중간에 `"s"`가 들어갑니다.
225
225
```
226
226
227
227
````warn header="요소 하나가 아닌, 컬렉션을 반환합니다!"
@@ -232,9 +232,9 @@ let divs = document.getElementsByTagName('div');
232
232
document.getElementsByTagName('input').value = 5;
233
233
```
234
234
235
-
위 코드는 input 요소 전체를 담은 *컬렉션*에 5를 할당하려 하므로, 동작하지 않습니다. 본래 의도는 컬렉션이 아닌 요소에 값을 할당하는 것이었죠.
235
+
input 요소 전체를 담은 *컬렉션*에 5를 할당하는 위 코드는 동작하지 않습니다. 아마도 본래 의도는 컬렉션 내 요소에 값을 할당하는 것이었을 겁니다.
236
236
237
-
컬렉션을 순회하거나 인덱스를 사용해 컬렉션이 아닌 요소를 얻고, 그 요소에 값을 할당하면 기존 의도대로 동작합니다. 아래와 같이 말이죠.
237
+
컬렉션을 순회하거나 인덱스를 사용해 요소를 얻고 그 요소에 값을 할당하면 기존 의도대로 동작합니다. 아래와 같이 말이죠.
0 commit comments