当前位置: 代码迷 >> Web前端 >> Textarea -操作
  详细解决方案

Textarea -操作

热度:472   发布时间:2012-10-08 19:54:56.0
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[0]) && /^@[a-zA-Z0-9\u4e00-\u9fa5_]+$/.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

?? ? ? ? ? ?}

?? ? ? ?}

};


  相关解决方案