2010-12-06 25 views
10

es posible que cuando el usuario selecciona texto (no textarea ni entrada), jquery puede llamar mi devolución de llamada para decirme qué texto de div está seleccionado, y si el foco de selección se pierde también llame a mi devolución de llamada ?jquery: seleccionar texto evento

Gracias.

+0

lo que debería ocurrir si se selecciona texto de dos o más elementos ? – jAndy

+0

No me importa, mi usuario no hará eso, si lo hacen, simplemente devuelvo lo que puedo devolver. –

+2

Lo siento, eliminé mi respuesta, el evento de selección de jquery solo funciona en textarea y campos de entrada. – joni

Respuesta

9

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; 
1

puede utilizar this

uso <ELEMENT ondrag = "handler(event);" >

object.addEventListener("drag", handler, bCapture); 
Cuestiones relacionadas