Jak mogę uzyskać tekst wybrany przez użytkownika (tylko wewnątrz textarea) i zastosować do niego akcje podobne do zawijania zaznaczenia [#bold]selected text[/bold]
.jQuery zawija zaznaczony tekst w textarea
13
A
Odpowiedz
22
Opierając się co Soufiane pisał, oto kod tłumaczona na jQuery ze zdolnością do przejścia w otwartych i zamkniętych tagi:
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));
}
Wykorzystanie będzie wówczas tak:
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);
}
Ta funkcja może pomóc Ci zrobić, co chcesz, dzięki kilku poprawkom. Znalazłem to here.
W przypadku ktokolwiek kiedykolwiek chce, oto wersja coffeescript tej funkcji: https://gist.github.com/2938205 – DVG
Byłoby miło, gdyby końcowy wybrany tekst zawierał wstawkę, a nie tylko początkowy wybór. A może przeskoczyć do końca nowego łańcucha ... – brasofilo
Ok, to robi sztuczkę 'textArea [0] .selectionEnd = end + openTag.length + closeTag.length;' (po ostatniej linii). – brasofilo