2011-09-16 10 views
7

Yo,Rimuovere stili di testo quando si copia/taglio usare i CSS o Javascript

Bene stata noodling su questo per un po ': Come copia/taglia testo formattato senza portando con sé alcun bagaglio stile (background-color, colore , eccetera)?

coppia di itinerari di attacchi che sono stati sventati:

  1. stile del testo in modo diverso usando :: selezionare?non funziona, :: stile non viene copiato
  2. stile del testo selezionato utilizzando jQuery selezionare vincolanteQuesto funziona solo per gli ingressi, non p, div
  3. intercettare e rimuovere lo stile legandosi un evento da copiare/incollare usando jQuery?Impossibile accedere all'oggetto copiato per rimuovere elementi, provato con e.preventDefault(); quindi restituire l'oggetto evento ma non ha funzionato
  4. Modificare i dati degli appunti una volta che sono stati salvati?Inoltre niente da fare, la maggior parte dei browser non ti lasciano in questo senza conferma flash e una sorta

In ogni caso, i pensieri? Sembra che sarebbe molto utile per i siti che hanno colori di sfondo bianchi.

+0

Giusto per essere sicuro di aver capito, vuoi copiare il testo normale negli Appunti senza formattazione? –

+0

Yup. Mi piacerebbe evitare la copia/taglio predefinita dagli stili di acquisizione. O anche più fantastico fare selettivamente, diciamo lasciare font-family e font-weight ma nix color e background. Se dovessi indovinare come farlo, avresti – Mojowen

+0

Cambia il testo prima che sia copiato. Una volta che le cose vengono consegnate negli appunti, sembrano essere inaccessibili tramite javascript. – Mojowen

risposta

4

Non ho avuto il tempo di programmare un esempio ora, ma è possibile farlo per il taglio/copia innescato da scorciatoie da tastiera. Non funzionerebbe per tagliare/copiare tramite il menu di scelta rapida o le opzioni del menu Modifica perché si basa sulla modifica della selezione dell'utente prima che si verifichi l'interruzione o la copia degli eventi.

I passi:

  1. gestire la Ctrl - C e Ctrl - X scorciatoie da tastiera e gli equivalenti Mac.
  2. In questo gestore, creare un elemento fuori schermo (posizione assoluta e sinistra -10000 px, ad esempio) e copiare il contenuto selezionato in esso.È possibile farlo utilizzando window.getSelection().getRangeAt(0).cloneContents(), sebbene sia necessario un codice separato per IE < 9 e si dovrebbe verificare che la selezione non sia compresso.
  3. Fai ciò che vuoi per modificare lo stile del contenuto dell'elemento fuori schermo.
  4. Sposta la selezione per includere il contenuto dell'elemento fuori schermo in modo che sia questo contenuto che viene tagliato o copiato.
  5. Aggiungere un breve ritardo (alcuni millisecondi) utilizzando a window.setTimeout() che chiama una funzione che rimuove l'elemento fuori schermo e ripristina la selezione originale.
+0

Operando in questo modo, qualche suggerimento su come spostare la selezione? – Mojowen

+0

@Mojowen: Ecco una funzione di esempio per selezionare il contenuto di un elemento: http://stackoverflow.com/questions/2044616/select-a-complete-table-with-javascript-to-be-copied-to-clipboard/ 2044793 # 2044793 –

+1

Penso di esserci riuscito, grazie Tim. Con un po 'di pulizia, sembra molto simile a questo: http://jsfiddle.net/mojowen/hCHWy/ – Mojowen

0

È necessario che ciò accada nel browser ... per ciascun utente?

Se non - ed è solo per te - allora puoi farlo con il software Clipmate.

http://www.clipmate.com/index.htm

ha una caratteristica che rimuove tutte le styling.

+0

Cercavo che questo succedesse su qualsiasi copia/taglio, non solo su qualcosa di specifico. – Mojowen

1

Una volta innescata la copia o tagliare si può spogliare i tag html e solo il testo con qualche regex

var String = Sample.replace(/(<([^>]+)>)/ig,""); 

Anche se avete il vostro testo memorizzato in un div con id "sample_div" Usa var String=$('sample_div').text(''); per ottenere solo il testo all'interno

+0

Quindi, come utilizzerei questo nel contesto di un evento di copia/taglio? L'ho provato con: 'jQuery (document) .bind ('cut copy', function (e) { var String = Sample.replace (/ (<([^>] +)>)/ig," "); stringa di restituzione; }); ' Il campione non viene riconosciuto – Mojowen

Problemi correlati