如何从一开始就以字符形式在textarea中获取插入符号列(不是像素)的位置? [英] How to get the caret column (not pixels) position in a textarea, in characters, from the start?

查看:214
本文介绍了如何从一开始就以字符形式在textarea中获取插入符号列(不是像素)的位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用JavaScript在< textarea> 中获得插入位置?

How do you get the caret position in a <textarea> using JavaScript?

例如: 这是|一个文本

这应该返回 7

如何让它返回光标/选择周围的字符串?

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

例如:'这是', '',''text'

如果单词is突出显示,那么它将返回'这个','是','文字'

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

推荐答案

使用Firefox,Safari(和其他基于Gecko的浏览器)您可以轻松使用textarea.selectionStart,但对于不起作用的IE,您必须执行以下操作:

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;
}

此处完整代码

我还建议你查看jQuery FieldSelection 插件,它允许你这样做还有更多...

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

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

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; 
}

查看示例这里

这篇关于如何从一开始就以字符形式在textarea中获取插入符号列(不是像素)的位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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