Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get selected text in textarea? [duplicate]

I'm trying to make my own WYSIWYG editor. Is there any way, how to get the text which has user selected in textarea?

For example, if user selects some word and then clicks button, how do I find out which text was selected?

I'm using jQuery.

like image 424
Jakub Arnold Avatar asked Apr 04 '09 14:04

Jakub Arnold


2 Answers

window.getSelection().toString() worked for me with Chrome but not Firefox.

For obtaining the selected content in a <textarea> with Firefox:

function getSel() // javascript {     // obtain the object reference for the <textarea>     var txtarea = document.getElementById("mytextarea");     // obtain the index of the first selected character     var start = txtarea.selectionStart;     // obtain the index of the last selected character     var finish = txtarea.selectionEnd;     // obtain the selected text     var sel = txtarea.value.substring(start, finish);     // do something with the selected content } 

You could also use activeElement instead of getElementById.

Reference:

  • textarea
  • document
like image 66
Honest Abe Avatar answered Sep 20 '22 12:09

Honest Abe


Handling selection is different for different browsers:

var userSelection; if (window.getSelection) {     userSelection = window.getSelection(); } else if (document.selection) { // Opera     userSelection = document.selection.createRange(); } 

That gives you a range object. Each range represents a single selection (using control/command key it's possible to make multiple active selections).

The type of range object you have now depends on what browser. For IE it's a Text Range object; for others its a Selection object. To convert a Selection object into a text range, you can call getRangeAt; for Safari, you need to build that:

var range; if (userSelection.getRangeAt)     range = userSelection.getRangeAt(0); else { // Safari     range = document.createRange();     range.setStart(userSelection .anchorNode, userSelection.anchorOffset);     range.setEnd(userSelection.focusNode, userSelection.focusOffset); } 

The range object provides you with the starting and ending dom elements and text offset of the selection.

More information about range objects can be found at quirksmode.org here

If you are using jQuery, you may want to look at the light weight jQuery RTE Plugin by Batiste Bieler. It may do enough for your needs or at least give you something to start with.

like image 39
Scott Evernden Avatar answered Sep 18 '22 12:09

Scott Evernden