SO fiddle
Test Fiddle mainly for SO Questions
by Nick Craver
HTML
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/overcast/jquery-ui.css">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec laoreet magna id mauris consectetur eleifend. Pellentesque at elementum nibh. Pellentesque tellus nulla, iaculis ac rhoncus id, ornare eu mi. Nullam ipsum metus, scelerisque a sollicitudin et, sagittis dignissim odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. In commodo, felis at faucibus malesuada, risus magna scelerisque sapien, sed suscipit urna nulla in dolor. Donec vitae lorem vel lorem laoreet sollicitudin vel id est. Morbi rutrum fermentum augue. Phasellus lectus mi, vulputate at vestibulum vel, bibendum ac eros. Donec urna mauris, elementum et facilisis ac, dignissim vitae orci. Quisque rutrum vulputate pretium.
Cras eget tristique tortor. Suspendisse vitae elit sed elit sodales facilisis quis vel neque. Pellentesque ultrices libero a nisl malesuada eu condimentum eros feugiat. Fusce blandit ipsum eleifend ligula malesuada quis porttitor felis ornare. Curabitur sed nunc a metus posuere ultrices interdum sit amet massa. Donec euismod metus sit amet enim suscipit semper. Nunc et est leo. In eget rutrum mi. Vivamus luctus vestibulum volutpat. Curabitur leo ligula, dignissim quis semper accumsan, eleifend sed lectus. Donec venenatis malesuada neque ut bibendum. Sed porttitor, dui sit amet gravida auctor, ante tellus tristique tellus, in ultricies quam nibh eget leo. Suspendisse potenti. Aenean id massa sit amet sem faucibus ullamcorper vitae a arcu. Nullam accumsan augue nec massa blandit ultricies. Praesent fringilla mi convallis tortor venenatis quis sagittis leo accumsan. Aliquam vel blandit diam. In pretium quam a nunc adipiscing a aliquam nisl eleifend. Aliquam malesuada condimentum ligula sit amet rhoncus.
Quisque et nibh elit, a porttitor urna. Vestibulum ante ipsum primis in faucibus orci luctus et...
JavaScript
/* jQuery plugin textselect
* version: 0.9
* tested on jQuery 1.3.2
* author: Josef Moravec, josef.moravec@gmail.com
*
* usage:
* $(function() {
* $(document).bind('textselect', function(e) {
* Do stuff with e.text
* });
* });
*
*/
(function($) {
$.event.special.textselect = {
setup: function(data, namespaces) {
$(this).data("textselected",false);
$(this).bind('mouseup', $.event.special.textselect.handler);
},
teardown: function(data) {
$(this).unbind('mouseup', $.event.special.textselect.handler);
},
handler: function(event) {
var text = $.event.special.textselect.getSelectedText().toString();
if(text!='') {
$(this).data("textselected",true);
event.type = "textselect";
event.text = text;
$.event.handle.apply(this, arguments);
}
},
getSelectedText: function() {
var text = '';
if (window.getSelection) {
text = window.getSelection();
} else if (document.getSelection) {
text = document.getSelection();
} else if (document.selection) {
text = document.selection.createRange().text;
}
return text;
}
}
$.event.special.textunselect = {
setup: function(data, namespaces) {
$(this).data("textselected",false);
$(this).bind('mouseup', $.event.special.textunselect.handler);
$(this).bind('keyup', $.event.special.textunselect.handlerKey)
},
teardown: function(data) {
$(this).unbind('mouseup', $.event.special.textunselect.handler);
},
handler: function(event) {
if($(this).data("textselected")) {
var text = $.event.special.textselect.getSelectedText().toString();
if(text=='') {
$(this).data("textselected",false);
event.type = "textunselect";
$.event.handle.apply(this, arguments);
}
}
},
handlerKey: function(event) {
if($(this).data("textselected")) {
var text = $.event.special.textselect.getSelectedText().toString();
if((event.keyCode = 27) &&...