2011-03-21 34 views
257

¿Es posible obtener el texto resaltado en un párrafo de un sitio web, p. usando jQuery?Obtener el texto resaltado/seleccionado

+1

He aquí una solución de trabajo http://dipaksblogonline.blogspot.in/2014/11/javascript-text-selection-popover.html – Dipak

+0

Javascript simple trabajó para mí. document.getSelection(). anchorNode.data.substr (document.getSelection(). anchorOffset, document.getSelection(). focusOffset-document.getSelection(). anchorOffset) –

+0

@RohitVerma: Eso solo va a funcionar en el caso simple de una selección que está contenida dentro de un solo nodo de texto, lo que de ninguna manera garantiza que sea el caso. –

Respuesta

358

Obtener el texto que el usuario ha seleccionado es relativamente simple. No se obtienen beneficios al involucrar a jQuery ya que no necesita nada más que los objetos window y document.

function getSelectionText() { 
    var text = ""; 
    if (window.getSelection) { 
     text = window.getSelection().toString(); 
    } else if (document.selection && document.selection.type != "Control") { 
     text = document.selection.createRange().text; 
    } 
    return text; 
} 

Si usted está interesado en una implementación que también se ocupará de selecciones en <textarea> y Texty <input> elementos, se puede utilizar la siguiente. Como ahora es 2016, estoy omitiendo el código requerido para el soporte de IE < = 8 pero he publicado cosas para eso en muchos lugares en SO.

function getSelectionText() { 
 
    var text = ""; 
 
    var activeEl = document.activeElement; 
 
    var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null; 
 
    if (
 
     (activeElTagName == "textarea") || (activeElTagName == "input" && 
 
     /^(?:text|search|password|tel|url)$/i.test(activeEl.type)) && 
 
     (typeof activeEl.selectionStart == "number") 
 
    ) { 
 
     text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd); 
 
    } else if (window.getSelection) { 
 
     text = window.getSelection().toString(); 
 
    } 
 
    return text; 
 
} 
 

 
document.onmouseup = document.onkeyup = document.onselectionchange = function() { 
 
    document.getElementById("sel").value = getSelectionText(); 
 
};
Selection: 
 
<br> 
 
<textarea id="sel" rows="3" cols="50"></textarea> 
 
<p>Please select some text.</p> 
 
<input value="Some text in a text input"> 
 
<br> 
 
<input type="search" value="Some text in a search input"> 
 
<br> 
 
<input type="tel" value="4872349749823"> 
 
<br> 
 
<textarea>Some text in a textarea</textarea>

+7

¿Para qué sirve {} -fork? ¿De qué se trata el "Control"? – Dan

+25

@Dan: Perdón, me perdí esta pregunta (no creo que eso me haya alertado). La segunda rama es para IE <= 8 (IE 9 implementa 'window.getSelection()'). La comprobación 'document.selection.type' está probando que la selección es una selección de texto en lugar de una selección de control. En IE, una selección de control es una selección dentro de un elemento editable que contiene uno o más elementos (como imágenes y controles de formulario) con contornos y tamaños de identificadores. Si llama a '.createRange()' en dicha selección, obtendrá un 'ControlRange' en lugar de' TextRange', y 'ControlRange's no tendrá la propiedad' text'. –

+0

¿Se puede llamar a esta función después de cualquier evento? No parece funcionar para mí en un área de texto –

8

esta solución funciona si estás usando Chrome (no se puede verificar otros navegadores) y si el texto se encuentra en el mismo elemento DOM:

window.getSelection().anchorNode.textContent.substring(
    window.getSelection().extentOffset, 
    window.getSelection().anchorOffset) 
80

Get texto resaltado de esta manera:

window.getSelection().toString() 

y, por supuesto, un specia l para el tratamiento, es decir:

document.selection.createRange().htmlText 
+0

Para IE> = 10 "' document.selection' _support se eliminó en IE10 y se reemplazó por '' window.getSelection' ". Fuente: https://connect.microsoft.com/IE/feedback/details/795325/window-getselection-and-document-selection-legacy-support – user2314737

+0

Esto fallará en múltiples condiciones en varios navegadores (por ejemplo, Firefox). – Makyen

Cuestiones relacionadas