Evento Evidenzia testo?

Sono curioso se qualcuno sa come triggersre una funzione da eseguire se / una volta che l’utente finisce di selezionare il testo sulla pagina web? Vorrei che l’utente fosse in grado di selezionare il testo, e dopo un breve ritardo (o immediatamente, a questo punto non importa molto) un pulsante di sovrapposizione appare vicino al testo che l’utente può quindi fare clic e io torno indietro ed eseguo più del mio codice che si basa sulla selezione. Questo è per un’estensione di Firefox.

Un esempio simile che posso pensare sarebbe come in IE, dove è ansible selezionare il testo e poi viene visualizzato il “web accelerators”. Sono sicuro al 99% che so come sovrapporrei effettivamente il pulsante e ottengo la posizione del testo selezionato, ma non ho idea di come controllare se c’è qualcosa selezionato, senza fare una specie di loop infinito, che sembra solo una pessima idea.

Grazie in anticipo!

MODIFICARE:

//In my overlay.js with the rest of my sidebar code isTextSelected: function () { var myText = cqsearch.getSelectedText(); var sidebar = document.getElementById("sidebar"); var sidebarDoc = sidebar.contentDocument || document; var curHighlightedDiv = sidebarDoc.getElementById("testDiv"); curHighlightedDiv.innerHTML = "Current text selection:" + myText; } }; //In my on firefox load function I added this document.onmouseup = cqsearch.isTextSelected; 

Quindi questo è quello che ho trovato usando il suggerimento di Robert, e mi ci è voluto del tempo per ottenere tutto nel posto giusto, ma funziona benissimo! Ora avanti per posizionare il mio pulsante. Grazie mille!

Non c’è nessun testo in onhighlightext o qualcosa del genere, ma una soluzione sarebbe quella di associare onmouseup per verificare se un testo è selezionato se questo non è in un input / textarea .

modificare

Ecco un esempio di implementazione per te. L’ho provato solo in Chrome / Firefox / IE7. Funziona anche in input.

http://jsfiddle.net/qY7gE/

Codice da JSFiddle :

 var t = ''; function gText(e) { t = (document.all) ? document.selection.createRange().text : document.getSelection(); document.getElementById('input').value = t; } document.onmouseup = gText; if (!document.all) document.captureEvents(Event.MOUSEUP); 
  In software, a stack overflow occurs when too much memory is used on the call stack. The call stack contains a limited amount of memory, often determined at the start of the program. The size of the call stack depends on many factors, including the programming language, machine architecture, multi-threading, and amount of available memory. When too much memory is used on the call stack the stack is said to overflow, typically resulting in a program crash.[1] This class of software bug is usually caused by one of two types of programming errors.[2] 

Un po ‘tardi per la festa ma per riferimento futuro …

Dai un’occhiata all’evento DOM select su MDN .

Si triggers una volta rilasciato il mouse o la chiave (almeno in Chrome 40).

document.addEventListener('select', callback);

La soluzione che utilizza il trucco del mouse non è la soluzione corretta. Questo è un modo hacky e non perfetto. Meno efficiente anche perché ora stai catturando mouse per così tanto schifo.

Il vero modo per farlo addSelectionListener Firefox è usare addSelectionListener vedere questo argomento: Osservare per evidenziare?

Ora anche se l’utente usa la tastiera per effettuare le selezioni viene catturato.

Ringraziamo Neil per avermi informato su dove trovarlo su MXR

Esiste un evento nativo per quando viene effettuata / modificata una selezione di testo. selectionchange ha il supporto di base sulla maggior parte dei browser, incluso IE , e funzionerà per qualsiasi testo all’interno di un documento, non solo per gli elementi del modulo.

 document.addEventListener("selectionchange",event=>{ let selection = document.getSelection ? document.getSelection().toString() : document.selection.createRange().toString() ; console.log(selection); }) 
 select this text