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/99-ui-misc/02-selection-range/article.md
+23-23Lines changed: 23 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,13 +6,13 @@ libs:
6
6
7
7
# Selection і Range
8
8
9
-
У цьому розділі ми розглянемо виділення у документі та в полях форми, наприклад в ,`<input>`.
9
+
У цьому розділі ми розглянемо виділення у документі та в полях форми, наприклад, в `<input>`.
10
10
11
11
JavaScript може отримати доступ до наявного виділення тексту, вибирати/скасовувати виділення вузлів DOM повністю або частково, видаляти вибраний вміст із документа, або обгорнути його в тег тощо.
12
12
13
13
В кінці розділу ми підготували кілька готових рішень для типових задач (розділ "Підсумки"). Цілком можливо, цього буде достатньо щоб задовольнити всі ваші поточні потреби, проте ви отримаєте набагато більше, якщо прочитаєте статтю повністю.
14
14
15
-
З об’єктами `Range` та `Selection` досить легко можнарозібратись, і тоді вам не знадобляться готові рішення для розв'язання будь-якої задачі.
15
+
З об’єктами `Range` та `Selection`можна розібратись досить легко, і тоді вам не знадобляться готові рішення для розв'язання задач.
-The starting point has `<p>`as the parent `node`, and`0`as the offset.
111
+
-Початкова точка має `<p>`як батьківський `node` і`0`як `offset`.
112
112
113
-
So we can set it as`range.setStart(p, 0)`.
114
-
-The ending point also has `<p>`as the parent `node`, but`2`as the offset (it specifies the range up to, but not including`offset`).
113
+
Тому ми можемо встановити його як`range.setStart(p, 0)`.
114
+
-Кінцева точка також має `<p>`як батьківський `node`, але`2`як `offset` (вона вказує діапазон до, але не включаючи`offset`).
115
115
116
-
So we can set it as`range.setEnd(p, 2)`.
116
+
Тому ми можемо встановити його як`range.setEnd(p, 2)`.
117
117
118
-
Here's the demo. If you run it, you can see that the text gets selected:
118
+
Ось демо. Якщо ви запустите його, ви побачите, що текст буде виділено:
119
119
120
120
```html run
121
121
<pid="p">Example: <i>italic</i> and <b>bold</b></p>
@@ -128,15 +128,15 @@ Here's the demo. If you run it, you can see that the text gets selected:
128
128
range.setEnd(p, 2);
129
129
*/!*
130
130
131
-
// toString of a range returns its content as text, without tags
131
+
// toString діапазону повертає його вміст у вигляді тексту без тегів
132
132
console.log(range); // Example: italic
133
133
134
-
//apply this range for document selection (explained later below)
134
+
//застосуємо цей діапазон для виділення в document (пояснюється нижче)
135
135
document.getSelection().addRange(range);
136
136
</script>
137
137
```
138
138
139
-
Here's a more flexible test stand where you can set range start/end numbers and explore other variants:
139
+
Ось гнучкіший тестовий приклад, де ви можете встановити початкові/кінцеві номери діапазону та дослідити інші варіанти:
140
140
141
141
```html run autorun
142
142
<pid="p">Example: <i>italic</i> and <b>bold</b></p>
@@ -152,32 +152,32 @@ From <input id="start" type="number" value=1> – To <input id="end" type="numbe
152
152
range.setEnd(p, end.value);
153
153
*/!*
154
154
155
-
//apply the selection, explained later below
155
+
//застосувати виділення, поясненюється нижче
156
156
document.getSelection().removeAllRanges();
157
157
document.getSelection().addRange(range);
158
158
};
159
159
</script>
160
160
```
161
161
162
-
E.g. selecting in the same`<p>`from offset `1`to`4`gives us the range `<i>italic</i> and <b>bold</b>`:
162
+
Наприклад, виділення у тому самому`<p>`від `offset``1`до`4`дає нам діапазон `<i>курсив</i> і <b>жирний</b>`:
163
163
164
164

165
165
166
-
```smart header="Starting and ending nodes can be different"
167
-
We don't have to use the same node in `setStart` and `setEnd`. A range may span across many unrelated nodes. It's only important that the end is after the start in the document.
166
+
```smart header="Початковий і кінцевий вузли можуть бути різними"
167
+
Нам не потрібно використовувати однаковий вузол у `setStart` і `setEnd`. Діапазон може охоплювати багато непов’язаних вузлів. Важливо лише, щоб кінець був після початку в документі.
168
168
```
169
169
170
-
### Selecting a bigger fragment
170
+
### Виділення більшого фрагмента
171
171
172
-
Let's make a bigger selection in our example, like this:
172
+
Давайте збільшемо розмір виділеного фрагмента:
173
173
174
174

175
175
176
-
We already know how to do that. We just need to set the start and the end as a relative offset in text nodes.
176
+
Ми вже знаємо, як це зробити. Нам просто потрібно встановити початок і кінець як відносне зміщення в текстових вузлах.
177
177
178
-
We need to create a range, that:
179
-
-starts from position 2 in `<p>`first child (taking all but two first letters of "Ex<b>ample:</b> ")
180
-
-ends at the position 3 in`<b>`first child (taking first three letters of "<b>bol</b>d", but no more):
178
+
Нам потрібно створити діапазон, який:
179
+
-починається з позиції 2 у першому дочірньому вузлі елемента `<p>`(беручи всі, крім двох перших літер "Ex<b>ample:</b> ")
180
+
-закінчується на позиції 3 у`<b>`в першому дочірньому вузлі (бере перші три літери "<b>bol</b>d", але не більше):
181
181
182
182
```html run
183
183
<pid="p">Example: <i>italic</i> and <b>bold</b></p>
@@ -190,14 +190,14 @@ We need to create a range, that:
190
190
191
191
console.log(range); // ample: italic and bol
192
192
193
-
//use this range for selection (explained later)
193
+
//застосуємо цей діапазон для виділення в document (пояснюється нижче)
194
194
window.getSelection().addRange(range);
195
195
</script>
196
196
```
197
197
198
-
As you can see, it's fairly easy to make a range of whatever we want.
198
+
Як бачите, досить легко створити діапазон для будь-чого.
199
199
200
-
If we'd like to take nodes as a whole, we can pass elements in `setStart/setEnd`. Otherwise, we can work on the text level.
200
+
Ба більше, якщо ми хочемо взяти вузли як ціле, треба передати елементи замість текстових вузлів в `setStart/setEnd`. Інакше це буде працювати на рівні тексту.
0 commit comments