Lydiafly

Coder,Like JS

导航

记录TEXTAREA中光标位置的设置/获取方法

设置位置

function setCurPosition(t, s, e){
            var s, e, range, stored_range;
            if(t.selectionStart  ==  undefined){
                var txtRanage = t.createTextRange();
                txtRanage.move('character', s);
                e && txtRanage.moveEnd('character', e - s);
                txtRanage.select();
            }else{
                t.selectionStart = s;
                t.selectionEnd = e || s;
            }
        }

得到位置

$.fn.selection = function(){
        var s, e, range, stored_range;
        if(this[0].selectionStart  ==  undefined){
            var selection = document.selection;
            if (this[0].tagName.toLowerCase() !=  "textarea") {
                var val = this.val(), 
                    range = selection.createRange().duplicate();
                range.moveEnd("character",  val.length);
                s = (range.text  ==  "" ? val.length : val.lastIndexOf(range.text));
                range = selection.createRange().duplicate();
                range.moveStart("character",  -val.length);
                e = range.text.length;
            } else {
                range = selection.createRange();
                stored_range = range.duplicate();
                stored_range.moveToElementText(this[0]);
                stored_range.setEndPoint('EndToEnd',  range);
                s = stored_range.text.length - range.text.length;
                e = s + range.text.length;
            }
        }else{
            s = this[0].selectionStart;
            e = this[0].selectionEnd;
        }
        var te = this[0].value.substring(s, e);
        return {s:s, e:e, t:te};
    };

来源:@hehe123

/**
     * 选取文本框中的文本
     * 
     * @param {Object} Object Dom对象
     * @param {Number} Number 开始位置
     * @param {Number} Number 结束位置
     * @param {Number} Number 当前位置
     *            @example
     *            MI.selectTxt(el,1,2,2);
     */
    selectTxt : function(el,start,end,curPosition){
        var range;
        if (document.createRange) {
            el.setSelectionRange(start,end);
        }
        else {
            range = el.createTextRange();
            range.collapse(1);
            range.moveStart('character',start);
            range.moveEnd('character',end - start);
            range.select();
        }
    },
    /**
     * 返回文本框中的文本参数
     * 
     * @param {Object} Object Dom对象
     * @return {Object} Object {start:开始位置,end:结束位置,txt:选中文本}
     *            @example
     *            getSelectTxt(el);
     */
    getSelectTxt : function(el){
        var start = MI.cursorX(el),end = 0,txt = '';
        if (document.selection) {
            txt = document.selection.createRange().text;
            end = start + txt.length;
        } else {
            end = el.selectionEnd;
            txt = el.value.substring(start, end);
        }
        return {
            start : start,
            end : end,
            txt : txt
        }
    },
    insertTxt : function(el,text,cursorX,del){
        if (del == undefined) {
            del = 0;
        }
        el.focus();
        if (document.selection) {
            var range = document.selection.createRange();
            range.moveStart('character',-del);
            range.text = text;
        }
        else {
            var textTmp = el.value,
                cursor = cursorX + text.length - del;
            el.value = textTmp.substring(0,cursorX - del) + text + textTmp.substring(cursorX,textTmp.length);
            MI.selectTxt(el,cursor,cursor,cursor);
        }
    },
    /**
     * 获取光标位置
     * 
     * @param {Object} Object Dom对象
     * @return {Number} Number 光标位置
     *            @example
     *            MI.cursorX(el);
     */
    cursorX : function(el){
        if (document.selection){

            var range = document.selection.createRange(),position = 0,txt;
            range.moveStart ('character',-el.value.length);
            txt = range.text.split('\001');
            var selectedTxt = document.selection.createRange().text; //有文字选中时,取到的MI.cursorX包括了选中的文字长度
            position = txt[txt.length - 1].replace(/\r/g,'').length - selectedTxt.length;
            return position;

        }
        else return el.selectionStart;
    },

来源:@番茄

posted on 2012-10-12 16:36  lydiafly  阅读(1436)  评论(0)    收藏  举报