2014-10-01 170 views
0

如何使用JavaScript將指針設置爲contenteditable div? 類似這樣的:$('[contenteditable="true"]').setCursor(10);將指針設置爲contenteditable

+0

'set pointer'是什麼意思?把重點放在div上?將鼠標光標移動到div?在鼠標懸停在div上時更改鼠標光標形狀?請編輯並改進您的問題。 – 2014-10-01 08:04:44

+0

我想你可能想要這個:http://stackoverflow.com/questions/16095155/javascript-contenteditable-set-cursor-caret-to-index – 2014-10-01 08:56:29

回答

0

下面是可以幫助你的代碼片段。你可以找到工作示例here http://jsfiddle.net/naveen_champ/wps4cn01/

更新:代碼更新後Tim添加評論[2014年10月2日],以匹配支持內容可編輯元素。

!function($){ 
    function findHiddenCharacters(node, beforeCaretIndex) { 
     var hiddenCharacters = 0 
     var lastCharWasWhiteSpace=true 
     for(var n=0; n-hiddenCharacters<beforeCaretIndex &&n<node.length; n++) { 
      if([' ','\n','\t','\r'].indexOf(node.textContent[n]) !== -1) { 
       if(lastCharWasWhiteSpace) 
        hiddenCharacters++ 
       else 
        lastCharWasWhiteSpace = true 
      } else { 
       lastCharWasWhiteSpace = false 
      } 
     } 

     return hiddenCharacters 
    } 
    var setSelectionByCharacterOffsets = null; 

    if (window.getSelection && document.createRange) { 
     setSelectionByCharacterOffsets = function(containerEl, start, end) { 
      var charIndex = 0, range = document.createRange(); 
      range.setStart(containerEl, 0); 
      range.collapse(true); 
      var nodeStack = [containerEl], node, foundStart = false, stop = false; 

      while (!stop && (node = nodeStack.pop())) { 
       if (node.nodeType == 3) { 
        var hiddenCharacters = findHiddenCharacters(node, node.length) 
        var nextCharIndex = charIndex + node.length - hiddenCharacters; 

        if (!foundStart && start >= charIndex && start <= nextCharIndex) { 
         var nodeIndex = start-charIndex 
         var hiddenCharactersBeforeStart = findHiddenCharacters(node, nodeIndex) 
         range.setStart(node, nodeIndex + hiddenCharactersBeforeStart); 
         foundStart = true; 
        } 
        if (foundStart && end >= charIndex && end <= nextCharIndex) { 
         var nodeIndex = end-charIndex 
         var hiddenCharactersBeforeEnd = findHiddenCharacters(node, nodeIndex) 
         range.setEnd(node, nodeIndex + hiddenCharactersBeforeEnd); 
         stop = true; 
        } 
        charIndex = nextCharIndex; 
       } else { 
        var i = node.childNodes.length; 
        while (i--) { 
         nodeStack.push(node.childNodes[i]); 
        } 
       } 
      } 

      var sel = window.getSelection(); 
      sel.removeAllRanges(); 
      sel.addRange(range); 
     } 
    } else if (document.selection) { 
     setSelectionByCharacterOffsets = function(containerEl, start, end) { 
      var textRange = document.body.createTextRange(); 
      textRange.moveToElementText(containerEl); 
      textRange.collapse(true); 
      textRange.moveEnd("character", end); 
      textRange.moveStart("character", start); 
      textRange.select(); 
     }; 
    } 


    $.fn.setCaretPosition = function(caretPos) { 
     return this.each(function(){ 
      var elem = this; 
      setSelectionByCharacterOffsets(elem, caretPos, caretPos); 
     }); 
    } 
}(window.jQuery); 
+0

這段代碼是文本''和'