2017-05-02 1 views
0

사용자가 특수 문자를 입력하고 탭을 눌러 값을 자동 완성하는 프로젝트를 진행 중입니다. 이 부분은 대부분 작동하지만 캐럿 위치 이전에있는 x 개의 문자를 삭제할 수 있기를 원합니다. 예. |이 캐럿 인 경우 다음 텍스트가 있습니다. @chr|.tinyMCE의 캐럿 위치에서 x 문자 수 제거

커서 위치 이전에 3자를 삭제하고 싶습니다. 예 : 나는 단지 @으로 끝날 것이다.

아래 코드를 사용하여 현재 커서 위치를 가져 오는 방법을 찾았지만 해당 위치에서 x 문자만큼을 삭제할 수있는 방법을 찾지 못했습니다.

var ed = tinyMCE.get("mce_0"); // get editor instance 
var editorRange = ed.selection.getRng(); // get range object for the current caret position 

var node = editorRange.commonAncestorContainer; // relative node to the selection 

range = document.createRange(); // create a new range object for the deletion 
range.selectNodeContents(node); 
range.setStart(node, editorRange.endOffset - 3); // current caret pos - 3 
range.setEnd(node, editorRange.endOffset); // current caret pos 
range.deleteContents(); 

ed.focus(); // brings focus back to the editor 

는 "3 제거"버튼을 클릭 한 후, 데모를 사용하는 텍스트 어딘가에 캐럿를 놓고하려면 :

function getCaretPosition() 
     { 
      var ed = tinyMCE.get('txtComment');  // get editor instance 
      var range = ed.selection.getRng().startOffset;  // get range 
      return range; 
     } 

답변

0

당신은 현재 캐럿 위치에 끝나는 Range를 작성하여이 작업을 수행 할 수 있습니다 위의 3 문자를 삭제하려면 맨 위.

내 데모는 단순화되어 있으며 경계 검사를 수행하지 않습니다.

데모 : http://codepen.io/anon/pen/dWVWYM?editors=0010

호환성이 완벽하게 작동 IE9 +

+0

감사합니다. 현상금을 보상 하겠지만 9 시간을 기다려야 해. – Boardy