How can I get the selected text in a textarea?

Viewed 88110

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

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

I'm using jQuery.

6 Answers

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.

Try the jquery-fieldselection plugin.

You can download it from here. There is an example too.

Related