Skip to content

Commit fad37a6

Browse files
authored
Merge pull request #529 from ltlaitoff/fix-2-1.4-searching-elements-dom
fix(2-1.4): Review `Searching: getElement*, querySelector*` article
2 parents 624a878 + 03c3e4c commit fad37a6

File tree

1 file changed

+25
-25
lines changed
  • 2-ui/1-document/04-searching-elements-dom

1 file changed

+25
-25
lines changed

2-ui/1-document/04-searching-elements-dom/article.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
Властивості навігації по DOM чудові, коли елементи розташовані близько один до одного. А якщо ні? Як отримати довільний елемент сторінки?
44

5-
Для цього існують додаткові методи пошуку.
5+
Для цього в DOM існують додаткові методи пошуку.
66

77
## document.getElementById або просто id
88

9-
Якщо елемент має атрибут `id`, ми можемо отримати його за допомогою методу `document.getElementById(id)`, незалежно від того, де він знаходиться.
9+
Якщо елемент має атрибут `id`, ми можемо отримати його викликом `document.getElementById(id)`, незалежно від того, де він знаходиться.
1010

1111
Наприклад:
1212

@@ -42,7 +42,7 @@
4242
</script>
4343
```
4444

45-
...Але це лише якщо ми не оголошуємо змінну JavaScript з тим самим ім’ям, інакше вона матиме пріоритет:
45+
...Але це лише якщо ми не оголосили змінну JavaScript з таким же ім’ям, інакше вона матиме пріоритет:
4646

4747
```html run untrusted height=0
4848
<div id="elem"></div>
@@ -57,28 +57,28 @@
5757
```warn header="Будь ласка, не використовуйте id-іменовані глобальні змінні для доступу до елементів"
5858
Ця поведінка описана [у специфікації](http://www.whatwg.org/specs/web-apps/current-work/#dom-window-nameditem), тож це свого роду стандарт. Але він підтримується в основному для сумісності.
5959
60-
Браузер намагається нам допомогти, змішуючи простори імен JS і DOM. Це добре для простих сценаріїв, вбудованих у HTML, але загалом це не дуже добре. Можуть виникнути конфлікти імен. Крім того, коли хтось читає JS-код і не бачить HTML, незрозуміло, звідки приходить змінна.
60+
Браузер намагається нам допомогти, змішуючи простори імен JS і DOM. Це зручно для простих скриптів, які знаходяться прямо в HTML, але загалом це не дуже добре. Можуть виникнути конфлікти імен. Крім того, коли хтось читає JS-код і не бачить HTML, незрозуміло, звідки приходить змінна.
6161
62-
Тут у підручнику ми використовуємо `id` для прямого посилання на елемент для стислості, коли очевидно, звідки цей елемент походить.
62+
У цьому посібнику ми будемо використовувати `id` для прямого посилання на елемент для стислості, коли очевидно, звідки цей елемент походить.
6363
64-
У реальному житті краще надавати перевагу `document.getElementById`.
64+
У реальному житті краще використовувати `document.getElementById`.
6565
```
6666

67-
```smart header="`id` має бути унікальним"
68-
`id` має бути унікальним. У документі може бути лише один елемент із заданим `id`.
67+
```smart header="Значення `id` має бути унікальним"
68+
Значення `id` має бути унікальним. У документі повинен бути лише один елемент із заданим `id`.
6969

70-
Якщо є кілька елементів з однаковим `id`, то поведінка методів, які його використовують, буде непередбачуваною, наприклад. `document.getElementById` може повертати будь-який з таких елементів випадковим чином. Тому, будь ласка, дотримуйтеся правила та залишайте `id` унікальним.
70+
Якщо є кілька елементів з однаковим `id`, то поведінка методів, які його використовують є непередбачуваною. Наприклад, `document.getElementById` може повертати будь-який з таких елементів випадковим чином. Тому, будь ласка, дотримуйтеся правила та залишайте `id` унікальним.
7171
```
7272
7373
```warn header="Лише `document.getElementById`, а не `anyElem.getElementById`"
74-
Метод `getElementById` можна викликати лише для об’єкта `document`. Він шукає вказаний `id` у всьому документі.
74+
Метод `getElementById` може бути викликаний лише на об’єкті `document`. Він шукає вказаний `id` у всьому документі.
7575
```
7676

7777
## querySelectorAll [#querySelectorAll]
7878

79-
До сьогодні найуніверсальніший метод -- це `elem.querySelectorAll(css)`, він повертає всі елементи всередині `elem`, що відповідають заданому CSS-селектору.
79+
Найбільш гнучким методом є `elem.querySelectorAll(css)`, який повертає всі елементи всередині `elem`, що відповідають заданому CSS-селектору.
8080

81-
Тут ми шукаємо всі елементи `<li>`, які є останніми дочірніми:
81+
Тут ми шукаємо всі елементи `<li>`, які є останніми дочірніми елементами:
8282

8383
```html run
8484
<ul>
@@ -103,22 +103,22 @@
103103
Цей метод дійсно потужний, оскільки можна використовувати будь-який CSS-селектор.
104104

105105
```smart header="Також можна використовувати псевдокласи"
106-
Псевдокласи в CSS-селекторі, такі як `:hover` і `:active`, також підтримуються. Наприклад, `document.querySelectorAll(':hover')` поверне колекцію елементів, що знаходяться під курсором миші (у порядку вкладення: від крайнього `<html>` до найбільш вкладеного).
106+
Псевдокласи в CSS-селекторі, такі як `:hover` і `:active`, також підтримуються. Наприклад, `document.querySelectorAll(':hover')` поверне колекцію елементів, що знаходяться під курсором миші (у порядку вкладення: від зовнішнього `<html>` до найбільш вкладеного).
107107
```
108108

109109
## querySelector [#querySelector]
110110

111111
Виклик `elem.querySelector(css)` повертає перший елемент, що відповідає даному CSS-селектору.
112112

113-
Іншими словами, результат такий самий, як і `elem.querySelectorAll(css)[0]`, але останній шукає *всі* елементи та вибирає один, а `elem.querySelector` просто шукає один. Тому його писати швидше і коротше.
113+
Іншими словами, результат такий самий, як і `elem.querySelectorAll(css)[0]`, але він спочатку знайде всі елементи, а потім візьме перший, тоді як `elem.querySelector` знайде лише перший та зупиниться. Цей метод не лише прискорює виконання, а й дозволяє скоротити кількість написаного коду.
114114

115115
## matches
116116

117117
Попередні методи виконували пошук по DOM.
118118

119-
[elem.matches(css)](http://dom.spec.whatwg.org/#dom-element-matches) нічого не шукає, він просто перевіряє, чи відповідає `elem` заданому CSS-селектору. Він повертає `true` або `false`.
119+
Метод [elem.matches(css)](http://dom.spec.whatwg.org/#dom-element-matches) нічого не шукає, він просто перевіряє, чи відповідає `elem` заданому CSS-селектору. Він повертає `true` або `false`.
120120

121-
Цей метод стає в пригоді, коли ми перебираємо елементи (наприклад, у масиві чи чомусь подібному) і намагаємося відфільтрувати ті, які нас цікавлять.
121+
Цей метод стає в нагоді, коли ми перебираємо елементи (наприклад, у масиві чи чомусь подібному) і намагаємося відфільтрувати ті, які нас цікавлять.
122122

123123
Наприклад:
124124

@@ -144,7 +144,7 @@
144144

145145
Метод `elem.closest(css)` шукає найближчого предка, який відповідає CSS-селектору. Сам `elem` також включається в пошук.
146146

147-
Іншими словами, метод `closest` підіймається від елемента і перевіряє кожного з батьків. Якщо він збігається з селектором, пошук припиняється, і повертається предок.
147+
Іншими словами, метод `closest` йде вгору від елемента і перевіряє кожного з батьківських елементів. Якщо він відповідає заданому селектору, пошук припиняється, і повертається знайдений предок.
148148

149149
Наприклад:
150150

@@ -174,10 +174,10 @@
174174

175175
Сьогодні вони здебільшого історичні, оскільки `querySelector` є потужнішим і коротшим для написання.
176176

177-
Тому тут ми розглянемо їх переважно для повноти, тоді як ви все ще можете знайти їх у старому коді.
177+
Тому тут ми розглянемо їх переважно для повноти, тоді як ви все ще можете знайти їх у старих скриптах.
178178

179-
- `elem.getElementsByTagName(tag)` шукає елементи з заданим тегом і повертає їх колекцію. Параметр `tag` також може бути зірочкою `"*"` для "будь-яких тегів".
180-
- `elem.getElementsByClassName(className)` повертає елементи, які мають заданий CSS-клас.
179+
- `elem.getElementsByTagName(tag)` шукає елементи з заданим тегом і повертає колекцію цих елементів. Параметр `tag` також може бути зірочкою `"*"` для "будь-яких тегів".
180+
- `elem.getElementsByClassName(className)` повертає елементи, які мають вказаний CSS-клас.
181181
- `document.getElementsByName(name)` повертає елементи з заданим атрибутом `name` для всього документа. Використовується дуже рідко.
182182

183183
Наприклад:
@@ -219,9 +219,9 @@ let divs = document.getElementsByTagName('div');
219219
```
220220

221221
```warn header="Не забуваємо про літеру `\"s\"`!"
222-
Розробники початківці іноді забувають про літеру `"s"`. Тобто вони намагаються викликати `getElementByTagName` замість <code>getElement<b>s</b>ByTagName</code>.
222+
У новачків у розробці іноді трапляються випадки, коли вони забувають про літеру `"s"`. Тобто вони намагаються викликати метод `getElementByTagName` замість <code>getElement<b>s</b>ByTagName</code>.
223223

224-
Літера `"s"` відсутня в `getElementById`, оскільки повертає один елемент. Але `getElementsByTagName` повертає колекцію елементів, тому всередині є `"s"`.
224+
Літера `"s"` відсутня в назві методу `getElementById`, оскільки він повертає один елемент. А `getElementsByTagName` повертає колекцію елементів, тому всередині є `"s"`.
225225
```
226226
227227
````warn header="Повертає колекцію, а не елемент!"
@@ -363,12 +363,12 @@ document.getElementsByTagName('input')[0].value = 5;
363363
</tbody>
364364
</table>
365365
366-
Найчастіше використовуються `querySelector` і `querySelectorAll`, але `getElement(s)By*` може бути корисним час від часу або знаходитися в старому коді.
366+
Найчастіше використовуються `querySelector` і `querySelectorAll`, але `getElement(s)By*` може бути корисним час від часу або зустрічатися в старих скриптах.
367367
368368
Крім того:
369369
370-
- `elem.matches(css)` існує для того, щоб перевірити, чи відповідає `elem` заданому CSS-селектору.
371-
- `elem.closest(css)` існує для того, щоб шукати найближчого предка, який відповідає заданому CSS-селектору. Сам `elem` також перевіряється.
370+
- Існує метод `elem.matches(css)` , який перевіряє, чи відповідає `elem` заданому CSS-селектору.
371+
- Існує метод `elem.closest(css)` , який шукає найближчого предка, який відповідає заданому CSS-селектору. Сам `elem` також перевіряється.
372372
373373
І згадаймо тут ще один метод перевірки взаємовідносин нащадок-предок, оскільки він іноді стає в нагоді:
374374
- `elemA.contains(elemB)` повертає true, якщо `elemB` знаходиться всередині `elemA` (нащадок `elemA`) або коли `elemA==elemB`.

0 commit comments

Comments
 (0)