Sorprendentemente, no hay una forma sencilla de hacerlo. IE tiene un evento select que se implementa en todos los elementos pero otros navegadores nunca han extendido esto más allá de las entradas. Tendrá que manejar los eventos keyup
y mouseup
en todo el documento, e incluso entonces, su devolución de llamada puede ser llamada cuando la selección no haya cambiado realmente.
Actualización 13 DE OCTUBRE DE 2013
navegadores WebKit han apoyado el evento selectionchange
en Document
nodos durante un par de años. IE también admite este evento a la versión 5.5. Ejemplo:
document.onselectionchange = function() {
console.log("Selection changed");
};
Aquí está un ejemplo sencillo:
function selectCallback(selectionParentElement) {
console.log("Selecting, parent element is " + selectionParentElement.nodeName);
}
var mouseOrKeyUpHandler;
if (typeof window.getSelection != "undefined") {
// Non-IE
mouseOrKeyUpHandler = function() {
var sel = window.getSelection();
if (sel.rangeCount > 0) {
var range = sel.getRangeAt(0);
if (range.toString()) {
var selParentEl = range.commonAncestorContainer;
if (selParentEl.nodeType == 3) {
selParentEl = selParentEl.parentNode;
}
selectCallback(selParentEl);
}
}
};
} else if (typeof document.selection != "undefined") {
// IE
mouseOrKeyUpHandler = function() {
var sel = document.selection;
if (sel.type == "Text") {
var textRange = sel.createRange();
if (textRange.text != "") {
selectCallback(textRange.parentElement());
}
}
};
}
document.onmouseup = mouseOrKeyUpHandler;
document.onkeyup = mouseOrKeyUpHandler;
lo que debería ocurrir si se selecciona texto de dos o más elementos ? – jAndy
No me importa, mi usuario no hará eso, si lo hacen, simplemente devuelvo lo que puedo devolver. –
Lo siento, eliminé mi respuesta, el evento de selección de jquery solo funciona en textarea y campos de entrada. – joni