Thursday, December 25, 2008

开写工作博客,第一篇,textarea input 区域 获取及设置 cursor position

以下文字通过以下在线拼音输入法输入:

http://input.abcn.net/

前两天在学校机房碰到民崇,他电脑坏了,作业什么的只能在学校机房做,没有中文输入法很头疼,这段在公司也是,能显示中文,但是没有权限装中文输入法。。。

在网上有一些网站提供在线中文输入法,但是都不太完美,我暂时把 Dict.cn 海词 的在线中文输入法改了改放上,集合了一些其它站上的优点,比如加了MSN Web Message WebQQ ICQ2Go!,不过还是不够完美,不能输入“”《》这四个符号。以后继续修改。。。不过比较麻烦貌似。先这么放上,基本够用了,而且很好用,词的顺序跟我最爱用的智能ABC完全一样,huhu~

工作博客第一篇,内容是javascript...


function setCursorPos(element, pos) {

 if (element.createTextRange) { // IE

  var range = element.createTextRange();

  range.collapse(true);

  range.moveStart('character', pos);

  range.select();

 } else if (element.setSelectionRange) { // Firefox

  element.focus();

  element.setSelectionRange(pos+1, pos+1);

 }

}



function getSelectionPos(element) {

 if (typeof(element.selectionStart) == "number") { // Firefox einfach so, egal in Textarea oder Input

  start = element.selectionStart;

  end = element.selectionEnd;

 } else if (document.selection) { // IE Textarea, muss die Anzahl von Leerzeichen bestimmen

  var range = document.selection.createRange().duplicate();

  if (element.type == "textarea") {

   var range_all = document.body.createTextRange();

   range_all.moveToElementText(element);

   for (start = 0; range_all.compareEndPoints("StartToStart", range) < 0; start++)

    range_all.moveStart('character', 1);

   start_leer = 0; // Leerzeichen vor der start-position zu finden

   for (var i = 0; i <= start+start_leer; i++) {

    if (element.value.charAt(i) == '\n')

     start_leer++;

   }

   var range_all = document.body.createTextRange();

   range_all.moveToElementText(element);

   for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end++)

    range_all.moveStart('character', 1);

   end_leer = 0; // Leerzeichen vor der end-position zu finden

   for (var i = 0; i <= end+end_leer; i++) {

    if (element.value.charAt(i) == '\n')

     end_leer++;

   }

  } else { // IE Input

   var flag = false;

   if (range.text == '') { // falls nichts selected, move die Endpunkt zum End

    range.moveEnd('character', element.value.length);

    flag = true;

   }

   // falls in Text Range gibt es noch gar keine Zeichen, das bedeutet, Cursor ist jetzt am End des Input area

   // dann start position ist die Lange des Strings, else start position ist die Position des ersten Zeichens

   start = (range.text == '') ? element.value.length : element.value.indexOf(range.text);

   // falls vorher ist die Text Range leer (flag==true), dann end position gleich wie start position

   // else ist end position = start position + die Lange des Strings

   end = flag ? start : start + range.text.length;

   start_leer = 0;

   end_leer = 0;

  }

 }

}

No comments:

Post a Comment

© Chutium / Teng Qiu @ ABC Netz Group