Domanda

Una delle cose che mi piacerebbe fare nella mia applicazione basata su browser consente all'utente di selezionare una parte di testo (e non in un <textarea>, solo pianura ol' testo!), e ho la mia applicazione di pop-up con una piccola barra degli strumenti che possono quindi interagire con il prossimo (nel mio caso, aggiungere annotazioni).

Ho trovato un sacco di roba su google che sembra concentrarsi sulla scrittura di editor WYSIWYG, ma non è quello che voglio, e la maggior parte ha lavorato in IE ma non in FF2 o 3.Idealmente, vorrei qualche funzione in grado di restituire il testo attualmente selezionato nella finestra del browser che funziona in IE7 (e 6, se possibile), FireFox 2 e 3 e Safari 2.Se funziona in Opera, che sarebbe un bonus, ma non è un requisito.

Qualcuno ha una funzione che fa questo?O un'idea di dove cominciare?

È stato utile?

Soluzione

Guarda jQuery e il wrapSelection plugin.Si può essere quello che stai cercando.

Altri suggerimenti

Che plugin jQuery che è cool, ma che svolge un compito molto specifico:avvolgere il testo si evidenzia con un tag.Questo può essere ciò che si desidera.Ma se non vuoi (o sono in una situazione in cui non è possibile) aggiungere estranei markup per la tua pagina, potresti provare la soluzione seguente, invece:

function getSelectedText() {
  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; 

  return txt;
}

Questa funzione restituisce un oggetto che rappresenta la selezione di testo.Funziona in tutti i browser (anche se ho il sospetto che gli oggetti restituisce sarà leggermente diversa a seconda del browser e solo affidabile per il testo effettivo del risultato piuttosto che un qualsiasi proprietà).

Nota:Originariamente ho scoperto che il frammento di codice qui: http://www.codetoad.com/javascript_get_selected_text.asp

Introduzione alla Gamma ha alcuni dettagli su come i diversi browser consentono di accedere alla selezione del testo.

La mia esperienza è che, lavorando con le diverse Api direttamente è abbastanza goffo quindi se wrapSelection funziona per voi, mi piacerebbe andare con quella.

In questi giorni questo metodo dovrebbe essere sufficiente:

function getSelectedText() {
    return window.getSelection ? window.getSelection().toString() : '';
}

Tornerà '' in rare occasioni di veramente vecchio browser e può essere nel caso di Opera Mini (per essere testato, però, questo potrebbe essere obsoleto) + vedere nota per UC Browser per Android.

Il comportamento dei singoli browser per quanto riguarda la selezione è qui delineato.

Questo codice funziona in Safari, IE e Firefox - la speranza è di qualche aiuto

var str = (window.getSelection) ? window.getSelection() : document.selection.createRange();
str = str.text || str;
str = str + ''; // the best way to make object a string...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top