如何从选定的文本中获取相邻字符?

2024-03-15

我有一个像这样的字符串:

var comment = 'this is a test';

Assume this i已选择,现在我需要null(左侧)和s(右边)。我怎样才能得到它们?


我可以像这样获取选定的文本:

function getSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}

var selected_text = getSelectionHtml();

document.addEventListener("click", function() {
  var selection = window.getSelection();
  // Check if there are any ranges selected.
  if (selection.rangeCount > 0 && selection.type == "Range") {
    // Text content of the element.
    var text = selection.anchorNode.textContent;
    // selection.anchorOffset is the start position of the selection
    var before = text.substring(selection.anchorOffset-1, selection.anchorOffset);
    // selection.extentOffset is the end position of the selection
    var after = text.substring(selection.extentOffset, selection.extentOffset+1);
    // Check if there are any letters before or after selected string.
    // If not, change before and after to null.
    before = before.length === 1 ? before : null;
    after = after.length === 1 ? after : null;
    console.log(before, after);
  }
});
<div>this is a test</div>

要获得两个字符:

document.addEventListener("click", function() {
  var selection = window.getSelection();
  // Check if there are any ranges selected.
  if (selection.rangeCount > 0 && selection.type == "Range") {
    // Text content of the element.
    var text = selection.anchorNode.textContent;
    // selection.anchorOffset is the start position of the selection
    var before = text.substring(selection.anchorOffset-2, selection.anchorOffset);
    // selection.extentOffset is the end position of the selection
    var after = text.substring(selection.extentOffset, selection.extentOffset+2);
    // Check if there are any letters before or after selected string.
    // If not, change before and after to null.
    before = before.length >= 1 ? before : null;
    after = after.length >= 1 ? after : null;
    console.log(before, after);
  }
});
<div>this is a test</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从选定的文本中获取相邻字符? 的相关文章

随机推荐

  • 在 keyDown 事件中获取修饰符Flags,而无需同时按下非修饰键!

    我在 NSDocument 应用程序中对 NSWindow 进行了子类化 以便接收 keyDown 事件 我在我的子类中使用了以下代码 void keyDown NSEvent theEvent NSLog keyDown if theEv
  • 如何在 ILNumerics 中配置刻度标签位置?

    I draw some lines with ILLinePlot 然后我旋转立方体 目的是更改从顶部开始的 Y 刻度标签的位置 Rotation Matrix4 Rotation new Vector3 1 0 0 ILMath pif
  • 显示构建日期

    我目前有一个应用程序在其标题窗口中显示内部版本号 这很好 但对大多数用户来说没有任何意义 他们想知道他们是否拥有最新版本 他们倾向于将其称为 上周四的 而不是版本 1 0 8 4321 计划是将构建日期放在那里 例如 应用程序构建于 21
  • 当我从另一个方法调用方法时,React-native Bridge 为零

    但我注意到 每当我从另一个方法调用它时 我的桥变量都是零 我相信这是因为只有在从 javascript 调用桥接方法时才会设置桥接 我已经尝试了从创建委托到创建 SingleTon 类的所有方法 以上都不起作用 我不明白为什么它只能在我从
  • Streamfield 中的 Wagtail SnippetChooserBlock

    我在从片段中获取值时遇到一些问题 我已使用片段选择器块将其包含到流场中 生物片段 register snippet class BioSnippet models Model name models CharField max length
  • 无法引用函数,因为它是已删除的函数

    你好 我正在从一本书上学习 C 正在做下面的练习题 编写一个接受并返回 istream 的函数 该函数应该读取流 直到到达文件末尾 该函数应将其读取的内容打印到标准输出 在返回流之前重置流使其有效 include stdafx h incl
  • OBD2 - ELM327蓝牙模拟器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发 Android 应用程序 用于通过蓝牙连接到汽车单元的 ELM327 有没有模拟器可以通过
  • 使用 Gradle 添加到 WAR 包中的错误文件

    我正在使用 Gradle 1 5 并且我正在尝试适应战争插件 http www gradle org docs current userguide war plugin html到 Eclipse 动态项目 当 WAR 被 eclipse
  • 禁用该复选框时不应进行更新

    我有两页 一页是管理员 另一页是教师 管理员将科目分配给教师 教师只想选择所需的时间 我的问题是我不想对禁用的复选框执行更新查询 我已经尝试了下面的代码 但它也在更新禁用复选框 using SqlConnection con2 new Sq
  • 当 A-lx 是奇异且无解时的特征向量

    R 如何找到以下矩阵的特征向量 特征值是 2 2 所以特征向量需要求解solve matrix c 0 1 0 0 2 2 这是无解的奇异矩阵 gt eigen matrix c 2 1 0 2 2 2 values 1 2 2 vecto
  • 了解elasticsearch jvm堆的使用情况

    Folks 我正在尝试减少 Elasticsearch 部署 单节点集群 中的内存使用量 我可以看到正在使用 3GB JVM 堆空间 为了优化 我首先需要了解瓶颈 我对 JVM 使用如何分配的了解有限 字段数据看起来消耗 1 5GB 过滤器
  • 如何使用 PhpStorm 和 Xdebug 调试 AJAX (POST)?

    我已将 PhpStorm 配置为调试 HTTP GET 但仅当我直接加载页面时 当我想要调试 AJAX 时 我获取 JS 请求的 URL 并创建一个 PhpStorm 配置来调试它 不是特别优雅 是吗 当然 我不能对 POST 请求这样做
  • 什么是投影?

    从数据库理论和 NHibernate 的角度来看 使用 SetProjection 时什么是投影 投影是关系代数的基本运算之一 它采用一个关系和该关系的属性列表 可能为空 作为输入 它输出仅包含指定属性列表的关系删除重复的元组 换句话说 输
  • 多个事实的聚合解决方案

    尝试创建一个谓词 timePeriod 2 计算特定事实的两个日期之间的时间段 我已经设法自己做到这一点 但当 其他答案 存在于同一列表中时会遇到问题 即更容易用示例解释 我有以下知识基础事实 popStar Jackson 1987 19
  • 以 HTML 代码作为输入的 Angular 组件

    我正在创建一个角度组件 它显示突出显示的 HTML 代码及其执行结果 显示的 HTML 代码位于 pre html 元素内 至于结果的预览 它是硬编码的 pre class prettyprint lang html lt button t
  • 带 Join 的 TSQL Update 语句

    我有两个具有父 子关系的表 我想用孩子的数据更新父母 但是 假设有 2 个孩子 我希望能够根据孩子的其他列来选择哪个孩子用于更新 这是我到目前为止所拥有的 父级 test 孩子 exdat 预期结果 更新后父级的结果应仅包含大写字母 我想用
  • 如何在一页中执行多个查询?

    我编写了这段代码 但是当我运行它时没有输出 没有错误但是问题没有输出 如何在同一页面中执行多个查询
  • ConstraintLayout 问题 - ImageView 16:9 上边距不合适

    我想使用 ConstraintLayout 构建以下布局 我使用这个源进行布局
  • Python记录器不尊重setLevel?

    我花了一些时间浏览网站上的 Python 记录器问题 希望我的问题能在那里得到解决 我已经设置了一个带有两个流处理程序的记录器 它们具有不同的格式和日志记录级别 这是我的代码库中的功能片段 import os import time imp
  • 如何从选定的文本中获取相邻字符?

    我有一个像这样的字符串 var comment this is a test Assume this i已选择 现在我需要null 左侧 和s 右边 我怎样才能得到它们 我可以像这样获取选定的文本 function getSelection