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
در اینجا یک پایه تست انعطافپذیرتر وجود دارد که در آن میتوانید اعداد شروع/پایان محدوده را تنظیم کنید و انواع دیگر را بررسی کنیدد:
141
+
134
142
```html run autorun
135
143
<pid="p">Example: <i>italic</i> and <b>bold</b></p>
136
144
@@ -153,8 +161,8 @@ From <input id="start" type="number" value=1> – To <input id="end" type="numbe
153
161
```
154
162
155
163
به عنوان مثال، انتخاب در همان `<p>` از آفست `1` تا `4`، محدوده `<i>italic</i> and <b>bold</b>` را به ما میدهد:
156
-

157
164
165
+

158
166
159
167
```smart header="گره های شروع و پایان می توانند متفاوت باشند"
160
168
ما مجبور نیستیم از همان گره در «setStart» و «setEnd» استفاده کنیم. یک محدوده ممکن است در بسیاری از گرههای غیرمرتبط باشد. فقط مهم است که پایان آن پس از شروع در سند باشد.
@@ -163,11 +171,13 @@ From <input id="start" type="number" value=1> – To <input id="end" type="numbe
163
171
### Selecting a bigger fragment
164
172
165
173
بیایید در مثال خود یک انتخاب بزرگتر انجام دهیم، مانند این:
174
+
166
175

167
176
168
177
ما قبلاً می دانیم که چگونه این کار را انجام دهیم. فقط باید شروع و پایان را به عنوان یک افست نسبی در گره های متنی تنظیم کنیم.
169
178
170
179
ما باید یک محدوده ایجاد کنیم، که:
180
+
171
181
- از موقعیت 2 در `<p>` فرزند اول شروع میشود (با گرفتن همه حرفهای اول «مثال<b>ample:</b>» به جز دو حرف اول)
172
182
- در `<b>`فرزند اول به موقعیت 3 ختم می شود (با گرفتن سه حرف اول "<b>bol</b>d"، اما نه بیشتر):
173
183
```html run
@@ -191,11 +201,11 @@ From <input id="start" type="number" value=1> – To <input id="end" type="numbe
191
201
اگر میخواهیم گرهها را بهعنوان یک کل بگیریم، میتوانیم عناصر را در `setStart/setEnd` ارسال کنیم. در غیر این صورت می توانیم در سطح متن کار کنیم.
192
202
193
203
## Range properties
204
+
194
205
شی range که در مثال بالا ایجاد کردیم دارای ویژگی های زیر است:
195
206
196
207

197
208
198
-
199
209
-`startContainer`، `startOffset` - گره و افست شروع،
200
210
- در مثال بالا: اولین گره متن داخل `<p>` و `2`.
201
211
-`endContainer`، `endOffset` - گره و افست انتهایی،
@@ -314,6 +324,8 @@ Click buttons to run methods on the selection, "resetExample" to reset it.
314
324
315
325
انتخاب سند با شی `Selection` نشان داده می شود که می تواند به عنوان `window.getSelection()` یا `document.getSelection()` به دست آید. یک انتخاب ممکن است شامل محدوده صفر یا بیشتر باشد. حداقل،specification](https://www.w3.org/TR/selection-api/) این را می گوید. اگرچه در عمل، فقط فایرفاکس اجازه می دهد تا با استفاده از `key:Ctrl+click` (`key:Cmd+click` برای Mac)، چندین محدوده را در سند انتخاب کنید.
316
326
327
+
در اینجا یک اسکرین شات از یک انتخاب با 3 محدوده، ساخته شده در فایرفاکس آمده است:
328
+
317
329

318
330
319
331
سایر مرورگرها حداکثر 1 محدوده را پشتیبانی می کنند. همانطور که خواهیم دید، برخی از روش های `Selection` نشان می دهد که ممکن است محدوده های زیادی وجود داشته باشد، اما باز هم، در همه مرورگرها به جز فایرفاکس، حداکثر 1 وجود دارد.
@@ -326,7 +338,6 @@ Click buttons to run methods on the selection, "resetExample" to reset it.
326
338
327
339
328
340
همانطور که گفته شد، یک انتخاب ممکن است در تئوری شامل چندین محدوده باشد. ما می توانیم این اشیاء محدوده را با استفاده از روش بدست آوریم:
329
-
330
341
-`getRangeAt(i)` -- محدوده i-ام را دریافت کنید که از `0` شروع می شود. در همه مرورگرها به جز فایرفاکس، فقط «0» استفاده می شود.
331
342
332
343
همچنین، ویژگی هایی وجود دارد که اغلب راحتی بهتری را ارائه می دهند.
@@ -354,7 +365,6 @@ Click buttons to run methods on the selection, "resetExample" to reset it.
354
365
انتخاب چیزی با ماوس را می توان در هر دو جهت انجام داد: "left-to-right" یا "right-to-left".
355
366
356
367
به عبارت دیگر، وقتی دکمه ماوس را فشار داده و سپس در سند به جلو حرکت می کند، انتهای آن (focus) بعد از شروع آن (anchor) خواهد بود.
357
-
358
368
به عنوان مثال. اگر کاربر شروع به انتخاب با ماوس کند و از "مثال" به "مورب" برود:
359
369
360
370

@@ -367,6 +377,7 @@ Click buttons to run methods on the selection, "resetExample" to reset it.
367
377
## Selection events
368
378
369
379
رویدادهایی برای پیگیری انتخاب وجود دارد:
380
+
370
381
-`elem.onselectstart` -- زمانی که یک انتخاب *شروع می شود* به طور خاص روی عنصر `elem` (یا داخل آن). به عنوان مثال، زمانی که کاربر دکمه ماوس را روی آن فشار می دهد و شروع به حرکت اشاره گر می کند.
371
382
- جلوگیری از عمل پیش فرض شروع انتخاب را لغو می کند. بنابراین شروع انتخاب از این عنصر غیرممکن می شود، اما عنصر همچنان قابل انتخاب است. بازدیدکننده فقط باید انتخاب را از جای دیگری شروع کند.
372
383
-`document.onselectionchange` - هر زمان که یک انتخاب تغییر کند یا شروع شود.
@@ -397,7 +408,6 @@ From <input id="from" disabled> – To <input id="to" disabled>
397
408
398
409
دو روش برای کپی کردن محتوای انتخابی وجود دارد:
399
410
400
-
401
411
1. میتوانیم از `document.getSelection().toString()` برای دریافت آن به عنوان متن استفاده کنیم.
402
412
2. در غیر این صورت، برای کپی کردن DOM کامل، به عنوان مثال. اگر نیاز به قالببندی داشته باشیم، میتوانیم محدودههای زیربنایی را با `getRangeAt(...)` دریافت کنیم. یک شی `Range` به نوبه خود دارای متد `cloneContents()` است که محتوای آن را شبیهسازی میکند و به عنوان شی `DocumentFragment` برمیگرداند، که میتوانیم آن را در جای دیگری درج کنیم.
403
413
3.
@@ -431,8 +441,6 @@ As text: <span id="astext"></span>
431
441
## Selection methods
432
442
433
443
ا می توانیم با افزودن/حذف محدوده ها با انتخاب کار کنیم:
434
-
435
-
436
444
-`getRangeAt(i)`-- محدوده i-ام را دریافت کنید که از `0` شروع می شود. در همه مرورگرها به جز فایرفاکس، فقط `0` استفاده می شود.
437
445
-`addRange(range)`--`range` را به انتخاب اضافه کنید. همه مرورگرها به جز فایرفاکس تماس را نادیده می گیرند، در صورتی که انتخاب از قبل دارای یک محدوده مرتبط باشد.
438
446
-`removeRange(range)`--`range` را از انتخاب حذف کنید.
@@ -454,7 +462,6 @@ As text: <span id="astext"></span>
454
462
455
463
456
464
برای اکثر وظایف، این روشها خوب هستند، نیازی به دسترسی به شی `Range` زیرین نیست.
457
-
458
465
به عنوان مثال، انتخاب کل محتوای پاراگراف `<p>`:
459
466
460
467
```html run
@@ -467,6 +474,7 @@ As text: <span id="astext"></span>
467
474
```
468
475
469
476
همین مورد با استفاده از محدوده ها:
477
+
470
478
```html run
471
479
<p id="p">Select me: <i>italic</i> and <b>bold</b></p>
472
480
@@ -493,6 +501,7 @@ The exception is some selection methods, that replace the existing selection, su
493
501
-`input.selectionStart`-- موقعیت شروع انتخاب (قابل نوشتن)،
494
502
-`input.selectionEnd`-- موقعیت انتهای انتخاب (قابل نوشتن)،
495
503
-`input.selectionDirection`-- جهت انتخاب، یکی از:"backward"، "backward" یا "none" (به عنوان مثال اگر با دوبار کلیک ماوس انتخاب شده باشد)،
504
+
496
505
497
506
(رویداد ها)Events:
498
507
-`input.onselect`-- هنگامی که چیزی انتخاب می شود فعال می شود.
@@ -507,12 +516,6 @@ The exception is some selection methods, that replace the existing selection, su
507
516
508
517
آخرین آرگومان، `selectionMode`، نحوه تنظیم انتخاب پس از جایگزینی متن را تعیین میکند. مقادیر ممکن عبارتند از:
509
518
510
-
-`"select"`-- the newly inserted text will be selected.
511
-
-`"start"`-- the selection range collapses just before the inserted text (the cursor will be immediately before it).
512
-
-`"end"`-- the selection range collapses just after the inserted text (the cursor will be right after it).
513
-
-`"preserve"`-- attempts to preserve the selection. This is the default.
514
-
515
-
Now let's see these methods in action.
516
519
-`"select"`-- متن درج شده جدید انتخاب خواهد شد.
517
520
-`"start"`-- محدوده انتخاب درست قبل از متن درج شده جمع می شود (مکان نما بلافاصله قبل از آن خواهد بود).
518
521
-`"end"`-- محدوده انتخاب درست بعد از متن درج شده جمع می شود (مکان نما درست بعد از آن خواهد بود).
@@ -540,6 +543,8 @@ From <input id="from" disabled> – To <input id="to" disabled>
540
543
```
541
544
542
545
لطفا توجه داشته باشید:
546
+
547
+
543
548
- وقتی چیزی انتخاب میشود، `onselect` فعال میشود، اما وقتی انتخاب حذف میشود نه.
544
549
- طبق [spec](https://w3c.github.io/selection-api/#dfn-selectionchange)، رویداد `document.onselectionchange` نباید برای انتخابهای داخل یک کنترل فرم فعال شود، زیرا به مرتبط نیست انتخاب `document` و محدوده برخی از مرورگرها آن را تولید می کنند، اما ما نباید به آن تکیه کنیم.
545
550
### Example: moving cursor
@@ -576,7 +581,6 @@ Focus on me, the cursor will be at position 10.
576
581
برای تغییر محتوای انتخابی، میتوانیم از روش `input.setRangeText()` استفاده کنیم. البته، میتوانیم `selectionStart/End` را بخوانیم و با آگاهی از انتخاب، زیررشته مربوط به `value` را تغییر دهیم، اما `setRangeText` قدرتمندتر و اغلب راحتتر است.
577
582
578
583
این یک روش تا حدودی پیچیده است. در ساده ترین شکل تک آرگومان خود، جایگزین محدوده انتخابی کاربر می شود و انتخاب را حذف می کند.
579
-
580
584
به عنوان مثال، در اینجا انتخاب کاربر با `*...*` پیچیده می شود:
581
585
582
586
```html run autorun
@@ -669,7 +673,6 @@ button.onclick = () => {
669
673
این کار از شروع انتخاب روی `elem` جلوگیری میکند، اما بازدیدکننده ممکن است آن را از عنصر دیگری شروع کند و سپس به `elem` گسترش دهد.
670
674
671
675
زمانی که کنترلکننده رویداد دیگری در همان عملکرد وجود دارد که انتخاب را فعال میکند، راحت است (e.g. `mousedown`). بنابراین، برای جلوگیری از تضاد، انتخاب را غیرفعال میکنیم و همچنان اجازه میدهیم محتوای `elem` کپی شود.
672
-
673
676
5. همچنین میتوانیم انتخاب post-factum را بعد از اینکه با `document.getSelection().empty()` رخ داد پاک کنیم. این به ندرت استفاده می شود، زیرا باعث چشمک زدن ناخواسته با ظاهر شدن انتخاب می شود - ناپدید می شود.
674
677
675
678
@@ -715,5 +718,4 @@ button.onclick = () => {
715
718
selection.removeAllRanges();
716
719
selection.addRange(range);
717
720
```
718
-
719
-
و در نهایت، در مورد مکان نما. موقعیت مکان نما در عناصر قابل ویرایش، مانند `<textarea>` همیشه در ابتدا یا انتهای انتخاب است. میتوانیم با تنظیم `elem.selectionStart` و `elem.selectionEnd` از آن برای به دست آوردن موقعیت مکاننما یا حرکت مکاننما استفاده کنیم.
721
+
و در نهایت، در مورد مکان نما. موقعیت مکان نما در عناصر قابل ویرایش، مانند `<textarea>` همیشه در ابتدا یا انتهای انتخاب است. میتوانیم با تنظیم `elem.selectionStart` و `elem.selectionEnd` از آن برای به دست آوردن موقعیت مکاننما یا حرکت مکاننما استفاده کنیم.
0 commit comments