Esiste una funzione per deselezionare tutto il testo utilizzando JavaScript?


100

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:


166

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.


25
Posso confermare che window.getSelection().removeAllRanges();funziona in tutti i browser attuali. Demo dal vivo: jsfiddle.net/hWMJT/1
Šime Vidas

devi fare clic su un pulsante come <input id = 'but' type = 'button' value = 'click' / onclick = 'clearSelection ()'>
Ankur

1
@ Šime - non proprio. "Funziona" perché la selezione viene persa quando il pulsante diventa attivo. Prova : il codice è commentato, la selezione è ancora cancellata.
Shadow Wizard is Ear For You

@Shadow Ecco la demo corretta: jsfiddle.net/9spL8/3 Il 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.
Šime Vidas

1
Modificato, utilizzare per 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!
John

27

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

non funziona se la selezione inizia da qualche parte dalla prima riga e include il campo di testo più grande
Vyachaslav Gerchicov

1
@VyachaslavGerchicov: Probabilmente è perché è un semplice esempio fatto rapidamente e se si termina la selezione fuori dal main, <div>l' mouseupevento non si attiva. Metti invece il gestore del mouseup sul documento e andrebbe bene: jsfiddle.net/SLQpM/23
Tim Down

Questa è un'ottima soluzione nei browser meno recenti che non supportano i CSS selezionati dall'utente durante il trascinamento degli elementi. Chiama clearSelection () nel callback dello spostamento del mouse.
Geordie

6

Per Internet Explorer, puoi utilizzare il metodo vuoto dell'oggetto document.selection:

document.selection.empty ();

Per una soluzione cross-browser, vedi questa risposta:

Cancella una selezione in Firefox


Se il tuo sito web è pubblico (non intranet dove controlli i browser) non è una buona idea, non è cross browser.
Shadow Wizard is Ear For You

1
@Shadow Wizard - vero, questa domanda può essere rilevante per una soluzione cross-browser: stackoverflow.com/questions/6186844/...
Luca Girvin

@Luke nice, peccato che un altro sito Web non sarà (probabilmente) coerente tra i diversi browser poiché l'OP ha preso ciò che hai dato così com'è.
Shadow Wizard is Ear For You

A mio parere la compatibilità del browser è qualcosa di ovvio che dovrebbe essere offerto da noi - molti sviluppatori non sono nemmeno consapevoli dell'esistenza di tali differenze, quindi chi lo sa dovrebbe dirglielo. A parte questo, non ho mai detto che la tua domanda è sbagliata , manca solo .
Shadow Wizard is Ear For You

@Luke 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.
Šime Vidas

0

Per un textareaelemento 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);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.