2011-07-16 19 views
5

Tôi muốn thụt lề văn bản đã chọn trong một không gian <textarea> theo 4 không gian, giống như StackOverflow thực hiện cho mã, sử dụng jQuery. Tôi đang làm điều này để tạo ra một trình soạn thảo văn bản tương tự như của SO, nhưng chỉ với chức năng cơ bản.Văn bản đã chọn thụt lề 4 khoảng trắng

Tôi không muốn liên kết hoặc đề xuất cho người chỉnh sửa được tạo sẵn; Tôi có mọi thứ tôi muốn nhưng vấn đề của tôi ở trên. Ai đó có thể cho tôi một số gợi ý về cách tôi đã thụt lề văn bản đã chọn hoặc một số đoạn mã không?

Cảm ơn.

Trả lời

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); 
} 

Nên làm điều đó. Để biết ví dụ về cách lấy văn bản đã chọn (điều này đã được rút ngắn tại đây), hãy xem How to get selected text in textarea?

+0

Cảm ơn rất nhiều marc. Vấn đề tôi đang gặp bây giờ là 'window.getSelection()' và bạn bè (ở đây: http://mark.koli.ch/2009/09/use-javascript-and-jquery-to-get-user-selected -text.html) sẽ không chọn văn bản bên trong vùng văn bản của tôi. – Bojangles

+0

Rất tiếc. Không phải lo lắng - tất cả đều được sắp xếp nhờ vào plugin jQuery này: https://github.com/localhost/jquery-fieldselection. Thansk rất nhiều cho sự giúp đỡ của bạn dù sao - tôi sẽ không có nơi nào mà không có điểm khởi đầu này. – Bojangles

+0

Dường như tôi đã nói quá sớm. Tôi có hai vấn đề: 1) Một dòng mới được thêm vào sau khi kết thúc lựa chọn thụt lề và quan trọng hơn, 2) Tôi không thể thụt lề văn bản đã chọn đã được nhập vào, tôi chỉ có thể thụt lề văn bản đã được JS thêm vào hoặc đã ở trong vùng văn bản ngay từ đầu. – Bojangles

1

Tôi muốn sử dụng regex replace() cho việc này. Chỉ cần thay thế dòng mới bằng một dòng mới cộng với bốn dấu cách:

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