admin管理员组

文章数量:1397184

Looking for a method to target selected text and perform an action on it in Javascript. What kind of methods should I be using? Is this a job for jQuery? Thanks so much!

EDIT: Earlier answers regarded targeting a CSS class. I'm looking for clicking and highlighting/selecting text and then acting on that in JS. Thanks!

EDIT 2: I've been asked for an example of this function. Here's one but the code has poor reviews. Let me know what you think.

Looking for a method to target selected text and perform an action on it in Javascript. What kind of methods should I be using? Is this a job for jQuery? Thanks so much!

EDIT: Earlier answers regarded targeting a CSS class. I'm looking for clicking and highlighting/selecting text and then acting on that in JS. Thanks!

EDIT 2: I've been asked for an example of this function. Here's one but the code has poor reviews. Let me know what you think.

Share Improve this question edited Nov 25, 2011 at 1:58 Kristian asked Nov 25, 2011 at 1:09 KristianKristian 1,4091 gold badge15 silver badges21 bronze badges 1
  • 1 Define "perform an action on it". Count the number of words? Make it bold? – Crescent Fresh Commented Nov 25, 2011 at 2:22
Add a ment  | 

2 Answers 2

Reset to default 5

It is quite difficult to write a cross browser, generic "get selected text" function. If you can limit your requirements to say only text selected in a page, then life is simpler.

But if you want to be able to get text selections from anywhere (inside form controls, button labels, general text), then life is tough.

Here's a function I wrote some time ago, it worked well enough for the application it was used in:

/* 
 *  This function returns the selected text in a document.
 *  If no text selected, returns an empty string.
 *
 *  Call on one of the following events: 
 *
 *     mouseup - most appropriate event
 *               for selection by mousedown, drag to select, mouseup
 *               may select only whitespace
 *
 *    dblclick - not as appropriate as mouseup
 *               for selection of word by double click
 *               may select only whitespace
 *
 *  Note that text can be selected in ways that do not dispatch
 *  an event, e.g. selecting all the text in the document using:
 *     ctrl + a
 *     context menu -> Select All
 *     edit menu -> Select All
 *     programmatically selecting text
 */
function checkForSelectedText(e) {
  var e = e || window.event;
  var el = e.target || e.srcElement;
  var tagName = el.tagName && el.tagName.toLowerCase();
  var t;
  var d = document;

  // Try DOM 2 Range - for most browsers, including IE 6+
  // However, doesn't get text selected inside form controls
  // that allow selection of text content (input type text, 
  // textarea)
  if (d && d.selection && d.selection.createRange) {
    t = d.selection.createRange().text;

  // Otherwise try HTML5 - note that getSelection returns
  // a string with extra properties. This may also get
  // text within input and textarea
  } else if (d.getSelection) {
    t = d.getSelection();
  }

  // If didn't get any text, see if event was inside
  // inupt@type=text or textarea and look for text
  if (t == '') {
    if (tagName == 'textarea' || 
       (tagName == 'input' && el.type == 'text')) {

     // Check selectionStart/End as otherwise if no text
     // selected, IE returns entire text of element
     if (typeof el.selectionStart == 'number' && 
         el.selectionStart != el.selectionEnd) {
        t = el.value.substring(el.selectionStart, el.selectionEnd)
     }
    }
  }
  return t;
}

Try window.getSelection, you should also be reading up on Selection and Range.

本文标签: jqueryTargeting highlighted text in JavascriptStack Overflow