在textarea中的插入符位置,从字符开始 [英] Caret position in textarea, in characters from the start

查看:193
本文介绍了在textarea中的插入符位置,从字符开始的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用JavaScript在文本区域中获得插入符位置?



例如:

一个文本



这应该返回7。



返回光标/选择周围的字符串?例如:



'这是','','一个文本'

单词is被突出显示,则它将返回'This','is','a text'

解决方案

对于Firefox,Safari(和其他基于Gecko的浏览器),你可以很容易地使用textarea.selectionStart,但对于IE不起作用,所以你必须这样做:

  function getCaret(node){
if(node.selectionStart){
return node.selectionStart;
} else if(!document.selection){
return 0;
}

var c =\001,
sel = document.selection.createRange(),
dul = sel.duplicate(),
len = 0;

dul.moveToElementText(node);
sel.text = c;
len = dul.text.indexOf(c);
sel.moveStart('character', - 1);
sel.text =;
return len;
}

完整代码



我还建议您检查jQuery FieldSelection 插件,它允许

编辑:我实际上重新实现了上面的代码:





$ b b

  function getCaret(el){
if(el.selectionStart){
return el.selectionStart;
} else if(document.selection){
el.focus();

var r = document.selection.createRange();
if(r == null){
return 0;
}

var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart',re);

return rc.text.length;
}
return 0;
}

查看示例此处


How do you get the caret position in text area using JavaScript?

For example:
This is| a text

This should return 7.

How would you get it to return the strings surrounding the cursor/selection? eg:

'This is', '', ' a text'
If the word "is" is highlighted, then it would return 'This ', 'is', ' a text'

解决方案

With Firefox, Safari (and other Gecko based browsers) you can easily use textarea.selectionStart, but for IE that doesn't work, so you will have to do something like this:

function getCaret(node) {
  if (node.selectionStart) {
    return node.selectionStart;
  } else if (!document.selection) {
    return 0;
  }

  var c = "\001",
      sel = document.selection.createRange(),
      dul = sel.duplicate(),
      len = 0;

  dul.moveToElementText(node);
  sel.text = c;
  len = dul.text.indexOf(c);
  sel.moveStart('character',-1);
  sel.text = "";
  return len;
}

(complete code here)

I also recommend you to check the jQuery FieldSelection Plugin, it allows you to do that and much more...

Edit: I actually re-implemented the above code:

function getCaret(el) { 
  if (el.selectionStart) { 
    return el.selectionStart; 
  } else if (document.selection) { 
    el.focus(); 

    var r = document.selection.createRange(); 
    if (r == null) { 
      return 0; 
    } 

    var re = el.createTextRange(), 
        rc = re.duplicate(); 
    re.moveToBookmark(r.getBookmark()); 
    rc.setEndPoint('EndToStart', re); 

    return rc.text.length; 
  }  
  return 0; 
}

Check an example here.

这篇关于在textarea中的插入符位置,从字符开始的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆