Get contentEditable caret index position

后端 未结 10 891
暗喜
暗喜 2020-11-22 05:48

I\'m finding tons of good, crossbrowser anwers on how to SET the cursor or caret index position in a contentEditable element, but none on how to GET or find its

10条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-22 06:30

    //global savedrange variable to store text range in
    var savedrange = null;
    
    function getSelection()
    {
        var savedRange;
        if(window.getSelection && window.getSelection().rangeCount > 0) //FF,Chrome,Opera,Safari,IE9+
        {
            savedRange = window.getSelection().getRangeAt(0).cloneRange();
        }
        else if(document.selection)//IE 8 and lower
        { 
            savedRange = document.selection.createRange();
        }
        return savedRange;
    }
    
    $('#contentbox').keyup(function() { 
        var currentRange = getSelection();
        if(window.getSelection)
        {
            //do stuff with standards based object
        }
        else if(document.selection)
        { 
            //do stuff with microsoft object (ie8 and lower)
        }
    });
    

    Note: the range object its self can be stored in a variable, and can be re-selected at any time unless the contents of the contenteditable div change.

    Reference for IE 8 and lower: http://msdn.microsoft.com/en-us/library/ms535872(VS.85).aspx

    Reference for standards (all other) browsers: https://developer.mozilla.org/en/DOM/range (its the mozilla docs, but code works in chrome, safari, opera and ie9 too)

提交回复
热议问题