Dai uno sguardo allo DOM Range spec. È possibile ottenere un Range
dalla selezione dell'utente in Firefox utilizzando:
var range = window.getSelection().getRangeAt(0);
Nota che alcuni browser, tra cui Firefox, consentono a più selezioni, cui si può accedere tramite il metodo della selezione getRangeAt()
.
Il Range
è espresso in termini di nodi DOM e scostamenti all'interno di tali nodi. Una volta ottenuto il valore Range
, non è semplice eseguire esattamente ciò che si desidera, poiché i limiti dell'intervallo potrebbero trovarsi in nodi diversi a diversi livelli dell'albero DOM, quindi non è sempre possibile circondare il contenuto dell'intervallo con un tag. Si può essere in grado di fare qualcosa di simile a quanto segue, anche se creerà un nuovo elemento di blocco per contenere il contenuto selezionato:
var range = window.getSelection().getRangeAt(0);
var selectionContents = range.extractContents();
var div = document.createElement("div");
div.style.color = "yellow";
div.appendChild(selectionContents);
range.insertNode(div);
altro, hacky, alternativa è quella di utilizzare il metodo di document
execCommand()
per modificare la selezione (ad esempio impostandolo su un colore particolare) e quindi usando document.querySelectorAll
o una libreria di selettori per selezionare gli elementi con quel colore e quindi applicare lo stile ad essi.
fonte
2010-01-26 13:58:12
Ehi Bob Fanger ha u trovare qualsiasi soluzione per this.if u avere u può dimmi solo. – Warrior
No, siamo passati a TinyMCE, che ha risolto il problema (aziendale). PS. TinyMCE ha una grande api per estendere il loro htmleditor. Puoi controllare l'implementazione di http://wiki.moxiecode.com/index.php/TinyMCE:API/tinymce.Editor/selection –
Ti suggerisco di dare un'occhiata ad alcuni (ben sviluppati) WYSIWYG htmleditor - tinymce, per esempio - per capirlo. :) –