小编典典

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

all

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

例如:This is| a text

这应该返回7

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

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

如果“s”这个词被突出显示,那么它会返回'This ', 'is', ' a text'


阅读 100

收藏
2022-08-21

共1个答案

小编典典

使用 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插件,它允许您执行此操作以及更多…

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

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

在此处查看示例。

2022-08-21