jickcai 发表于 2013-1-26 15:54:51

Textarea ---操作

App = {};
 
App.byteLength = function(str) {
    if (typeof str == "undefined") {
        return 0
    }
    var aMatch = str.match(/[^\x00-\x80]/g);
    return (str.length + (!aMatch ? 0: aMatch.length))
};
App.trim = function(str) {
str= str.replace(/^(\u3000|\s|\t)*/gi, "");
str= str.replace(/(\u3000|\s|\t)*$/gi, "");
    return str;
};
 
App.selectionStart='';
App.currentKey='';
 
App.TextareaUtils = (function() {
    var it = {},
    ds = document.selection;
    it.selectionStart = function(oElement) {
        if (!ds) {
            return oElement.selectionStart
        }
        var er = ds.createRange(),
        value,
        len,
        s = 0;
        var er1 = document.body.createTextRange();
        er1.moveToElementText(oElement);
        for (s; er1.compareEndPoints("StartToStart", er) < 0; s++) {
            er1.moveStart("character", 1)
        }
        return s
    };
    it.selectionBefore = function(oElement) {
        return oElement.value.slice(0, it.selectionStart(oElement))
    };
    it.selectText = function(oElement, nStart, nEnd) {
        oElement.focus();
        if (!ds) {
            oElement.setSelectionRange(nStart, nEnd);
            return
        }
        var c = oElement.createTextRange();
        c.collapse(1);
        c.moveStart("character", nStart);
        c.moveEnd("character", nEnd - nStart);
        c.select()
    };
    it.insertText = function(oElement, sInsertText) {
nStart = App.selectionStart;
nLen = App.currentKey.length;
        oElement.focus();
        nLen = nLen || 0;
        if (!ds) {
            var text = oElement.value,
            start = nStart - nLen,
            end = start + sInsertText.length;
            oElement.value = text.slice(0, start) + sInsertText + text.slice(nStart, text.length);
            it.selectText(oElement, end, end);
            return
        }
        var c = ds.createRange();
        c.moveStart("character", -nLen);
        c.text = sInsertText
    };
    it.getCursorPos = function(obj) {
        var CaretPos = 0;
        if ($IE) {
            obj.focus();
            var range = null;
            range = ds.createRange();
            var stored_range = range.duplicate();
            stored_range.moveToElementText(obj);
            stored_range.setEndPoint("EndToEnd", range);
            obj.selectionStart = stored_range.text.length - range.text.length;
            obj.selectionEnd = obj.selectionStart + range.text.length;
            CaretPos = obj.selectionStart
        } else {
            if (obj.selectionStart || obj.selectionStart == "0") {
                CaretPos = obj.selectionStart
            }
        }
        return CaretPos
    };
    it.getSelectedText = function(obj) {
        var selectedText = "";
        var getSelection = function(e) {
            if (e.selectionStart != undefined && e.selectionEnd != undefined) {
                return e.value.substring(e.selectionStart, e.selectionEnd)
            } else {
                return ""
            }
        };
        if (window.getSelection) {
            selectedText = getSelection(obj)
        } else {
            selectedText = ds.createRange().text
        }
        return selectedText
    };
    it.setCursor = function(obj, pos, coverlen) {
        pos = pos == null ? obj.value.length: pos;
        coverlen = coverlen == null ? 0: coverlen;
        obj.focus();
        if (obj.createTextRange) {
            var range = obj.createTextRange();
            range.move("character", pos);
            range.moveEnd("character", coverlen);
            range.select()
        } else {
            obj.setSelectionRange(pos, pos + coverlen)
        }
    };
    it.unCoverInsertText = function(obj, str, pars) {
        pars = (pars == null) ? {}: pars;
        pars.rcs = pars.rcs == null ? obj.value.length: pars.rcs * 1;
        pars.rccl = pars.rccl == null ? 0: pars.rccl * 1;
        var text = obj.value,
        fstr = text.slice(0, pars.rcs),
        lstr = text.slice(pars.rcs + pars.rccl, text == "" ? 0: text.length);
        obj.value = fstr + str + lstr;
        this.setCursor(obj, pars.rcs + (str == null ? 0: str.length))
    };
    return it
})();
 
App.check = function(current) {
            var tu=App.TextareaUtils,reg = /@[^@\s]{1,20}$/g,
            value = current.value.replace(/\r/g, ""),
            key;
            selectionStart = tu.selectionStart(current);
App.selectionStart = selectionStart;
            value = value.slice(0, selectionStart);

            if ((key = value.match(reg)) && (key = key) && /^@+$/.test(key)) {
                key = key.slice(1);
                if (App.currentKey == key) {
                    return '';
                }
            }else{
key = '';
}
 
App.currentKey = key;
return key;
};
 
App.forwardInputLimit = function(current , input) {
       var num = Math.ceil(App.byteLength(App.trim(current.value)) / 2);
        if (input) {
            if (num > 140) {
input.innerHTML = '已经超出<em>'+(num-140)+'</em>字';               
                return false
            } else {
                input.innerHTML = '还可以输入<em>'+(140-num)+'</em>字';
                return true
            }
        }
};
页: [1]
查看完整版本: Textarea ---操作