Skip to content

Commit 2a82af5

Browse files
authored
Update article.md
1 parent 81ba357 commit 2a82af5

1 file changed

Lines changed: 3 additions & 19 deletions

File tree

2-ui/99-ui-misc/02-selection-range/article.md

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
21
کتابخانه ها:
32
- d3
43
- domtree
5-
64
---
7-
85
# Selection and Range
96

107

@@ -28,7 +25,6 @@ let range = new Range();
2825
پس می‌توانیم مرزهای انتخاب را با استفاده از `range.setStart(node, offset)` و `range.setEnd(node, offset)` تنظیم کنیم.
2926

3027
همانطور که ممکن است حدس بزنید، در ادامه از اشیاء `Range` برای انتخاب استفاده خواهیم کرد، اما ابتدا اجازه دهید تعداد کمی از این اشیاء ایجاد کنیم.
31-
3228
### Selecting the text partially
3329

3430
نکته جالب این است که آرگومان اول `node` در هر دو روش می تواند یک text node یا یelement node عنصر باشد و معنای آرگومان دوم به آن بستگی دارد.
@@ -37,7 +33,6 @@ let range = new Range();
3733
**اگر `node` یک text nodeاست، `offset` باید موقعیتی در متن آن باشد.**
3834

3935
به عنوان مثال، با توجه به عنصر `<p>Hello</p>`، می‌توانیم محدوده حاوی حروف «ll» را به صورت زیر ایجاد کنیم:
40-
4136
```html run
4237
<p id="p">Hello</p>
4338
<script>
@@ -52,7 +47,6 @@ let range = new Range();
5247

5348
در اینجا اولین فرزند `<p>` را می گیریم (این text node است) و موقعیت های متن را در داخل آن مشخص می کنیم:
5449

55-
5650
![](range-hello-1.svg)
5751
### Selecting element nodes
5852

@@ -62,13 +56,11 @@ let range = new Range();
6256
این برای ایجاد محدوده هایی که شامل گره ها به عنوان یک کل هستند، مفید است، نه اینکه در جایی در متن خود متوقف شوند.
6357

6458
به عنوان مثال، ما یک قطعه سند پیچیده تر داریم:
65-
6659
```html autorun
6760
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
6861
```
6962

7063
در اینجا ساختار DOM آن با هر دو گره عنصر و متن آمده است:
71-
7264
<div class="select-p-domtree"></div>
7365

7466
<script>
@@ -107,7 +99,6 @@ drawHtmlTree(selectPDomtree, 'div.select-p-domtree', 690, 320);
10799

108100

109101
همانطور که می بینیم، این عبارت دقیقاً از دو فرزند `<p>` با نمایه های `0` و `1` تشکیل شده است:
110-
111102
![](range-example-p-0-1.svg)
112103

113104

@@ -119,7 +110,6 @@ drawHtmlTree(selectPDomtree, 'div.select-p-domtree', 690, 320);
119110
بنابراین می‌توانیم آن را به‌عنوان `range.setEnd(p, 2)` تنظیم کنیم.
120111

121112
در اینجا نسخه ی نمایشی است. اگر آن را اجرا کنید، می بینید که متن انتخاب شده است:
122-
123113
```html run
124114
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
125115

@@ -140,7 +130,6 @@ drawHtmlTree(selectPDomtree, 'div.select-p-domtree', 690, 320);
140130
```
141131

142132
در اینجا یک پایه تست انعطاف‌پذیرتر وجود دارد که در آن می‌توانید اعداد شروع/پایان محدوده را تنظیم کنید و انواع دیگر را بررسی کنیدد:
143-
144133
```html run autorun
145134
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
146135

@@ -163,7 +152,6 @@ From <input id="start" type="number" value=1> – To <input id="end" type="numbe
163152
```
164153

165154
به عنوان مثال، انتخاب در همان `<p>` از آفست `1` تا `4`، محدوده `<i>italic</i> and <b>bold</b>` را به ما می‌دهد:
166-
167155
![](range-example-p-1-3.svg)
168156

169157

@@ -174,17 +162,13 @@ From <input id="start" type="number" value=1> – To <input id="end" type="numbe
174162
### Selecting a bigger fragment
175163

176164
بیایید در مثال خود یک انتخاب بزرگتر انجام دهیم، مانند این:
177-
178165
![](range-example-p-2-b-3.svg)
179166

180-
181-
182167
ما قبلاً می دانیم که چگونه این کار را انجام دهیم. فقط باید شروع و پایان را به عنوان یک افست نسبی در گره های متنی تنظیم کنیم.
183168

184169
ما باید یک محدوده ایجاد کنیم، که:
185170
- از موقعیت 2 در `<p>` فرزند اول شروع می‌شود (با گرفتن همه حرف‌های اول «مثال<b>ample:</b>» به جز دو حرف اول)
186171
- در `<b>`فرزند اول به موقعیت 3 ختم می شود (با گرفتن سه حرف اول "<b>bol</b>d"، اما نه بیشتر):
187-
188172
```html run
189173
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
190174

@@ -206,7 +190,6 @@ From <input id="start" type="number" value=1> – To <input id="end" type="numbe
206190
اگر می‌خواهیم گره‌ها را به‌عنوان یک کل بگیریم، می‌توانیم عناصر را در `setStart/setEnd` ارسال کنیم. در غیر این صورت می توانیم در سطح متن کار کنیم.
207191

208192
## Range properties
209-
210193
شی range که در مثال بالا ایجاد کردیم دارای ویژگی های زیر است:
211194

212195
![](range-example-p-2-b-3-range.svg)
@@ -416,6 +399,7 @@ From <input id="from" disabled> – To <input id="to" disabled>
416399
417400
1. می‌توانیم از `document.getSelection().toString()` برای دریافت آن به عنوان متن استفاده کنیم.
418401
2. در غیر این صورت، برای کپی کردن DOM کامل، به عنوان مثال. اگر نیاز به قالب‌بندی داشته باشیم، می‌توانیم محدوده‌های زیربنایی را با `getRangeAt(...)` دریافت کنیم. یک شی `Range` به نوبه خود دارای متد `cloneContents()` است که محتوای آن را شبیه‌سازی می‌کند و به عنوان شی `DocumentFragment` برمی‌گرداند، که می‌توانیم آن را در جای دیگری درج کنیم.
402+
3.
419403
420404
در اینجا نسخه ی نمایشی کپی کردن محتوای انتخاب شده به عنوان متن و به عنوان گره های DOM آمده است:
421405
@@ -454,6 +438,7 @@ As text: <span id="astext"></span>
454438
- `removeAllRanges()` -- حذف همه محدوده ها.
455439
- `empty()` -- نام مستعار `removeAllRanges`.
456440
441+
457442
همچنین روش‌های آسانی برای دستکاری مستقیم محدوده انتخاب، بدون فراخوانی `Range` میانی وجود دارد:
458443
459444
- `collapse(node, offset)` -- محدوده انتخاب شده را با یک محدوده جدید جایگزین کنید که در "گره" داده شده شروع و پایان می یابد، در موقعیت "offset".
@@ -481,7 +466,6 @@ As text: <span id="astext"></span>
481466
```
482467
483468
همین مورد با استفاده از محدوده ها:
484-
485469
```html run
486470
<p id="p">Select me: <i>italic</i> and <b>bold</b></p>
487471
@@ -587,6 +571,7 @@ Focus on me, the cursor will be at position 10.
587571
588572
### Example: modifying selection
589573
574+
590575
برای تغییر محتوای انتخابی، می‌توانیم از روش `input.setRangeText()` استفاده کنیم. البته، می‌توانیم `selectionStart/End` را بخوانیم و با آگاهی از انتخاب، زیررشته مربوط به `value` را تغییر دهیم، اما `setRangeText` قدرتمندتر و اغلب راحت‌تر است.
591576
592577
این یک روش تا حدودی پیچیده است. در ساده ترین شکل تک آرگومان خود، جایگزین محدوده انتخابی کاربر می شود و انتخاب را حذف می کند.
@@ -630,7 +615,6 @@ button.onclick = () => {
630615
631616
### Example: insert at cursor
632617
633-
634618
اگر چیزی انتخاب نشده باشد، یا از `start` و `end` مساوی در `setRangeText` استفاده کنیم، آنگاه متن جدید فقط درج می‌شود، چیزی حذف نمی‌شود.
635619
636620
همچنین می‌توانیم چیزی را «در مکان‌نما» با استفاده از `setRangeText` وارد کنیم.

0 commit comments

Comments
 (0)