Come posso ottenere il testo selezionato dall'utente (appena all'interno dell'area di testo) e applicare azioni ad esso qualcosa di simile a capo della selezione [#bold]selected text[/bold]
.jQuery racchiude il testo selezionato in un'area di testo
13
A
risposta
22
Partendo quello postato Soufiane, ecco il codice tradotto in jQuery con la possibilità di passare nei tag di apertura e chiusura:
function wrapText(elementID, openTag, closeTag) {
var textArea = $('#' + elementID);
var len = textArea.val().length;
var start = textArea[0].selectionStart;
var end = textArea[0].selectionEnd;
var selectedText = textArea.val().substring(start, end);
var replacement = openTag + selectedText + closeTag;
textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
}
Uso sarebbe allora in questo modo:
wrapText("myTextArea", "[#bold]", "[/bold]");
6
function wrapAsLink(url){
var textarea = document.getElementById("myTa");
var len = textarea.value.length;
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
var sel = textarea.value.substring(start, end);
var replace = '<a href="'+url+'">' + sel + '</a>';
textarea.value = textarea.value.substring(0,start) + replace +
textarea.value.substring(end,len);
}
Questa funzione può aiutarti a fare ciò che vuoi con alcune modifiche. L'ho trovato here.
Nel caso in cui chiunque lo desideri, ecco una versione coffeescript di questa funzione: https://gist.github.com/2938205 – DVG
Sarebbe bello se il testo finale selezionato includesse l'inserimento, non solo la selezione iniziale. O forse salta il cursore alla fine della nuova stringa ... – brasofilo
Ok, questo ha il trucco 'textArea [0] .selectionEnd = end + openTag.length + closeTag.length;' (dopo l'ultima riga). – brasofilo