当前位置: 首页 > 面试题库 >

JavaScript如何从头开始以字符为单位在文本区域中插入符号的列(不是像素)位置?

齐阳
2023-03-14
问题内容

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

我还建议您检查jQueryFieldSelection插件,它可以使您做到这一点以及更多…

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

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


 类似资料:
  • 问题内容: 如何从输入字段中获得插入符的位置? 我已经通过Google找到了一些零散的信息,但是没有任何防弹证据。 基本上像jQuery插件之类的东西是理想的,所以我可以简单地做 问题答案: 更新更容易: 使用时,它与所有主要浏览器兼容。 更新:仅当未定义类型或在输入上时,此方法才有效。 旧答案: 找到了这个解决方案。不是基于jquery的,但是将其集成到jquery中没有问题:

  • 问题内容: 给定特定对象,有没有一种方法可以计算不使用任何GUI组件的字符串的长度(以像素为单位)? 问题答案: 那不使用任何GUI组件? 这取决于您在这里的意思。我假设您的意思是您希望在不收到的情况下进行此操作。 最好的方法是使用。AFAIK,这不会抛出: 除了使用类似的方法,我认为您不能。您需要图形上下文才能创建并提供字体大小信息。

  • 问题内容: 如何从输入字段中获得插入符的位置? 我已经通过Google找到了一些零散的信息,但是没有任何防弹证据。 基本上像jQuery插件之类的东西是理想的,所以我可以简单地做 问题答案: 找到了这个解决方案。不是基于jquery的,但是将其集成到jquery中没有问题:

  • 如何在Java中计算的宽度(以像素为单位)?例如,我有一个字符串说“你好世界!它的长度是多少(以像素为单位),还要考虑它的字体系列和大小?

  • 如果从中拖动元素,浏览器通常会显示如下图所示的“中间插入符号”: 我正在寻找一个简单可靠的解决方案,通过发送元素ID作为通过拖放传输数据来从内拖动元素。然后,在方法中,我打算将放在这个中间插入符号当前所在的确切位置。 问题是:我能从所有的浏览器中获得这些信息吗? 我确实有一个基地(JSFiddle),但目前对我来说远没有用。 PS:我没有使用jQuery或任何其他库。

  • 问题内容: 我想在 android中 以像素为单位计算字符串字体宽度。我有字符串数组,我将所有这些数组元素附加到一个字符串中。所以我必须在两个连续的数组元素之间设置固定的间距。我将最后一个字符串放入textview中。最后,我将这个textview添加到tablerow中。简而言之,我想查看带有标题和值的表结构。我在这里看到过很多帖子,但没有得到解决方案。 提前致谢…!!! 问题答案: 似乎上有可