2012-03-22 14 views
9

Quindi ho un metodo che accetta un tag e avvolge il testo selezionato in quel tag.Inserimento del punto di inserimento dopo un nodo inserito

function wrap(tag) 
{    
    var sel, range; 
    if (window.getSelection) 
    { 
     sel = window.getSelection(); 
     if (sel.rangeCount) 
     { 
      range = sel.getRangeAt(0); 
      var selectedText = range.toString(); 
      range.deleteContents(); 
      range.insertNode(document.createTextNode('['+tag+']'+selectedText+'[/'+tag+']'));        
     } 
    } 
} 

Questo problema con questo però, viene dopo che viene eseguita avvolgendo il testo e inserendo il nodo del cursore (dove sono digitando) è posto prima del testo inserito.

Esiste un modo per inserire il testo e mantenere il segno di fine alla fine?

Si prega di notare che preferirei se ciò potesse essere fatto senza l'uso di jQuery o di qualsiasi altra libreria. Ho solo bisogno che funzioni nel webkit (Safari).

risposta

18

È possibile utilizzare il range.setStartAfter e range.setEndAfter metodi per impostare i punti di inizio e fine del punto direttamente dopo il nuovo nodo. Ho impostato un esempio jsfiddle qui: http://jsfiddle.net/phil_mcc/tM3mA/

//move the caret 
range.setStartAfter(newNode); 
range.setEndAfter(newNode); 
sel.removeAllRanges(); 
sel.addRange(range); 
+1

Sei l'uomo :) – endy

+0

@phil mccull +1 per la risposta. e se fosse sufficiente inserire il testo solo in quel div e non in qualsiasi altra parte del documento, quando si fa clic su "wrap"? –

+0

ha ottenuto la risposta alla mia domanda dal link: http://stackoverflow.com/a/8340432/1407434, fiddle aggiornato: http://jsfiddle.net/tM3mA/38/ –

1

fare questo dopo aver inserito il nodo alla gamma range.collapse(false); questo cambierà la posizione del campo di selezione fino alla fine del campo, quindi la mia ipotesi è che dovrebbe impostare il cursore alla posizione finale

+0

Niente:/Probabilmente ha a che fare con il fatto che l'intervallo viene eliminato. – endy

Problemi correlati