Estoy escribiendo un complemento de Firefox que se activa cada vez que se resalta una palabra. Sin embargo, necesito un script que detecte cuándo se resalta una palabra, y estoy atascado. Un ejemplo sería nytimes.com (cuando estás leyendo un artículo y resaltas una palabra, aparece el ícono de referencia). Sin embargo, el script de nytimes.com es súper complejo. Tengo 16 años y no soy programador, así que definitivamente es una forma fuera de mi alcance.Javascript: Cómo detectar si una palabra está resaltada
Respuesta
Aquí es una secuencia de comandos:
<script language=javascript>
function getSelText()
{
var txt = '';
if (window.getSelection)
{
txt = window.getSelection();
}
else if (document.getSelection)
{
txt = document.getSelection();
}
else if (document.selection)
{
txt = document.selection.createRange().text;
}
else return;
document.aform.selectedtext.value = txt;
}
</script>
<input type="button" value="Get selection" onmousedown="getSelText()">
<form name=aform >
<textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>
Cortesía del Código de sapo:
http://www.codetoad.com/javascript_get_selected_text.asp
En su caso, que se quiere llamar a este script cuando se hace la selección, y luego puede procesarlo como lo desee, con una solicitud de AJAX para obtener información relevante, por ejemplo, como NYtimes probablemente lo haga.
La forma más fácil de hacerlo es detectar los eventos mouseup
y keyup
en el documento y comprobar si se ha seleccionado algún texto. Lo siguiente funcionará en todos los principales navegadores.
Ejemplo: http://www.jsfiddle.net/timdown/SW54T/
function getSelectedText() {
var text = "";
if (typeof window.getSelection != "undefined") {
text = window.getSelection().toString();
} else if (typeof document.selection != "undefined" && document.selection.type == "Text") {
text = document.selection.createRange().text;
}
return text;
}
function doSomethingWithSelectedText() {
var selectedText = getSelectedText();
if (selectedText) {
alert("Got selected text " + selectedText);
}
}
document.onmouseup = doSomethingWithSelectedText;
document.onkeyup = doSomethingWithSelectedText;
Pero, ¿qué ocurre si quieres detectar si se selecciona una palabra específica? Digamos que tiene 'foo' en la página varias veces y el usuario selecciona' foo' ¿cómo sabe cuál de las palabras seleccionó el usuario? – Jespertheend
Usando rangy.js y jQuery:
$('#elem').on('keyup mouseup', function(){
var sel = rangy.getSelection()
if (sel.rangeCount === 0 || sel.isCollapsed) return
alert(sel.toString())
})
Uso siguiente código
(function() {
"use strict";
var showSelectedText = function (e) {
var text = '';
if (window.getSelection) {
text = window.getSelection();
} else if (document.getSelection) {
text = document.getSelection();
} else if (document.selection) {
text = document.selection.createRange().text;
}
console.log(text.toString());
}
document.onmouseup = showSelectedText;
if (!document.all) {
document.captureEvents(Event.MOUSEUP);
}
})();
- 1. ¿Cómo puedo detectar si quicktime está instalado con javascript?
- 2. ¿Cómo puedo detectar si el usuario está "inactivo" con javascript?
- 3. Buscar palabra clave resaltada en ASP.Net
- 4. Javascript - verifica si div contiene una palabra?
- 5. ¿Cómo cambiar el color de la palabra mal escrita resaltada?
- 6. Detectar a través de javascript si Silverlight está instalado
- 7. Cómo detectar si un micrófono está presente
- 8. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 9. Cómo detectar si numpy está instalado
- 10. ¿Cómo detectar si UISwitch está encendido/apagado?
- 11. ¿Cómo detectar si Vista UAC está habilitado?
- 12. iPhone: ¿Cómo detectar si iTunes está jugando?
- 13. cómo detectar rápidamente si una cadena está comprimida zlib?
- 14. WIX: ¿Cómo detectar si está instalada una aplicación de terceros?
- 15. Detectar desde el navegador si está instalada una aplicación específica
- 16. jQuery webcam/flash: ¿Cómo detectar si la webcam está activa?
- 17. Detectar si una cadena contiene una cadena en Jquery/Javascript cuando la cadena está delimitada inusualmente
- 18. Detectar si una página está dentro de un iframe - servidor
- 19. detectar si un objeto está vacía
- 20. detectar cuando JavaScript está deshabilitada en ASP.NET
- 21. detectar si apio está disponible/Ejecución
- 22. Detectar si el dispositivo se está cargando
- 23. Detectar si el padre html está oculto
- 24. ¿Cómo comprobar si javascript está deshabilitado?
- 25. jQuery detectar si textarea está vacío
- 26. Detectar si un RichTextBox está vacío
- 27. Detectar si el monitor está en C#
- 28. ¿Cómo redirigir si javaScript está deshabilitado?
- 29. Detectar si una clave está vinculada a algo en vim
- 30. Cómo detectar si su Javascript está siendo incluido de forma sincrónica o asincrónica
sigo viendo este código en SO, y que está mal: 'ventana. getSelection() 'devuelve un objeto' Selection', no una cadena. –
@tim no toda la verdad. El objeto tiene un método toString(). Cuando se espera una cadena, se devuelve una cadena, de lo contrario, como señala, se devuelve un objeto. https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection –
@TedCohen: Es cierto que un objeto 'Selection' tiene una implementación' toString() 'sensible, pero el resto de su el comentario no tiene sentido: siempre se devuelve un objeto 'Selection' si' window.getSelection' existe (lo cual ocurre en todos los navegadores modernos). –