javascript - 如何从一开始就以字符形式获取文本区域中的插入符号列(不是像素)位置?

标签 javascript textarea caret

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

例如:This is| a text

这应该返回 7 .

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

例如:'This is', '', ' a text' .

如果单词“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;
}

( complete code here )

我还建议您检查 jQuery FieldSelection插件,它可以让你做到这一点以及更多......

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

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

查看示例here .

关于javascript - 如何从一开始就以字符形式获取文本区域中的插入符号列(不是像素)位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/263743/

相关文章:

apache-flex - 如何在flex textarea中使文本换行

javascript - 使用 Javascript 移动光标位置?

javascript - 在空白行上获取内容可编辑的 UIWebView 中的插入符号

javascript - 在 javascript 中定义类的最佳方法是什么

javascript - 获取文本区域中插入符号的偏移位置(以像素为单位)

php - jquery ajax 上的 Textarea 没有发送到 mysql,只是输入字段

javascript - IE : Is there a fast way to get the caret position in an iframe on designMode?

javascript - 无法设置 null 的属性 'onclick'

javascript - 过滤方法 - Angular.JS

javascript - 在javascript中通过更多数量计算更便宜的价格