2012-03-22 34 views
9

Vì vậy, tôi có một phương thức lấy thẻ và kết thúc văn bản đã chọn trong thẻ đó.Chèn dấu mũ sau một nút được chèn

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+']'));        
     } 
    } 
} 

Vấn đề này tuy nhiên, sau khi đã thực hiện xong văn bản và chèn nút dấu (nơi chúng đang nhập) được đặt TRƯỚC văn bản được chèn.

Có cách nào để chèn văn bản và giữ dấu sót ở cuối nó không?

Xin lưu ý tôi muốn sử dụng nếu điều này có thể được thực hiện mà không cần sử dụng jQuery hoặc bất kỳ thư viện nào khác. Tôi chỉ cần nó để làm việc trong webkit (Safari).

Trả lời

18

Bạn có thể sử dụng phương thức range.setStartAfter và range.setEndAfter để thiết lập điểm bắt đầu và điểm kết thúc tới điểm trực tiếp sau nút mới của bạn. Tôi thiết lập một ví dụ về jsfiddle ở đây: http://jsfiddle.net/phil_mcc/tM3mA/

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

Bạn là người đàn ông :) – endy

+0

@phil mccull +1 cho câu trả lời. điều gì sẽ xảy ra nếu bạn chỉ phải chèn văn bản vào div đó chứ không phải ở bất kỳ nơi nào khác trong tài liệu, khi nhấn 'wrap'? –

+0

có câu trả lời cho câu hỏi của tôi từ liên kết: http://stackoverflow.com/a/8340432/1407434, cập nhật fiddle: http://jsfiddle.net/tM3mA/38/ –

1

làm được điều này sau khi chèn nút đến phạm vi range.collapse(false); này sẽ thay đổi vị trí của phạm vi lựa chọn đến cuối của dãy núi này, vì vậy tôi đoán là nó nên đặt con trỏ ở vị trí cuối

+0

Không có gì:/Có thể phải làm với thực tế là phạm vi bị xóa. – endy

Các vấn đề liên quan