2011-07-16 21 views
5

Quiero aplicar sangría al texto seleccionado en un <textarea> por 4 espacios, al igual que lo hace StackOverflow para el código, usando jQuery. Estoy haciendo esto para crear un editor de texto similar a los SO, pero con solo funcionalidad básica.Aplicar sangría al texto seleccionado 4 espacios

No deseo enlaces o sugerencias para editores ya preparados; Tengo todo lo que quiero, pero mi problema está por encima. ¿Puede alguien darme algunos consejos sobre cómo he sangría el texto seleccionado, o algunos fragmentos de código?

Gracias.

Respuesta

5
function indentSelection() { 
    var selection = $(this).getSelection().text; 
    var textarea = $(this); 
    var result = ''; 
    var lines = selection.split('\n'); 
    var space = ' '; 
    for(var i = 0; i < lines.length; i++) 
    { 
     result += space + lines[i] + '\n'; 
    } 
    var new_text = textarea.val().split(selection).join(result); 
    textarea.val(new_text); 
} 

Debería hacerlo. Para un ejemplo sobre cómo adquirir el texto seleccionado (esto se ha acortado aquí) vea How to get selected text in textarea?

+0

Muchas gracias marc. El problema que estoy teniendo ahora es que 'window.getSelection()' y amigos (aquí: http://mark.koli.ch/2009/09/use-javascript-and-jquery-to-get-user-selected -text.html) no seleccionará el texto dentro de mi área de texto. – Bojangles

+0

Vaya. No se preocupe, todo está ordenado ahora gracias a este plugin jQuery: https://github.com/localhost/jquery-fieldselection. Sin embargo, Thansk es por su ayuda, no estaría en ninguna parte sin este punto de partida. – Bojangles

+0

Parece que hablé demasiado pronto. Tengo dos problemas: 1) Se agrega una línea nueva después del final de la selección sangrada y, más importante aún, 2) No puedo sangrar el texto seleccionado que se ingresó, solo puedo sangrar el texto que fue agregado por JS o estaba en el área de texto al comienzo. – Bojangles

1

Usaría una expresión regular replace() para esto. Simplemente reemplace la nueva línea con una nueva línea más cuatro espacios:

function indentSelection(textarea) { 
    $(textarea).val(
     $(textarea).val().substring(0, textarea.selectionStart) 
      + $(textarea).getSelection().text.replace(/\n/m,' \n') 
      + $(textarea).val().substring(textarea.selectionEnd) 
    ); 
} 
Cuestiones relacionadas