در اÛÙ ÙØµÙ Ø¨Ù Ø§ÙØªØ®Ø§Ø¨ در Ø³ÙØ¯ Ù ÙÙ
ÚÙÛÙ Ø§ÙØªØ®Ø§Ø¨ در ÙÛÙØ¯ÙØ§Û ÙØ±Ù
Ø Ù
اÙÙØ¯ <input> Ø®ÙØ§ÙÛÙ
پرداخت.
Ø¬Ø§ÙØ§ اسکرÛپت Ù Û ØªÙØ§Ùد ب٠ÛÚ© Ø§ÙØªØ®Ø§Ø¨ Ù ÙØ¬Ùد Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ú¯Ø±Ù ÙØ§Û DOM را Ø¨Ù Ø·ÙØ± Ú©ÙÛ ÛØ§ Ø¬Ø²Ø¦Û Ø§ÙØªØ®Ø§Ø¨ ÛØ§ ÙØºÙ Ø§ÙØªØ®Ø§Ø¨ Ú©ÙØ¯Ø Ù ØØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨ شد٠را از Ø³ÙØ¯ ØØ°Ù Ú©ÙØ¯Ø آ٠را در ÛÚ© Ø¨Ø±ÚØ³Ø¨ ÙØ±Ø§Ø± Ø¯ÙØ¯ Ù ØºÛØ±Ù.
Ù ÛâØªÙØ§ÙÛØ¯ Ø¯Ø³ØªÙØ± Ø§ÙØ¹Ù ÙâÙØ§ÛÛ Ø¨Ø±Ø§Û Ú©Ø§Ø±ÙØ§Û Ø±Ø§ÛØ¬ در Ø§ÙØªÙØ§Û ÙØµÙØ Ø¯Ø± بخش âSummaryâ Ø¨ÛØ§Ø¨ÛØ¯. Ø´Ø§ÛØ¯ اÛÙ ÙÛØ§Ø²ÙØ§Û ÙØ¹ÙÛ Ø´Ù Ø§ را Ù¾ÙØ´Ø´ Ø¯ÙØ¯Ø ا٠ا اگر ٠ت٠کا٠٠را Ø¨Ø®ÙØ§ÙÛØ¯Ø Ø®ÛÙÛ Ø¨ÛØ´ØªØ± ب٠دست Ø®ÙØ§ÙÛØ¯ Ø¢ÙØ±Ø¯.
Ø±ÙØ¬(range)
ÙÙÙ٠اصÙÛ Ø§ÙØªØ®Ø§Ø¨ Range Ø§Ø³ØªØ Ú©Ù Ø§Ø³Ø§Ø³Ø§Ù ÛÚ© Ø¬ÙØª "boundary points"است: Ø´Ø±ÙØ¹ Ù ØØ¯ÙØ¯Ù Ù Ù¾Ø§ÛØ§Ù Ù ØØ¯ÙدÙ.
ÛÚ© Range object بدÙ٠پاراÙ
تر ساخت٠Ù
Û Ø´ÙØ¯:
let range = new Range();
پس Ù
ÛâØªÙØ§ÙÛÙ
Ù
Ø±Ø²ÙØ§Û Ø§ÙØªØ®Ø§Ø¨ را با Ø§Ø³ØªÙØ§Ø¯Ù از range.setStart(node, offset) Ù range.setEnd(node, offset) ØªÙØ¸ÛÙ
Ú©ÙÛÙ
.
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
Ù
ک٠است ØØ¯Ø³ بزÙÛØ¯Ø در اداÙ
٠از Ø§Ø´ÛØ§Ø¡ Range Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨ Ø§Ø³ØªÙØ§Ø¯Ù Ø®ÙØ§ÙÛÙ
Ú©Ø±Ø¯Ø Ø§Ù
ا ابتدا اجاز٠دÙÛØ¯ تعداد Ú©Ù
Û Ø§Ø² اÛÙ Ø§Ø´ÛØ§Ø¡ Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛÙ
.
Ø§ÙØªØ®Ø§Ø¨ Ù ØªÙ Ø¨Ù ØµÙØ±Øª جزئÛ
ÙÚ©ØªÙ Ø¬Ø§ÙØ¨ اÛ٠است ک٠آرگÙÙ
ا٠اÙÙ node در ÙØ± Ø¯Ù Ø±ÙØ´ Ù
Û ØªÙØ§Ùد ÛÚ© text node ÛØ§ Ûelement node Ø¹ÙØµØ± باشد Ù Ù
Ø¹ÙØ§Û آرگÙÙ
ا٠دÙÙ
Ø¨Ù Ø¢Ù Ø¨Ø³ØªÚ¯Û Ø¯Ø§Ø±Ø¯.
اگر node ÛÚ© text nodeØ§Ø³ØªØ offset Ø¨Ø§ÛØ¯ Ù
ÙÙØ¹ÛØªÛ Ø¯Ø± Ù
ت٠آ٠باشد.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ با ØªÙØ¬Ù Ø¨Ù Ø¹ÙØµØ± <p>Hello</p>Ø Ù
ÛâØªÙØ§ÙÛÙ
Ù
ØØ¯ÙØ¯Ù ØØ§ÙÛ ØØ±Ù٠«ll» را Ø¨Ù ØµÙØ±Øª Ø²ÛØ± Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛÙ
:
<p id="p">Hello</p>
<script>
let range = new Range();
range.setStart(p.firstChild, 2);
range.setEnd(p.firstChild, 4);
// toString of a range returns its content as text
console.log(range); // ll
</script>
در اÛÙØ¬Ø§ اÙÙÛÙ ÙØ±Ø²Ùد <p> را Ù
Û Ú¯ÛØ±ÛÙ
(اÛÙ text node است) Ù Ù
ÙÙØ¹Ûت ÙØ§Û Ù
ت٠را در داخ٠آ٠Ù
شخص Ù
Û Ú©ÙÛÙ
:
سÙکت کرد٠node ÙØ§Û element
** Ù
ØªÙØ§ÙØ¨Ø§ÙØ اگر node ÛÚ© element node Ø§Ø³ØªØ offset Ø¨Ø§ÛØ¯ Ø´Ù
Ø§Ø±Ù ÙØ±Ø²Ùد باشد.**
اÛÙ Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ Ù ØØ¯ÙØ¯Ù ÙØ§ÛÛ Ú©Ù Ø´Ø§Ù Ù Ú¯Ø±Ù ÙØ§ ب٠عÙÙØ§Ù ÛÚ© Ú©Ù ÙØ³ØªÙØ¯Ø Ù ÙÛØ¯ Ø§Ø³ØªØ Ù٠اÛÙک٠در جاÛÛ Ø¯Ø± Ù ØªÙ Ø®ÙØ¯ ٠تÙÙÙ Ø´ÙÙØ¯.
ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ ٠ا ÛÚ© ÙØ·Ø¹Ù Ø³ÙØ¯ Ù¾ÛÚÛØ¯Ù تر دارÛÙ :
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
در اÛÙØ¬Ø§ ساختار DOM آ٠با ÙØ± Ø¯Ù Ú¯Ø±Ù Ø¹ÙØµØ± ٠٠ت٠آ٠د٠است:
Ø¨ÛØ§ÛÛØ¯ ÛÚ© Ù
ØØ¯ÙØ¯Ù Ø¨Ø±Ø§Û "Example: <i>italic</i>" بسازÛÙ
.
-
ÙÙØ·Ù Ø´Ø±ÙØ¹
<p>ب٠عÙÙØ§ÙnodeÙØ§ÙØ¯Ø Ù0ب٠عÙÙØ§Ù Ø¢ÙØ³Øª است.Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù ÛâØªÙØ§ÙÛ٠آ٠را بÙâØ¹ÙÙØ§Ù
range.setStart(p, 0)ØªÙØ¸ÛÙ Ú©ÙÛÙ . -
ÙÙØ·Ù Ù¾Ø§ÛØ§ÙÛ ÙÛØ²
<p>را ب٠عÙÙØ§ÙnodeÙØ§ÙØ¯Ø Ø§Ù Ø§2را ب٠عÙÙØ§Ù Ø¢ÙØ³Øª دارد (Ù ØØ¯Ùد٠تا را ٠شخص Ù Û Ú©ÙØ¯Ø ا٠اoffsetرا شا٠٠ÙÙ Û Ø´ÙØ¯).Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù ÛâØªÙØ§ÙÛ٠آ٠را بÙâØ¹ÙÙØ§Ù
range.setEnd(p, 2)ØªÙØ¸ÛÙ Ú©ÙÛÙ .
در اÛÙØ¬Ø§ ÙØ³Ø®Ù Û ÙÙ Ø§ÛØ´Û است. اگر آ٠را اجرا Ú©ÙÛØ¯Ø Ù Û Ø¨ÛÙÛØ¯ Ú©Ù Ù ØªÙ Ø§ÙØªØ®Ø§Ø¨ شد٠است:
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
<script>
let range = new Range();
range.setStart(p, 0);
range.setEnd(p, 2);
// toString of a range returns its content as text, without tags
console.log(range); // Example: italic
// apply this range for document selection (explained later below)
document.getSelection().addRange(range);
</script>
در اÛÙØ¬Ø§ ÛÚ© پاÛ٠تست Ø§ÙØ¹Ø·Ø§ÙâÙ¾Ø°ÛØ±ØªØ± ÙØ¬Ùد دارد ک٠در Ø¢Ù Ù ÛâØªÙØ§ÙÛØ¯ اعداد Ø´Ø±ÙØ¹/Ù¾Ø§ÛØ§Ù Ù ØØ¯Ùد٠را ØªÙØ¸ÛÙ Ú©ÙÛØ¯ ٠اÙÙØ§Ø¹ دÛگر را Ø¨Ø±Ø±Ø³Û Ú©ÙÛØ¯Ø¯:
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
From <input id="start" type="number" value=1> â To <input id="end" type="number" value=4>
<button id="button">Click to select</button>
<script>
button.onclick = () => {
let range = new Range();
range.setStart(p, start.value);
range.setEnd(p, end.value);
// apply the selection, explained later below
document.getSelection().removeAllRanges();
document.getSelection().addRange(range);
};
</script>
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ Ø§ÙØªØ®Ø§Ø¨ در ÙÙ
ا٠<p> از Ø¢ÙØ³Øª 1 تا 4Ø Ù
ØØ¯Ùد٠<i>italic</i> and <b>bold</b> را ب٠Ù
ا Ù
ÛâØ¯ÙØ¯:
٠ا Ù Ø¬Ø¨ÙØ± ÙÛØ³ØªÛ٠از Ù٠ا٠گر٠در «setStart» ٠«setEnd» Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ . ÛÚ© Ù ØØ¯Ùد٠٠٠ک٠است در Ø¨Ø³ÛØ§Ø±Û از گرÙâÙØ§Û ØºÛØ±Ù رتبط باشد. ÙÙØ· Ù Ù٠است Ú©Ù Ù¾Ø§ÛØ§Ù آ٠پس از Ø´Ø±ÙØ¹ در Ø³ÙØ¯ باشد.
سÙکت کرد٠fragment بزرگ تر
Ø¨ÛØ§ÛÛØ¯ در Ù Ø«Ø§Ù Ø®ÙØ¯ ÛÚ© Ø§ÙØªØ®Ø§Ø¨ بزرگتر Ø§ÙØ¬Ø§Ù دÙÛÙ Ø Ù Ø§ÙÙØ¯ اÛÙ:
٠ا ÙØ¨ÙØ§Ù Ù Û Ø¯Ø§ÙÛÙ Ú©Ù ÚÚ¯ÙÙ٠اÛ٠کار را Ø§ÙØ¬Ø§Ù دÙÛÙ . ÙÙØ· Ø¨Ø§ÛØ¯ Ø´Ø±ÙØ¹ Ù Ù¾Ø§ÛØ§Ù را ب٠عÙÙØ§Ù ÛÚ© Ø§ÙØ³Øª ÙØ³Ø¨Û در Ú¯Ø±Ù ÙØ§Û ٠تÙÛ ØªÙØ¸ÛÙ Ú©ÙÛÙ .
٠ا Ø¨Ø§ÛØ¯ ÛÚ© Ù ØØ¯ÙØ¯Ù Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛÙ Ø Ú©Ù:
- از Ù
ÙÙØ¹Ûت 2 در
<p>ÙØ±Ø²Ùد اÙÙ Ø´Ø±ÙØ¹ Ù ÛâØ´ÙØ¯ (با Ú¯Ø±ÙØªÙ ÙÙ Ù ØØ±ÙâÙØ§Û اÙ٠«٠ثاÙample:» ب٠جز Ø¯Ù ØØ±Ù اÙÙ) - در
<b>ÙØ±Ø²Ùد اÙ٠ب٠٠ÙÙØ¹Ûت 3 Ø®ØªÙ Ù Û Ø´ÙØ¯ (با Ú¯Ø±ÙØªÙ Ø³Ù ØØ±Ù اÙÙ âboldâØ Ø§Ù Ø§ ÙÙ Ø¨ÛØ´ØªØ±):
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
<script>
let range = new Range();
range.setStart(p.firstChild, 2);
range.setEnd(p.querySelector('b').firstChild, 3);
console.log(range); // ample: italic and bol
// use this range for selection (explained later)
window.getSelection().addRange(range);
</script>
ÙÙ Ø§ÙØ·Ùر Ú©Ù Ù Û Ø¨ÛÙÛØ¯Ø ساخت٠طÛÙ ÙØ³ÛØ¹Û Ø§Ø² ÙØ± ÚÛØ²Û Ú©Ù Ù Û Ø®ÙØ§ÙÛÙ Ø¨Ø³ÛØ§Ø± آسا٠است.
اگر Ù
ÛâØ®ÙØ§ÙÛÙ
گرÙâÙØ§ را بÙâØ¹ÙÙØ§Ù ÛÚ© Ú©Ù Ø¨Ú¯ÛØ±ÛÙ
Ø Ù
ÛâØªÙØ§ÙÛÙ
Ø¹ÙØ§ØµØ± را در setStart/setEnd ارسا٠کÙÛÙ
. در ØºÛØ± اÛÙ ØµÙØ±Øª Ù
Û ØªÙØ§ÙÛÙ
در Ø³Ø·Ø Ù
ت٠کار Ú©ÙÛÙ
.
Range ÙÛÚÚ¯Û ÙØ§Û
Ø´Û range ک٠در Ù Ø«Ø§Ù Ø¨Ø§ÙØ§ Ø§ÛØ¬Ø§Ø¯ کردÛÙ Ø¯Ø§Ø±Ø§Û ÙÛÚÚ¯Û ÙØ§Û Ø²ÛØ± است:
startContainerØstartOffsetâ Ú¯Ø±Ù Ù Ø§ÙØ³Øª Ø´Ø±ÙØ¹Ø- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§: اÙÙÛ٠گر٠Ù
ت٠داخÙ
<p>Ù2.
- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§: اÙÙÛ٠گر٠Ù
ت٠داخÙ
endContainerØendOffsetâ Ú¯Ø±Ù Ù Ø§ÙØ³Øª Ø§ÙØªÙاÛÛØ- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§: اÙÙÛ٠گر٠Ù
ت٠داخÙ
<b>Ù3.
- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§: اÙÙÛ٠گر٠Ù
ت٠داخÙ
collapsedâ booleanØtrueاگر Ù ØØ¯Ùد٠در Ù٠ا٠ÙÙØ·Ù Ø´Ø±ÙØ¹ Ù Ø¨Ù Ù¾Ø§ÛØ§Ù برسد (Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙÛÚ Ù ØØªÙاÛÛ Ø¯Ø± Ù ØØ¯ÙØ¯Ù ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯)Ø- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§:
false.
- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§:
- âcommonAncestorContainerâ â ÙØ²Ø¯ÛکترÛ٠جد Ù
شترک ÙÙ
Ù Ú¯Ø±Ù ÙØ§Û Ù
ÙØ¬Ùد در Ù
ØØ¯ÙØ¯ÙØ
- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§:
<p>.
- در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§:
Range selection ٠تد ÙØ§Û
Ø±ÙØ´âÙØ§Û Ø±Ø§ØØª Ø²ÛØ§Ø¯Û Ø¨Ø±Ø§Û Ø¯Ø³ØªÚ©Ø§Ø±Û Ù ØØ¯ÙدÙâÙØ§ ÙØ¬Ùد دارد.
ÙØ¨Ùا٠setStart Ù setEnd را Ø¯ÛØ¯ÙâØ§ÛÙ
Ø Ø¯Ø± اÛÙØ¬Ø§ Ø±ÙØ´âÙØ§Û Ù
شاب٠دÛÚ¯Ø±Û ÙØ¬Ùد دارد.
ØªÙØ¸ÛÙ Ø´Ø±ÙØ¹ Ù ØØ¯ÙدÙ:
setStart(node, offset)ØªÙØ¸ÛÙ Ø´Ø±ÙØ¹ در: Ù ÙÙØ¹ÛتoffsetدرnodesetStartBefore(node)Ø´Ø±ÙØ¹ را در: درست ÙØ¨Ù ازnodeØªÙØ¸ÛÙ Ú©ÙÛØ¯setStart(node, offset)Ù Ø¬Ù ÙØ¹Ù Ø´Ø±ÙØ¹ در: درست بعد ازnode.
ØªÙØ¸ÛÙ Ù¾Ø§ÛØ§Ù Ù ØØ¯Ùد٠(Ø±ÙØ´ ÙØ§Û ٠شابÙ)
setEnd(node, offset)Ù¾Ø§ÛØ§Ù را در: Ù ÙÙØ¹ÛتoffsetدرnodeØªÙØ¸ÛÙ Ú©ÙÛØ¯setEndBefore(node)Ù¾Ø§ÛØ§Ù را در: درست ÙØ¨Ù ازnodeØªÙØ¸ÛÙ Ú©ÙÛØ¯setEndAfter(node)Ù¾Ø§ÛØ§Ù را در: درست بعد ازnodeØªÙØ¸ÛÙ Ú©ÙÛØ¯
از ÙØ¸Ø± ÙÙÛØ setStart/setEnd Ù
ÛâØªÙØ§Ùد ÙØ± Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù
Ø¯ÙØ¯Ø اÙ
ا Ø±ÙØ´âÙØ§Û Ø¨ÛØ´ØªØ± Ø±Ø§ØØªÛ Ø¨ÛØ´ØªØ±Û را ÙØ±Ø§ÙÙ
Ù
ÛâÚ©ÙÙØ¯.
در ÙÙ
٠اÛÙ Ø±ÙØ´âÙØ§Ø node Ù
ÛâØªÙØ§Ùد ÙÙ
ÛÚ© Ù
ØªÙ ÛØ§ ÛÚ© Ú¯Ø±Ù Ø¹ÙØµØ± باشد: Ø¨Ø±Ø§Û Ú¯Ø±ÙâÙØ§Û Ù
تÙÛØ offset Ø¨Ø³ÛØ§Ø±Û از Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§ را رد Ù
ÛâÚ©ÙØ¯Ø در ØØ§ÙÛ Ú©Ù Ø¨Ø±Ø§Û Ú¯Ø±ÙâÙØ§Û Ø¹ÙØµØ± از Ø¨Ø³ÛØ§Ø±Û از گرÙâÙØ§Û ÙØ±Ø²Ùد.
ØØªÛ Ø±ÙØ´ ÙØ§Û Ø¨ÛØ´ØªØ±Û Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ Ù ØØ¯ÙدÙ:
selectNode(node)Ù ØØ¯Ùد٠را Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨ Ú©ÙnodeØªÙØ¸ÛÙ Ú©ÙÛØ¯selectNodeContents(node)Ù ØØ¯Ùد٠را Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨ Ú©Ù Ù ØØªÙÛØ§ØªnodeØªÙØ¸ÛÙ Ú©ÙÛØ¯selectNodeContents(node)اگرtoStart=trueset end=startØ Ø¯Ø± ØºÛØ± اÛÙ ØµÙØ±Øª start=end را ØªÙØ¸ÛÙ Ú©ÙÛØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù ØØ¯Ùد٠را ج٠ع Ù Û Ú©ÙØ¯cloneRange()ÛÚ© Ù ØØ¯ÙØ¯Ù Ø¬Ø¯ÛØ¯ با Ø´Ø±ÙØ¹/Ù¾Ø§ÛØ§Ù ÛÚ©Ø³Ø§Ù Ø§ÛØ¬Ø§Ø¯ Ù Û Ú©ÙØ¯
Range editing ٠تد ÙØ§Û
ÙÙÚ¯Ø§Ù Û Ú©Ù Ù ØØ¯ÙØ¯Ù Ø§ÛØ¬Ø§Ø¯ Ø´Ø¯Ø Ù ÛâØªÙØ§ÙÛÙ Ù ØØªÙØ§Û Ø¢Ù Ø±Ø§ با Ø§Ø³ØªÙØ§Ø¯Ù از اÛÙ Ø±ÙØ´âÙØ§ Ø¯Ø³ØªÚ©Ø§Ø±Û Ú©ÙÛÙ :
deleteContents()â Ù ØØªÙØ§Û Ù ØØ¯Ùد٠را از Ø³ÙØ¯ ØØ°Ù Ú©ÙÛØ¯extractContents()â Ù ØØªÙØ§Û Ù ØØ¯Ùد٠را از Ø³ÙØ¯ ØØ°Ù Ú©ÙÛØ¯ ٠ب٠عÙÙØ§Ù DocumentFragmentcloneContents()â Ù ØØªÙÛØ§Øª Ù ØØ¯Ùد٠را Ú©ÙÙÙ Ú©ÙÛØ¯ ٠ب٠عÙÙØ§Ù DocumentFragmentinsertNode(node)ânodeرا در Ø³ÙØ¯ در Ø§Ø¨ØªØ¯Ø§Û Ù ØØ¯ÙØ¯Ù ÙØ§Ø±Ø¯ Ú©ÙÛØ¯surroundContents(node)-nodeرا در Ø§Ø·Ø±Ø§Ù Ù ØØªÙØ§Û Ù ØØ¯ÙØ¯Ù ÙØ±Ø§Ø± دÙÛØ¯. Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù اÛÙ Ú©Ø§Ø±Ø Ù ØØ¯ÙØ¯Ù Ø¨Ø§ÛØ¯ Ø¯Ø§Ø±Ø§Û ÙØ± Ø¯Ù Ø¨Ø±ÚØ³Ø¨ باز Ù Ø¨Ø³ØªÙ Ø¨Ø±Ø§Û ÙÙ Ù Ø¹ÙØ§ØµØ± داخ٠آ٠باشد: ÙÛÚ Ù ØØ¯ÙØ¯Ù Ø¬Ø²Ø¦Û Ù Ø§ÙÙØ¯<i>abc.
با اÛÙ Ø±ÙØ´ ÙØ§ Ø§Ø³Ø§Ø³Ø§Ù Ù Û ØªÙØ§ÙÛÙ ÙØ± Ú©Ø§Ø±Û Ø±Ø§ با Ú¯Ø±Ù ÙØ§Û Ø§ÙØªØ®Ø§Ø¨ Ø´Ø¯Ù Ø§ÙØ¬Ø§Ù دÙÛÙ .
در اÛÙØ¬Ø§ پاÛÙ Ø¢Ø²Ù Ø§ÛØ´Û Ø¨Ø±Ø§Û Ù Ø´Ø§ÙØ¯Ù Ø¢ÙÙØ§ در ع٠٠آ٠د٠است:
Click buttons to run methods on the selection, "resetExample" to reset it.
<p id="p">Example: <i>italic</i> and <b>bold</b></p>
<p id="result"></p>
<script>
let range = new Range();
// Each demonstrated method is represented here:
let methods = {
deleteContents() {
range.deleteContents()
},
extractContents() {
let content = range.extractContents();
result.innerHTML = "";
result.append("extracted: ", content);
},
cloneContents() {
let content = range.cloneContents();
result.innerHTML = "";
result.append("cloned: ", content);
},
insertNode() {
let newNode = document.createElement('u');
newNode.innerHTML = "NEW NODE";
range.insertNode(newNode);
},
surroundContents() {
let newNode = document.createElement('u');
try {
range.surroundContents(newNode);
} catch(e) { console.log(e) }
},
resetExample() {
p.innerHTML = `Example: <i>italic</i> and <b>bold</b>`;
result.innerHTML = "";
range.setStart(p.firstChild, 2);
range.setEnd(p.querySelector('b').firstChild, 3);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
};
for(let method in methods) {
document.write(`<div><button onclick="methods.${method}()">${method}</button></div>`);
}
methods.resetExample();
</script>
Ù ÚÙÛÙ Ø±ÙØ´ ÙØ§ÛÛ Ø¨Ø±Ø§Û Ù ÙØ§ÛØ³Ù Ù ØØ¯ÙØ¯Ù ÙØ§ ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø Ø§Ù Ø§ Ø¨Ù ÙØ¯Ø±Øª از Ø¢ÙÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯. ÙÙÚ¯Ø§Ù Û Ú©Ù Ø¨Ù Ø¢ÙÙØ§ ÙÛØ§Ø² Ø¯Ø§Ø±ÛØ¯Ø ÙØ·Ùا٠ب٠spec](https://dom.spec.whatwg.org/#interface-range) ÛØ§ MDN manual ٠راجع٠کÙÛØ¯.
سÙکت کردÙ
در ÙØ§Ùع Range ÛÚ© Ø´ÛØ¡ عÙ
ÙÙ
Û Ø¨Ø±Ø§Û Ù
Ø¯ÛØ±Ûت Ù
ØØ¯ÙØ¯Ù ÙØ§Û Ø§ÙØªØ®Ø§Ø¨Û است. اگرÚÙØ Ø§ÛØ¬Ø§Ø¯ ÛÚ© Range ب٠اÛÙ Ù
عÙÛ ÙÛØ³Øª Ú©Ù Ù
ا ÛÚ© Ø§ÙØªØ®Ø§Ø¨ را رÙÛ ØµÙØÙ Ù
Û Ø¨ÛÙÛÙ
.
Ù
ا Ù
Ù
ک٠است Ø§Ø´ÛØ§Ø¡ Range Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛÙ
Ø Ø¢ÙÙØ§ را ب٠اطرا٠Ù
ÙØªÙÙ Ú©ÙÛÙ
â Ø¢ÙÙØ§ Ø¨Ù ØµÙØ±Øª Ø¨ØµØ±Û ÚÛØ²Û را ب٠تÙÙØ§ÛÛ Ø§ÙØªØ®Ø§Ø¨ ÙÙ
Û Ú©ÙÙØ¯.
Ø§ÙØªØ®Ø§Ø¨ Ø³ÙØ¯ با Ø´ÛSelectionÙØ´Ø§Ù داد٠Ù
ÛØ´Ùد Ú©Ù Ù
ÛØªÙØ§ÙØ¯ ب٠عÙÙØ§Ùwindow.getSelection()ÛØ§document.getSelection()ب٠دست Ø¢ÛØ¯. ÛÚ© Ø§ÙØªØ®Ø§Ø¨ Ù
Ù
ک٠است شاÙ
Ù Ù
ØØ¯ÙØ¯Ù ØµÙØ± ÛØ§Ø¨Ûشتر باشد. ØØ¯Ø§ÙÙØ specification](https://www.w3.org/TR/selection-api/) اÛ٠راÙ
ÛÚ¯ÙÛØ¯.اگرÚ٠درعÙ
ÙØ ÙÙØ· ÙØ§ÛØ±ÙØ§Ú©Ø³ اجاز٠Ù
ÛØ¯Ùد تا با Ø§Ø³ØªÙØ§Ø¯Ù ازCtrl+click (Cmd+click Ø¨Ø±Ø§Û Mac)Ø ÚÙØ¯ÛÙ Ù
ØØ¯Ùد٠را در Ø³ÙØ¯ Ø§ÙØªØ®Ø§Ø¨ Ú©ÙÛØ¯.
در اÛÙØ¬Ø§ ÛÚ© اسکرÛ٠شات از ÛÚ© Ø§ÙØªØ®Ø§Ø¨ با 3 Ù ØØ¯ÙØ¯ÙØ ساخت٠شد٠در ÙØ§ÛØ±ÙØ§Ú©Ø³ آ٠د٠است:
Ø³Ø§ÛØ± Ù
Ø±ÙØ±Ú¯Ø±Ùا ØØ¯Ø§Ú©Ø«Ø± 1 Ù
ØØ¯Ùد٠را Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ù
Û Ú©ÙÙØ¯. ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ø®ÙØ§ÙÛÙ
Ø¯ÛØ¯Ø Ø¨Ø±Ø®Û Ø§Ø² Ø±ÙØ´ ÙØ§Û Selection ÙØ´Ø§Ù Ù
Û Ø¯ÙØ¯ Ú©Ù Ù
Ù
ک٠است Ù
ØØ¯ÙØ¯Ù ÙØ§Û Ø²ÛØ§Ø¯Û ÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø§Ù
ا باز ÙÙ
Ø Ø¯Ø± ÙÙ
Ù Ù
Ø±ÙØ±Ú¯Ø±Ùا ب٠جز ÙØ§ÛØ±ÙØ§Ú©Ø³Ø ØØ¯Ø§Ú©Ø«Ø± 1 ÙØ¬Ùد دارد.
در اÛÙØ¬Ø§ ÛÚ© ÙØ³Ø®Ù ÙÙ Ø§ÛØ´Û Ú©ÙÚÚ© ÙØ¬Ùد دارد Ú©Ù Ø§ÙØªØ®Ø§Ø¨ ÙØ¹ÙÛ (ÚÛØ²Û را Ø§ÙØªØ®Ø§Ø¨ Ú©ÙÛØ¯ Ù Ú©ÙÛÚ© Ú©ÙÛØ¯) را ب٠عÙÙØ§Ù Ù ØªÙ ÙØ´Ø§Ù Ù Û Ø¯ÙØ¯:
Selection ÙÛÚÚ¯Û ÙØ§Û
ÙÙ Ø§ÙØ·Ùر Ú©Ù Ú¯ÙØªÙ Ø´Ø¯Ø ÛÚ© Ø§ÙØªØ®Ø§Ø¨ ٠٠ک٠است در ØªØ¦ÙØ±Û شا٠٠ÚÙØ¯ÛÙ Ù ØØ¯Ùد٠باشد. ٠ا Ù Û ØªÙØ§ÙÛ٠اÛÙ Ø§Ø´ÛØ§Ø¡ Ù ØØ¯Ùد٠را با Ø§Ø³ØªÙØ§Ø¯Ù از Ø±ÙØ´ بدست Ø¢ÙØ±ÛÙ :
getRangeAt(i)â Ù ØØ¯Ùد٠i-ا٠را Ø¯Ø±ÛØ§Ùت Ú©ÙÛØ¯ ک٠از0Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯. در ÙÙ Ù Ù Ø±ÙØ±Ú¯Ø±Ùا ب٠جز ÙØ§ÛØ±ÙØ§Ú©Ø³Ø ÙÙØ· «0» Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯.
ÙÙ ÚÙÛÙØ ÙÛÚÚ¯Û ÙØ§ÛÛ ÙØ¬Ùد دارد Ú©Ù Ø§ØºÙØ¨ Ø±Ø§ØØªÛ Ø¨ÙØªØ±Û را Ø§Ø±Ø§Ø¦Ù Ù Û Ø¯ÙÙØ¯.
٠شاب٠ÛÚ© Ù ØØ¯ÙØ¯ÙØ ÛÚ© Ø´Û Ø§ÙØªØ®Ø§Ø¨ ÛÚ© Ø´Ø±ÙØ¹ Ø¨Ù ÙØ§Ù âanchorâ Ù Ù¾Ø§ÛØ§Ù Ø¨Ù ÙØ§Ù âfocusâ Ø¯Ø§Ø±Ø¯.
ÙÛÚÚ¯Û ÙØ§Û اصÙÛ Ø§ÙØªØ®Ø§Ø¨ Ø¹Ø¨Ø§Ø±ØªÙØ¯ از:
-anchorNode â Ú¯Ø±Ù Ø§Û Ú©Ù Ø§ÙØªØ®Ø§Ø¨ Ø´Ø±ÙØ¹ Ù
Û Ø´ÙØ¯Ø
anchorOffsetâ Ø¢Ùست درanchorNodeجاÛÛ Ú©Ù Ø§ÙØªØ®Ø§Ø¨ Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯ØfocusNodeâ Ú¯Ø±Ù Ø§Û Ú©Ù Ø¯Ø± Ø¢Ù Ø§ÙØªØ®Ø§Ø¨ Ø¨Ù Ù¾Ø§ÛØ§Ù Ù Û Ø±Ø³Ø¯Ø -focusOffsetâ Ø¢Ùست درfocusNodeجاÛÛ Ú©Ù Ø§ÙØªØ®Ø§Ø¨ Ø¨Ù Ù¾Ø§ÛØ§Ù Ù Û Ø±Ø³Ø¯ØisCollapsedâtrueاگر Ø§ÙØªØ®Ø§Ø¨ ÚÛØ²Û (Ù ØØ¯Ùد٠خاÙÛ) را Ø§ÙØªØ®Ø§Ø¨ ÙÚ©ÙØ¯ ÛØ§ ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد.rangeCountâ ØªØ¹Ø¯Ø§Ø¯ Ù ØØ¯ÙØ¯Ù ÙØ§ در Ø§ÙØªØ®Ø§Ø¨Ø ØØ¯Ø§Ú©Ø«Ø±1در ÙÙ Ù Ù Ø±ÙØ±Ú¯Ø±Ùا ب٠جز ÙØ§ÛØ±ÙØ§Ú©Ø³.
ÛÚ© ØªÙØ§Ùت Ø¨Ø³ÛØ§Ø± Ù
ÙÙ
بÛÙ selection anchor/focus Ù Range start/end
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
Û Ø¯Ø§ÙÛÙ
Ø Ø§Ø´ÛØ§Ø¡ Range ÙÙ
ÛØ´Ù Ø´Ø±ÙØ¹ Ø®ÙØ¯ را ÙØ¨Ù از Ù¾Ø§ÛØ§Ù Ø¯Ø§Ø±ÙØ¯.
Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨Ø ÙÙ ÛØ´Ù اÛÙØ·Ùر ÙÛØ³Øª.
Ø§ÙØªØ®Ø§Ø¨ ÚÛØ²Û با Ù Ø§ÙØ³ را Ù Û ØªÙØ§Ù در ÙØ± Ø¯Ù Ø¬ÙØª Ø§ÙØ¬Ø§Ù داد: âleft-to-rightâ ÛØ§ âright-to-leftâ.
ب٠عبارت دÛÚ¯Ø±Ø ÙÙØªÛ Ø¯Ú©Ù Ù Ù Ø§ÙØ³ را ÙØ´Ø§Ø± داد٠٠سپس در Ø³ÙØ¯ ب٠جÙÙ ØØ±Ú©Øª Ù Û Ú©ÙØ¯Ø Ø§ÙØªÙØ§Û Ø¢Ù (focus) بعد از Ø´Ø±ÙØ¹ Ø¢Ù (anchor) Ø®ÙØ§Ùد Ø¨ÙØ¯.
ب٠عÙÙØ§Ù ٠ثاÙ. اگر کاربر Ø´Ø±ÙØ¹ Ø¨Ù Ø§ÙØªØ®Ø§Ø¨ با Ù Ø§ÙØ³ Ú©ÙØ¯ ٠از â٠ثاÙâ Ø¨Ù âÙ ÙØ±Ø¨â Ø¨Ø±ÙØ¯:
â¦Ø§Ù ا ÙÙ ÛÙ Ø§ÙØªØ®Ø§Ø¨ را Ù Û ØªÙØ§Ù Ø¨Ù Ø¹ÙØ¨ Ø§ÙØ¬Ø§Ù داد: از âÙ ÙØ±Ø¨â ب٠â٠ثاÙâ (Ø¬ÙØª Ø¹ÙØ¨) Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯Ø سپس Ù¾Ø§ÛØ§Ù Ø¢Ù (focus) ÙØ¨Ù از Ø´Ø±ÙØ¹ (anchor) Ø®ÙØ§Ùد Ø¨ÙØ¯:
Selection رÙÛØ¯Ø§Ø¯ ÙØ§Û
رÙÛØ¯Ø§Ø¯ÙاÛÛ Ø¨Ø±Ø§Û Ù¾ÛÚ¯ÛØ±Û Ø§ÙØªØ®Ø§Ø¨ ÙØ¬Ùد دارد:
elem.onselectstartâ Ø²Ù اÙÛ Ú©Ù ÛÚ© Ø§ÙØªØ®Ø§Ø¨ Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯ Ø¨Ù Ø·ÙØ± خاص رÙÛ Ø¹ÙØµØ±elem(ÛØ§ داخ٠آÙ). ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ ز٠اÙÛ Ú©Ù Ú©Ø§Ø±Ø¨Ø± Ø¯Ú©Ù Ù Ù Ø§ÙØ³ را رÙÛ Ø¢Ù ÙØ´Ø§Ø± Ù Û Ø¯ÙØ¯ Ù Ø´Ø±ÙØ¹ Ø¨Ù ØØ±Ú©Øª اشار٠گر Ù Û Ú©ÙØ¯.- جÙÙÚ¯ÛØ±Û از Ø¹Ù Ù Ù¾ÛØ´ ÙØ±Ø¶ Ø´Ø±ÙØ¹ Ø§ÙØªØ®Ø§Ø¨ را ÙØºÙ Ù Û Ú©ÙØ¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø´Ø±ÙØ¹ Ø§ÙØªØ®Ø§Ø¨ از اÛÙ Ø¹ÙØµØ± ØºÛØ±Ù Ù Ú©Ù Ù Û Ø´ÙØ¯Ø ا٠ا Ø¹ÙØµØ± ÙÙ ÚÙØ§Ù ÙØ§Ø¨Ù Ø§ÙØªØ®Ø§Ø¨ است. Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù ÙÙØ· Ø¨Ø§ÛØ¯ Ø§ÙØªØ®Ø§Ø¨ را از Ø¬Ø§Û Ø¯ÛÚ¯Ø±Û Ø´Ø±ÙØ¹ Ú©ÙØ¯.
document.onselectionchangeâ ÙØ± ز٠ا٠ک٠ÛÚ© Ø§ÙØªØ®Ø§Ø¨ تغÛÛØ± Ú©ÙØ¯ ÛØ§ Ø´Ø±ÙØ¹ Ø´ÙØ¯.- ÙØ·ÙØ§Ù ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯: اÛÙ Ú©ÙØªØ±Ù Ú©ÙÙØ¯Ù را Ù
Û ØªÙØ§Ù ÙÙØ· رÙÛ
documentØªÙØ¸ÛÙ Ú©Ø±Ø¯Ø ÙÙ Ù Ø§ÙØªØ®Ø§Ø¨ ÙØ§Û Ù ÙØ¬Ùد در آ٠را Ø±Ø¯ÛØ§Ø¨Û Ù Û Ú©ÙØ¯.
- ÙØ·ÙØ§Ù ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯: اÛÙ Ú©ÙØªØ±Ù Ú©ÙÙØ¯Ù را Ù
Û ØªÙØ§Ù ÙÙØ· رÙÛ
Selection tracking د٠Ù
در اÛÙØ¬Ø§ ÛÚ© ÙØ³Ø®Ù ÙÙ
Ø§ÛØ´Û Ú©ÙÚÚ© است. اÛÙ Ø§ÙØªØ®Ø§Ø¨ ÙØ¹ÙÛ Ø¯Ø± document را Ø±Ø¯ÛØ§Ø¨Û Ù
Û Ú©ÙØ¯ Ù Ù
Ø±Ø²ÙØ§Û آ٠را ÙØ´Ø§Ù Ù
Û Ø¯ÙØ¯:
<p id="p">Select me: <i>italic</i> and <b>bold</b></p>
From <input id="from" disabled> â To <input id="to" disabled>
<script>
document.onselectionchange = function() {
let selection = document.getSelection();
let {anchorNode, anchorOffset, focusNode, focusOffset} = selection;
// anchorNode and focusNode are text nodes usually
from.value = `${anchorNode?.data}, offset ${anchorOffset}`;
to.value = `${focusNode?.data}, offset ${focusOffset}`;
};
</script>
Selection Ø¯Ù Ù Ú©Ù¾Û Ú©Ø±Ø¯Ù
Ø¯Ù Ø±ÙØ´ Ø¨Ø±Ø§Û Ú©Ù¾Û Ú©Ø±Ø¯Ù Ù ØØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨Û ÙØ¬Ùد دارد:
- Ù
ÛâØªÙØ§ÙÛÙ
از
document.getSelection().toString()Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت آ٠ب٠عÙÙØ§Ù Ù ØªÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ . - در ØºÛØ± اÛÙ ØµÙØ±ØªØ Ø¨Ø±Ø§Û Ú©Ù¾Û Ú©Ø±Ø¯Ù DOM کاÙ
ÙØ ب٠عÙÙØ§Ù Ù
ثاÙ. اگر ÙÛØ§Ø² Ø¨Ù ÙØ§ÙØ¨âØ¨ÙØ¯Û داشت٠باشÛÙ
Ø Ù
ÛâØªÙØ§ÙÛÙ
Ù
ØØ¯ÙدÙâÙØ§Û Ø²ÛØ±Ø¨ÙاÛÛ Ø±Ø§ با
getRangeAt(...)Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ . ÛÚ© Ø´ÛRangeب٠ÙÙØ¨Ù Ø®ÙØ¯ Ø¯Ø§Ø±Ø§Û Ù ØªØ¯cloneContents()است Ú©Ù Ù ØØªÙØ§Û Ø¢Ù Ø±Ø§ شبÛÙâØ³Ø§Ø²Û Ù ÛâÚ©ÙØ¯ ٠ب٠عÙÙØ§Ù Ø´ÛDocumentFragmentبر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯Ø Ú©Ù Ù ÛâØªÙØ§ÙÛ٠آ٠را در Ø¬Ø§Û Ø¯ÛÚ¯Ø±Û Ø¯Ø±Ø¬ Ú©ÙÛÙ .
در اÛÙØ¬Ø§ ÙØ³Ø®Ù Û ÙÙ Ø§ÛØ´Û Ú©Ù¾Û Ú©Ø±Ø¯Ù Ù ØØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨ شد٠ب٠عÙÙØ§Ù ٠ت٠٠ب٠عÙÙØ§Ù Ú¯Ø±Ù ÙØ§Û DOM آ٠د٠است:
<p id="p">Select me: <i>italic</i> and <b>bold</b></p>
Cloned: <span id="cloned"></span>
<br>
As text: <span id="astext"></span>
<script>
document.onselectionchange = function() {
let selection = document.getSelection();
cloned.innerHTML = astext.innerHTML = "";
// Clone DOM nodes from ranges (we support multiselect here)
for (let i = 0; i < selection.rangeCount; i++) {
cloned.append(selection.getRangeAt(i).cloneContents());
}
// Get as text
astext.innerHTML += selection;
};
</script>
Selection ٠تد ÙØ§Û
ا Ù Û ØªÙØ§ÙÛ٠با Ø§ÙØ²ÙدÙ/ØØ°Ù Ù ØØ¯ÙØ¯Ù ÙØ§ با Ø§ÙØªØ®Ø§Ø¨ کار Ú©ÙÛÙ :
getRangeAt(i)â Ù ØØ¯Ùد٠i-ا٠را Ø¯Ø±ÛØ§Ùت Ú©ÙÛØ¯ ک٠از0Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯. در ÙÙ Ù Ù Ø±ÙØ±Ú¯Ø±Ùا ب٠جز ÙØ§ÛØ±ÙØ§Ú©Ø³Ø ÙÙØ·0Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯.addRange(range)ârangeرا Ø¨Ù Ø§ÙØªØ®Ø§Ø¨ اضاÙÙ Ú©ÙÛØ¯. ÙÙ Ù Ù Ø±ÙØ±Ú¯Ø±Ùا ب٠جز ÙØ§ÛØ±ÙØ§Ú©Ø³ ت٠اس را ÙØ§Ø¯ÛØ¯Ù Ù Û Ú¯ÛØ±ÙØ¯Ø Ø¯Ø± ØµÙØ±ØªÛ Ú©Ù Ø§ÙØªØ®Ø§Ø¨ از ÙØ¨Ù Ø¯Ø§Ø±Ø§Û ÛÚ© Ù ØØ¯Ùد٠٠رتبط باشد.removeRange(range)ârangeرا از Ø§ÙØªØ®Ø§Ø¨ ØØ°Ù Ú©ÙÛØ¯.removeAllRanges()â ØØ°Ù ÙÙ Ù Ù ØØ¯ÙØ¯Ù ÙØ§.empty()â ÙØ§Ù ٠ستعارremoveAllRanges.
ÙÙ
ÚÙÛÙ Ø±ÙØ´âÙØ§Û آساÙÛ Ø¨Ø±Ø§Û Ø¯Ø³ØªÚ©Ø§Ø±Û Ù
ستÙÛÙ
Ù
ØØ¯ÙØ¯Ù Ø§ÙØªØ®Ø§Ø¨Ø بدÙÙ ÙØ±Ø§Ø®ÙاÙÛ Range Ù
ÛØ§ÙÛ ÙØ¬Ùد دارد:
collapse(node, offset)â Ù ØØ¯ÙØ¯Ù Ø§ÙØªØ®Ø§Ø¨ شد٠را با ÛÚ© Ù ØØ¯ÙØ¯Ù Ø¬Ø¯ÛØ¯ جاÛگزÛÙ Ú©ÙÛØ¯ ک٠در âگرÙâ Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø´Ø±ÙØ¹ Ù Ù¾Ø§ÛØ§Ù Ù Û ÛØ§Ø¨Ø¯Ø در Ù ÙÙØ¹Ûت âoffsetâ.setPosition(node, offset)â ÙØ§Ù ٠ستعارcollapse.collapseToStart()â Ø¬Ù ع کرد٠(با ÛÚ© Ù ØØ¯Ùد٠خاÙÛ Ø¬Ø§ÛگزÛÙ Ø´ÙØ¯) تا Ø´Ø±ÙØ¹ Ø§ÙØªØ®Ø§Ø¨ØcollapseToEnd()â Ø¬Ù ع کرد٠تا Ø§ÙØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨Øextend(node, offset)â ÙÙÚ©ÙØ³ Ø§ÙØªØ®Ø§Ø¨ را بÙnodeØ¯Ø§Ø¯Ù Ø´Ø¯Ù Ù ÙØªÙÙ Ú©ÙÛØ¯Ø Ù ÙÙØ¹ÛتoffsetØsetBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset)â Ø¬Ø§ÛگزÛÙ Ù ØØ¯ÙØ¯Ù Ø§ÙØªØ®Ø§Ø¨ با Ø´Ø±ÙØ¹ داد٠شدÙanchorNode/anchorOffsetÙ Ù¾Ø§ÛØ§ÙfocusNode/focusOffset. ØªÙ Ø§Ù Ù ØØªÙØ§Û Ø¨Û٠آÙÙØ§ Ø§ÙØªØ®Ø§Ø¨ شد٠است.selectAllChildren(node)â ÙÙ Ù ÙØ±Ø²Ùدا٠âگرÙâ Ø±Ø§ Ø§ÙØªØ®Ø§Ø¨ Ú©ÙÛØ¯.deleteFromDocument()â Ù ØØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨ شد٠را از Ø³ÙØ¯ ØØ°Ù Ú©ÙÛØ¯.containsNode(node, allowPartialContainment = false)â Ø¨Ø±Ø±Ø³Û Ù Û Ú©ÙØ¯ Ú©Ù Ø¢ÛØ§ Ø§ÙØªØ®Ø§Ø¨ شا٠٠ânodeâ Ø§Ø³Øª (تا ØØ¯Û اگر آرگÙ٠ا٠دÙÙ âtrueâ Ø¨Ø§Ø´Ø¯)
Ø¨Ø±Ø§Û Ø§Ú©Ø«Ø± ÙØ¸Ø§ÛÙØ اÛÙ Ø±ÙØ´âÙØ§ Ø®ÙØ¨ ÙØ³ØªÙØ¯Ø ÙÛØ§Ø²Û Ø¨Ù Ø¯Ø³ØªØ±Ø³Û Ø¨Ù Ø´Û Range Ø²ÛØ±ÛÙ ÙÛØ³Øª.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ Ø§ÙØªØ®Ø§Ø¨ Ú©Ù Ù
ØØªÙØ§Û Ù¾Ø§Ø±Ø§Ú¯Ø±Ø§Ù <p>:
<p id="p">Select me: <i>italic</i> and <b>bold</b></p>
<script>
// select from 0th child of <p> to the last child
document.getSelection().setBaseAndExtent(p, 0, p, p.childNodes.length);
</script>
ÙÙ ÛÙ Ù ÙØ±Ø¯ با Ø§Ø³ØªÙØ§Ø¯Ù از Ù ØØ¯ÙØ¯Ù ÙØ§:
<p id="p">Select me: <i>italic</i> and <b>bold</b></p>
<script>
let range = new Range();
range.selectNodeContents(p); // or selectNode(p) to select the <p> tag too
document.getSelection().removeAllRanges(); // clear existing selection if any
document.getSelection().addRange(range);
</script>
If a document selection already exists, empty it first with removeAllRanges(). And then add ranges. Otherwise, all browsers except Firefox ignore new ranges.
The exception is some selection methods, that replace the existing selection, such as setBaseAndExtent.
Selection در form controls
Ø¹ÙØ§ØµØ± ÙØ±Ù
Ø Ù
اÙÙØ¯ input Ù textarea special API for selection را بدÙÙ Ø§Ø´ÛØ§Ø¡ Selection ÛØ§ Range ارائ٠Ù
ÛâÚ©ÙÙØ¯. از Ø¢ÙØ¬Ø§ÛÛ Ú©Ù Ù
ÙØ¯Ø§Ø± ÙØ±ÙØ¯Û ÛÚ© Ù
ØªÙ Ø®Ø§ÙØµ Ø§Ø³ØªØ ÙÙ HTMLØ ÙÛØ§Ø²Û ب٠ÚÙÛÙ Ø§Ø´ÛØ§ÛÛ ÙÛØ³ØªØ ÙÙ
Ù ÚÛØ² Ø¨Ø³ÛØ§Ø± ساد٠تر است.
ÙÛÚÚ¯Û ÙØ§:
input.selectionStartâ Ù ÙÙØ¹Ûت Ø´Ø±ÙØ¹ Ø§ÙØªØ®Ø§Ø¨ (ÙØ§Ø¨Ù ÙÙØ´ØªÙ)Øinput.selectionEndâ Ù ÙÙØ¹Ûت Ø§ÙØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨ (ÙØ§Ø¨Ù ÙÙØ´ØªÙ)Øinput.selectionDirectionâ Ø¬Ùت Ø§ÙØªØ®Ø§Ø¨Ø ÛÚ©Û Ø§Ø²: âbackwardâØ âbackwardâ ÛØ§ ânoneâ (ب٠عÙÙØ§Ù ٠ثا٠اگر با Ø¯ÙØ¨Ø§Ø± Ú©ÙÛÚ© Ù Ø§ÙØ³ Ø§ÙØªØ®Ø§Ø¨ شد٠باشد)Ø
(رÙÛØ¯Ø§Ø¯ ÙØ§)Events:
input.onselectâ ÙÙÚ¯Ø§Ù Û Ú©Ù ÚÛØ²Û Ø§ÙØªØ®Ø§Ø¨ Ù Û Ø´ÙØ¯ ÙØ¹Ø§Ù Ù Û Ø´ÙØ¯.
٠تد ÙØ§:
-
input.select()â ÙÙ Ù ÚÛØ² را در Ú©ÙØªØ±Ù Ù ØªÙ Ø§ÙØªØ®Ø§Ø¨ Ù Û Ú©ÙØ¯ (Ù Û ØªÙØ§Ùدtextareaب٠جاÛinputباشد) -
input.setSelectionRange(start, end, [direction])â Ø§Ùتخاب را تغÛÛØ± دÙÛØ¯ تا از Ù ÙÙØ¹ÛØªØ´Ø±ÙØ¹ØªØ§"Ù¾Ø§ÛØ§Ùدر Ø¬ÙØª ٠عÛÙ (Ø§Ø®ØªÛØ§Ø±Û) باشد. -
input.setRangeText(replacement, [start], [end], [selectionMode])â ÛÚ© Ù ØØ¯Ùد٠از ٠ت٠را با Ù ØªÙ Ø¬Ø¯ÛØ¯ جاÛگزÛÙ Ú©ÙÛØ¯.آرگÙÙ Ø§Ù ÙØ§Û Ø§Ø®ØªÛØ§Ø±Û
Â«Ø´Ø±ÙØ¹ÙÂ«Ù¾Ø§ÛØ§ÙØ Ø¯Ø± ØµÙØ±Øª Ø§Ø±Ø§Ø¦ÙØ Ù ØØ¯ÙØ¯Ù Ø´Ø±ÙØ¹ Ù Ù¾Ø§ÛØ§Ù را ØªÙØ¸ÛÙ Ù Û Ú©ÙÙØ¯Ø در ØºÛØ± اÛÙ ØµÙØ±Øª از Ø§ÙØªØ®Ø§Ø¨ کاربر Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯.آخرÛ٠آرگÙÙ Ø§ÙØ
selectionModeØ ÙØÙÙ ØªÙØ¸ÛÙ Ø§ÙØªØ®Ø§Ø¨ پس از جاÛگزÛÙÛ Ù ØªÙ Ø±Ø§ تعÛÛÙ Ù ÛâÚ©ÙØ¯. Ù ÙØ§Ø¯Ûر Ù Ù Ú©Ù Ø¹Ø¨Ø§Ø±ØªÙØ¯ از: -
"select"â ٠ت٠درج Ø´Ø¯Ù Ø¬Ø¯ÛØ¯ Ø§ÙØªØ®Ø§Ø¨ Ø®ÙØ§Ùد شد. -
"start"â Ù ØØ¯ÙØ¯Ù Ø§ÙØªØ®Ø§Ø¨ درست ÙØ¨Ù از ٠ت٠درج شد٠ج٠ع Ù Û Ø´ÙØ¯ (٠کا٠Ù٠ا Ø¨ÙØ§ÙاصÙÙ ÙØ¨Ù از Ø¢Ù Ø®ÙØ§Ùد Ø¨ÙØ¯). -
"end"â Ù ØØ¯ÙØ¯Ù Ø§ÙØªØ®Ø§Ø¨ درست بعد از ٠ت٠درج شد٠ج٠ع Ù Û Ø´ÙØ¯ (٠کا٠Ù٠ا درست بعد از Ø¢Ù Ø®ÙØ§Ùد Ø¨ÙØ¯). -
"preserve"â ØªÙاش Ø¨Ø±Ø§Û ØÙظ Ø§ÙØªØ®Ø§Ø¨. اÛÙ Ù¾ÛØ´ ÙØ±Ø¶ است.
ØØ§Ù Ø¨ÛØ§ÛÛØ¯ اÛÙ Ø±ÙØ´ ÙØ§ را در ع٠٠ببÛÙÛÙ .
٠ثاÙ: tracking selection
Ø±Ø§Û Ù
Ø«Ø§ÙØ اÛ٠کد از رÙÛØ¯Ø§Ø¯ onselect Ø¨Ø±Ø§Û Ø±Ø¯ÛØ§Ø¨Û Ø§ÙØªØ®Ø§Ø¨ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯:
<textarea id="area" style="width:80%;height:60px">
Selecting in this text updates values below.
</textarea>
<br>
From <input id="from" disabled> â To <input id="to" disabled>
<script>
area.onselect = function() {
from.value = area.selectionStart;
to.value = area.selectionEnd;
};
</script>
ÙØ·Ùا ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯:
- ÙÙØªÛ ÚÛØ²Û Ø§ÙØªØ®Ø§Ø¨ Ù
ÛâØ´ÙØ¯Ø
onselectÙØ¹Ø§Ù Ù ÛâØ´ÙØ¯Ø ا٠ا ÙÙØªÛ Ø§ÙØªØ®Ø§Ø¨ ØØ°Ù Ù ÛâØ´ÙØ¯ ÙÙ. - طب٠specØ Ø±ÙÛØ¯Ø§Ø¯
document.onselectionchangeÙØ¨Ø§Ûد Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨âÙØ§Û داخ٠ÛÚ© Ú©ÙØªØ±Ù ÙØ±Ù ÙØ¹Ø§Ù Ø´ÙØ¯Ø Ø²ÛØ±Ø§ ب٠٠رتبط ÙÛØ³Øª Ø§ÙØªØ®Ø§Ø¨documentÙ Ù ØØ¯ÙØ¯Ù Ø¨Ø±Ø®Û Ø§Ø² Ù Ø±ÙØ±Ú¯Ø±Ùا آ٠را تÙÙÛØ¯ Ù Û Ú©ÙÙØ¯Ø ا٠ا ٠ا ÙØ¨Ø§Ûد ب٠آ٠تکÛÙ Ú©ÙÛÙ .
٠ثاÙ: moving cursor
Ù
ÛâØªÙØ§ÙÛÙ
selectionStart Ù selectionEnd را تغÛÛØ± دÙÛÙ
Ú©Ù Ø§ÙØªØ®Ø§Ø¨ را ØªÙØ¸ÛÙ
Ù
ÛâÚ©ÙØ¯.
ÛÚ© Ù
ÙØ±Ø¯ Ù
ÙÙ
ÙØ¨Ù زÙ
اÙÛ Ø§Ø³Øª Ú©Ù selectionStart Ù selectionEnd با ÙÙ
برابر Ø¨Ø§Ø´ÙØ¯. سپس دÙÛÙØ§Ù Ù
ÙÙØ¹Ûت Ù
کا٠ÙÙ
ا است. ÛØ§Ø Ø¨Ø±Ø§Û Ø¨Ø§Ø²ÙÙÛØ³ÛØ ÙÙØªÛ ÚÛØ²Û Ø§ÙØªØ®Ø§Ø¨ ÙØ´Ø¯Ù Ø§Ø³ØªØ Ø§ÙØªØ®Ø§Ø¨ در Ù
ÙÙØ¹Ûت Ù
کا٠ÙÙ
ا جÙ
ع Ù
Û Ø´ÙØ¯.
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ با ØªÙØ¸ÛÙ
selectionStart Ù selectionEnd رÙÛ ÛÚ© Ù
ÙØ¯Ø§Ø±Ø Ù
کاÙâÙÙ
ا را ØØ±Ú©Øª Ù
ÛâØ¯ÙÛÙ
.
Ù Ø«ÙØ§:
<textarea id="area" style="width:80%;height:60px">
Focus on me, the cursor will be at position 10.
</textarea>
<script>
area.onfocus = () => {
// zero delay setTimeout to run after browser "focus" action finishes
setTimeout(() => {
// we can set any selection
// if start=end, the cursor is exactly at that place
area.selectionStart = area.selectionEnd = 10;
});
};
</script>
٠ثاÙ: e: modifying selection
Ø¨Ø±Ø§Û ØªØºÛÛØ± Ù
ØØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨ÛØ Ù
ÛâØªÙØ§ÙÛÙ
از Ø±ÙØ´ input.setRangeText() Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. Ø§ÙØ¨ØªÙØ Ù
ÛâØªÙØ§ÙÛÙ
selectionStart/End را Ø¨Ø®ÙØ§ÙÛÙ
٠با آگاÙÛ Ø§Ø² Ø§ÙØªØ®Ø§Ø¨Ø Ø²ÛØ±Ø±Ø´ØªÙ Ù
Ø±Ø¨ÙØ· ب٠value را تغÛÛØ± دÙÛÙ
Ø Ø§Ù
ا setRangeText ÙØ¯Ø±ØªÙ
ÙØ¯ØªØ± Ù Ø§ØºÙØ¨ Ø±Ø§ØØªâتر است.
اÛÙ ÛÚ© Ø±ÙØ´ تا ØØ¯ÙØ¯Û Ù¾ÛÚÛØ¯Ù است. در ساد٠ترÛ٠شک٠تک آرگÙÙ Ø§Ù Ø®ÙØ¯Ø جاÛگزÛÙ Ù ØØ¯ÙØ¯Ù Ø§ÙØªØ®Ø§Ø¨Û کاربر Ù Û Ø´ÙØ¯ Ù Ø§ÙØªØ®Ø§Ø¨ را ØØ°Ù Ù Û Ú©ÙØ¯.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ در اÛÙØ¬Ø§ Ø§ÙØªØ®Ø§Ø¨ کاربر با *...* Ù¾ÛÚÛØ¯Ù Ù
Û Ø´ÙØ¯:
<input id="input" style="width:200px" value="Select here and click the button">
<button id="button">Wrap selection in stars *...*</button>
<script>
button.onclick = () => {
if (input.selectionStart == input.selectionEnd) {
return; // nothing is selected
}
let selected = input.value.slice(input.selectionStart, input.selectionEnd);
input.setRangeText(`*${selected}*`);
};
</script>
با آرگÙÙ
Ø§Ù ÙØ§Û Ø¨ÛØ´ØªØ±Ø Ù
Û ØªÙØ§ÙÛÙ
Ù
ØØ¯Ùد٠start Ù end را ØªÙØ¸ÛÙ
Ú©ÙÛÙ
.
در اÛÙ Ù
Ø«Ø§ÙØ "THIS" را در Ù
ØªÙ ÙØ±ÙØ¯Û Ù¾ÛØ¯Ø§ Ù
Û Ú©ÙÛÙ
Ø Ø¢Ù Ø±Ø§ جاÛگزÛÙ Ù
Û Ú©ÙÛÙ
٠جاÛگزÛ٠را Ø§ÙØªØ®Ø§Ø¨ Ù
Û Ú©ÙÛÙ
:
<input id="input" style="width:200px" value="Replace THIS in text">
<button id="button">Replace THIS</button>
<script>
button.onclick = () => {
let pos = input.value.indexOf("THIS");
if (pos >= 0) {
input.setRangeText("*THIS*", pos, pos + 4, "select");
input.focus(); // focus to make selection visible
}
};
</script>
٠ثاÙ: insert در cursor
اگر ÚÛØ²Û Ø§ÙØªØ®Ø§Ø¨ ÙØ´Ø¯Ù Ø¨Ø§Ø´Ø¯Ø ÛØ§ از start Ù end Ù
ساÙÛ Ø¯Ø± setRangeText Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø¢Ùگا٠Ù
ØªÙ Ø¬Ø¯ÛØ¯ ÙÙØ· درج Ù
ÛâØ´ÙØ¯Ø ÚÛØ²Û ØØ°Ù ÙÙ
ÛâØ´ÙØ¯.
ÙÙ
ÚÙÛÙ Ù
ÛâØªÙØ§ÙÛÙ
ÚÛØ²Û را «در Ù
کاÙâÙÙ
ا» با Ø§Ø³ØªÙØ§Ø¯Ù از setRangeText ÙØ§Ø±Ø¯ Ú©ÙÛÙ
.
در اÛÙØ¬Ø§ Ø¯Ú©Ù Ù Ø§Û ÙØ¬Ùد دارد ک٠«HELLO» را در Ù ÙÙØ¹Ûت ٠کا٠Ù٠ا ÙØ±Ø§Ø± Ù Û Ø¯ÙØ¯ ٠٠کا٠Ù٠ا را Ø¨ÙØ§ÙاصÙ٠بعد از Ø¢Ù ÙØ±Ø§Ø± Ù Û Ø¯ÙØ¯. اگر Ø§ÙØªØ®Ø§Ø¨ خاÙÛ ÙØ¨Ø§Ø´Ø¯Ø جاÛگزÛÙ Ù ÛâØ´ÙØ¯ (Ù ÛâØªÙØ§ÙÛ٠آ٠را با Ù ÙØ§Ûس٠«selectionStart!=selectionEnd» Ø´ÙØ§Ø³Ø§ÛÛ Ú©ÙÛÙ Ù Ø¨Ù Ø¬Ø§Û Ø¢Ù Ú©Ø§Ø± دÛÚ¯Ø±Û Ø§ÙØ¬Ø§Ù دÙÛÙ ):
<input id="input" style="width:200px" value="Text Text Text Text Text">
<button id="button">Insert "HELLO" at cursor</button>
<script>
button.onclick = () => {
input.setRangeText("HELLO", input.selectionStart, input.selectionEnd, "end");
input.focus();
};
</script>
ØºÛØ± ÙØ§Ø¨Ù Ø§ÙØªØ®Ø§Ø¨ شدÙ
Ø¨Ø±Ø§Û ØºÛØ±ÙØ§Ø¨Ù Ø§ÙØªØ®Ø§Ø¨ کرد٠ÚÛØ²ÛØ Ø³Ù Ø±Ø§Ù ÙØ¬Ùد دارد:
-
از ÙÛÚÚ¯Û
user-select: noneØ§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯.<style> #elem { user-select: none; } </style> <div>Selectable <div id="elem">Unselectable</div> Selectable</div>اÛ٠اجاز٠ÙÙ ÛâØ¯ÙØ¯ Ø§ÙØªØ®Ø§Ø¨ از «elem» Ø´Ø±ÙØ¹ Ø´ÙØ¯. ا٠ا کاربر ٠٠ک٠است Ø§ÙØªØ®Ø§Ø¨ را از Ø¬Ø§Û Ø¯ÛÚ¯Ø±Û Ø´Ø±ÙØ¹ Ú©ÙØ¯ Ù
elemرا در Ø¢Ù ÙØ±Ø§Ø± Ø¯ÙØ¯.سپس
elemØ¨Ù Ø¨Ø®Ø´Û Ø§Ø²document.getSelection()تبدÛÙ Ù ÛâØ´ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø§ÙØªØ®Ø§Ø¨ در ÙØ§Ùع Ø§ØªÙØ§Ù Ù ÛâØ§ÙØªØ¯Ø ا٠ا Ù ØØªÙØ§Û Ø¢Ù Ù Ø¹Ù ÙÙØ§Ù در Ú©Ù¾Û-Ù¾ÛØ³Øª ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù ÛâØ´ÙØ¯. -
از Ø§ÙØ¯Ø§Ù Ù¾ÛØ´âÙØ±Ø¶ در رÙÛØ¯Ø§Ø¯ÙاÛ
onselectstartÛØ§mousedownجÙÙÚ¯ÛØ±Û Ú©ÙÛØ¯.<div>Selectable <div id="elem">Unselectable</div> Selectable</div> <script> elem.onselectstart = () => false; </script>اÛ٠کار از Ø´Ø±ÙØ¹ Ø§ÙØªØ®Ø§Ø¨ رÙÛ
elemجÙÙÚ¯ÛØ±Û Ù ÛâÚ©ÙØ¯Ø ا٠ا Ø¨Ø§Ø²Ø¯ÛØ¯Ú©ÙÙØ¯Ù ٠٠ک٠است آ٠را از Ø¹ÙØµØ± دÛÚ¯Ø±Û Ø´Ø±ÙØ¹ Ú©ÙØ¯ ٠سپس بÙelemگسترش Ø¯ÙØ¯.ز٠اÙÛ Ú©Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛØ¯Ø§Ø¯ دÛÚ¯Ø±Û Ø¯Ø± Ù٠ا٠ع٠Ùکرد ÙØ¬Ùد دارد Ú©Ù Ø§ÙØªØ®Ø§Ø¨ را ÙØ¹Ø§Ù Ù ÛâÚ©ÙØ¯Ø Ø±Ø§ØØª است (e.g.
mousedown). Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ Ø¨Ø±Ø§Û Ø¬ÙÙÚ¯ÛØ±Û از ØªØ¶Ø§Ø¯Ø Ø§ÙØªØ®Ø§Ø¨ را ØºÛØ±Ùعا٠٠ÛâÚ©ÙÛÙ Ù ÙÙ ÚÙØ§Ù اجاز٠٠ÛâØ¯ÙÛÙ Ù ØØªÙاÛelemÚ©Ù¾Û Ø´ÙØ¯. -
ÙÙ ÚÙÛÙ Ù ÛâØªÙØ§ÙÛÙ Ø§ÙØªØ®Ø§Ø¨ post-factum را بعد از اÛÙک٠با
document.getSelection().empty()رخ داد پاک Ú©ÙÛÙ . اÛÙ Ø¨Ù ÙØ¯Ø±Øª Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯Ø Ø²ÛØ±Ø§ باعث ÚØ´Ù Ú© Ø²Ø¯Ù ÙØ§Ø®Ùاست٠با Ø¸Ø§ÙØ± Ø´Ø¯Ù Ø§ÙØªØ®Ø§Ø¨ Ù Û Ø´ÙØ¯ â ÙØ§Ù¾Ø¯Ûد Ù Û Ø´ÙØ¯.
Ù ÙØ§Ø¨Ø¹
Ø®ÙØ§ØµÙ
٠ا د٠API ٠ختÙ٠را Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨ Ù¾ÙØ´Ø´ دادÛÙ :
- Ø¨Ø±Ø§Û Ø³ÙØ¯: Ø§Ø´ÛØ§Ø¡
SelectionÙRange. - براÛ
inputØtextarea: Ø±ÙØ´âÙØ§ Ù ÙÛÚÚ¯ÛâÙØ§Û اضاÙÛ.
ÙAPI دÙÙ Ø¨Ø³ÛØ§Ø± Ø³Ø§Ø¯Ù Ø§Ø³ØªØ Ø²ÛØ±Ø§ با ٠ت٠کار Ù Û Ú©ÙØ¯.
Ø¯Ø³ØªÙØ± Ø§ÙØ¹Ù Ù ÙØ§Û Ù ÙØ±Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù Ø§ØØªÙ Ø§ÙØ§Ù Ø¹Ø¨Ø§Ø±ØªÙØ¯ از:
- Ø¯Ø±ÛØ§Ùت Ø§ÙØªØ®Ø§Ø¨:
let selection = document.getSelection(); let cloned = /* element to clone the selected nodes to */; // then apply Range methods to selection.getRangeAt(0) // or, like here, to all ranges to support multi-select for (let i = 0; i < selection.rangeCount; i++) { cloned.append(selection.getRangeAt(i).cloneContents()); } - ØªÙØ¸ÛÙ
ات selection:
let selection = document.getSelection(); // directly: selection.setBaseAndExtent(...from...to...); // or we can create a range and: selection.removeAllRanges(); selection.addRange(range);
٠در ÙÙØ§ÛØªØ Ø¯Ø± Ù
ÙØ±Ø¯ Ù
کا٠ÙÙ
ا. Ù
ÙÙØ¹Ûت Ù
کا٠ÙÙ
ا در Ø¹ÙØ§ØµØ± ÙØ§Ø¨Ù ÙÛØ±Ø§ÛØ´Ø Ù
اÙÙØ¯ <textarea> ÙÙ
ÛØ´Ù در ابتدا ÛØ§ Ø§ÙØªÙØ§Û Ø§ÙØªØ®Ø§Ø¨ است. Ù
ÛâØªÙØ§ÙÛÙ
با ØªÙØ¸ÛÙ
elem.selectionStart Ù elem.selectionEnd از Ø¢Ù Ø¨Ø±Ø§Û Ø¨Ù Ø¯Ø³Øª Ø¢ÙØ±Ø¯Ù Ù
ÙÙØ¹Ûت Ù
کاÙâÙÙ
ا ÛØ§ ØØ±Ú©Øª Ù
کاÙâÙÙ
ا Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)