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
2 Answers
Reset to default 5It 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
版权声明:本文标题:jquery - Targeting highlighted text in Javascript - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744125528a2591935.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论