Esiste una funzione in javascript per deselezionare tutto il testo selezionato? Immagino che debba essere una semplice funzione globale come document.body.deselectAll();
o qualcosa del genere.
Esiste una funzione in javascript per deselezionare tutto il testo selezionato? Immagino che debba essere una semplice funzione globale come document.body.deselectAll();
o qualcosa del genere.
Risposte:
Prova questo:
function clearSelection()
{
if (window.getSelection) {window.getSelection().removeAllRanges();}
else if (document.selection) {document.selection.empty();}
}
Ciò cancellerà una selezione nel normale contenuto HTML in qualsiasi browser principale. Non cancellerà una selezione in un input di testo o <textarea>
in Firefox.
removeAllRanges()
metodo funziona in tutti i browser correnti per il testo all'interno di paragrafi o elementi simili non di campo. Per i campi modulo (come textarea), questo metodo non funziona in IE9 e FF5.
window.getSelection().removeAllRanges();
primo perché è conforme agli standard, il codice proprietario dovrebbe essere sempre eseguito per ultimo . Che si tratti del 2004 o del 4004, il codice conforme agli standard sarà sempre quello che utilizziamo, quindi rilevalo prima senza eccezioni!
Ecco una versione che cancellerà qualsiasi selezione, anche all'interno di input di testo e aree di testo:
Demo: http://jsfiddle.net/SLQpM/23/
function clearSelection() {
var sel;
if ( (sel = document.selection) && sel.empty ) {
sel.empty();
} else {
if (window.getSelection) {
window.getSelection().removeAllRanges();
}
var activeEl = document.activeElement;
if (activeEl) {
var tagName = activeEl.nodeName.toLowerCase();
if ( tagName == "textarea" ||
(tagName == "input" && activeEl.type == "text") ) {
// Collapse the selection to the end
activeEl.selectionStart = activeEl.selectionEnd;
}
}
}
}
<div>
l' mouseup
evento non si attiva. Metti invece il gestore del mouseup sul documento e andrebbe bene: jsfiddle.net/SLQpM/23
Per Internet Explorer, puoi utilizzare il metodo vuoto dell'oggetto document.selection:
document.selection.empty ();
Per una soluzione cross-browser, vedi questa risposta:
document.selection.clear()
funziona solo in IE. Vedi qui: jsfiddle.net/9spL8/4 Inoltre, questo metodo rimuoverà il testo selezionato, non solo lo deselezionerà. Per deselezionare semplicemente il testo, usa document.selection.empty()
invece.
Per un textarea
elemento con almeno 10 caratteri il seguente farà una piccola selezione e poi dopo un secondo e mezzo lo deselezionerà:
var t = document.getElementById('textarea_element');
t.focus();
t.selectionStart = 4;
t.selectionEnd = 8;
setTimeout(function()
{
t.selectionStart = 4;
t.selectionEnd = 4;
},1500);
Questo ha funzionato incredibilmente più facilmente per me ...
document.getSelection().collapseToEnd()
o
document.getSelection().removeAllRanges()
Crediti: https://riptutorial.com/javascript/example/9410/deselect-everything-that-is-selected
window.getSelection().removeAllRanges();
funziona in tutti i browser attuali. Demo dal vivo: jsfiddle.net/hWMJT/1