如何使用 javascript 在 getSelection() 中查找所选文本的索引?

2024-03-09

我正在尝试将样式应用于用户选择的文本(鼠标拖动),为此我需要获取所选文本的开始和结束索引。

我尝试过使用“indexOf(...)”方法。但它返回所选子字符串的第一次出现。我想要子字符串相对于原始字符串的实际位置。例如..,如果我选择位置 3 处的字母“O”[YOLOCobe],我期望索引为 3,但 indexOf() 方法返回 1,这是 [Y 中第一次出现 'O'O洛·科布]。

是否有任何其他方法可以获取所选文本的实际开始和结束索引,而不是第一次出现?

function getSelectionText()
{
    var text = "";
    if (window.getSelection) {
        text = window.getSelection().toString();
    }
    return text;
}
document.getElementById('ip').addEventListener('mouseup',function(e)
{
        var txt=this.innerText;
        console.log(txt);
        var selectedText = getSelectionText();
        console.log(selectedText);
        var start = txt.indexOf(selectedText);
        var end = start + selectedText.length;
        if (start >= 0 && end >= 0){
    	    console.log("start: " + start);
    	    console.log("end: " + end);
        }
});
<div id="ip">YOLO Cobe</div>

您正在寻找的内容可在返回的对象内找到window.getSelection()

document.getElementById('ip').addEventListener('mouseup',function(e)
{
        var txt = this.innerText;
        var selection = window.getSelection();
        var start = selection.anchorOffset;
        var end = selection.focusOffset;
        if (start >= 0 && end >= 0){
    	    console.log("start: " + start);
    	    console.log("end: " + end);
        }
});
<div id="ip">YOLO Cobe</div>

以下是基于 @Kaiido 评论的页面上更复杂选择的示例:

document.addEventListener('mouseup',function(e)
{
        var txt = this.innerText;
        var selection = window.getSelection();
        var start = selection.anchorOffset;
        var end = selection.focusOffset;
        console.log('start at postion', start, 'in node', selection.anchorNode.wholeText)
        console.log('stop at position', end, 'in node', selection.focusNode.wholeText)
});
<div><span>Fragment1</span> fragment2 <span>fragment3</span></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 javascript 在 getSelection() 中查找所选文本的索引? 的相关文章

随机推荐

  • PHP:仅检查字符

    如何检查变量是否只包含字符而不包含数字 我检查了 is string 但是如果你将变量设为 123 你就可以破解它 Use ctype alpha http www php net manual en function ctype alph
  • VBA 是否包含注释块语法? [复制]

    这个问题在这里已经有答案了 在VBA中是否有一种简短的方法来注释掉代码块 就像java使用的那样 尽管没有语法 您仍然可以使用内置的块注释按钮来接近 如果您尚未查看 编辑 工具栏 请右键单击工具栏并启用 编辑 工具栏 然后 选择一段代码并点
  • Drupal 的搜索模块可以搜索子字符串吗? (部分搜索)

    Drupal核心搜索模块 仅搜索关键字 例如 三明治 我可以使用子字符串进行搜索吗 例如 三明治 并返回我的三明治结果 也许有一个插件可以做到这一点 最直接的模块可能是模糊搜索 http drupal org project fuzzyse
  • 使用mockito使用依赖的泛型参数对方法进行存根

    我试图用依赖的通用参数来存根一个方法 如下所示
  • 我如何开始使用 Wicket? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 仅通知 Teams 机器人的服务 URL

    我正在开发一个仅通知团队机器人 仅限于单个天蓝色广告租户的成员 根据本文档 https learn microsoft com en us microsoftteams platform resources bot v3 bots cont
  • Angularjs:类型错误:无法调用 null 的方法“insertBefore”

    请在这里找到小提琴http jsfiddle net UxYLa 6 http jsfiddle net UxYLa 6 这是我正在尝试做的事情的简化形式 有两个指令 一个是嵌套的 subDirective 它根据选择 随机 动态创建 ht
  • PHP 中的对象克隆是什么?

    有人可以解释一下吗 PHP 中的对象克隆是什么 我什么时候应该在 php 中使用克隆关键字 对象克隆是制作对象副本的行为 作为Cody https stackoverflow com questions 2144506 what is ob
  • 调用 B2C 安全 Function App API 的 Angular 应用程序收到 500,Function 收到 404

    Angular网站托管在Azure 存储帐户 as a 静态网站当调用 Azure B2C 保护时收到 500功能应用程序功能 该函数正在接收 404 Update 这个问题的原始标题是 调用 B2C 安全函数的 Angular 应用程序接
  • 当 App Store 发布新更新/版本时如何通知用户? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我的 iPhone 应用程序启动时 我想通知用户 App store 上是否有新的更新 版本发布 有人有什么想法或者其他人取得过类似
  • N层数据库应用程序不使用ORM,UI如何指定需要显示的数据?

    我正在这里寻找指示和信息 我将制作此 CW 因为我怀疑它没有一个正确的答案 这是针对 C 的 因此我将在下面引用 Linq 我也为这么长的帖子道歉 让我在这里总结一下这个问题 然后是完整的问题 摘要 在 UI BLL DAL DB 4 层应
  • 将 Finder Sync Extension 中的安全范围书签与应用程序组 UserDefaults 一起使用

    在我的查找器同步扩展中解析安全范围书签时 我收到以下错误 错误域 NSCocoaErrorDomain 代码 259 无法打开该文件 因为它的格式不正确 也可能是相关日志记录 https stackoverflow com question
  • 如何列出所有 CMake 构建选项及其默认值?

    如何在命令行中列出 cmake 默认构建选项 我需要从源代码构建 OpenCV 库 在此之前 我想知道默认的构建设置是什么 cmake LAH 列出所有option and set CACHE 变量 包括标记为高级的变量 执行以下操作 cm
  • Python:发出嘟嘟声

    我试图让程序给我发出嘟嘟声 我在 Windows 机器上 我看过http docs python org library winsound html http docs python org library winsound html 但不
  • Tkinter - 检查应用程序是否具有焦点

    我正在尝试子类化Tk暂停音频的地方当且仅当整个应用程序失去焦点 即Tk实例失去焦点并且焦点没有传递给Toplevel or messagebox小部件 我设法让它有点像 黑客 一样工作 当一个messagebox是开放的 它是最后一个孩子T
  • 需要 excel 宏 - vba 的帮助

    有一套SUMIF我需要经常调整的公式 我唯一需要调整的是它的第三部分 每次运行宏时 第三部分或总和范围列需要向右移动 1 列 例如 我的公式可以是 SUMIF A 1 A 10 A15 C 1 C 10 我希望能够运行一个宏来调整上述内容
  • 如何在flutter中创建和导出csv文件?

    我有列表数据 List
  • 黄瓜与 TestNG

    我们在 TestNG 中使用 Selenium WebDriver 有一个非常广泛的框架 我希望能够继续使用它 但使用 Cucumber BDD 我知道 Cucumber 可以与 JUnit 一起使用 但不确定它是否可以与 TestNG 一
  • 从 USB 闪存驱动器自动运行程序 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在互联网上寻找配置闪存驱动器以自动播放位于其根文件夹中的文件的方法 但似乎没有任何效果 目前 我有一个presentation html 文件
  • 如何使用 javascript 在 getSelection() 中查找所选文本的索引?

    我正在尝试将样式应用于用户选择的文本 鼠标拖动 为此我需要获取所选文本的开始和结束索引 我尝试过使用 indexOf 方法 但它返回所选子字符串的第一次出现 我想要子字符串相对于原始字符串的实际位置 例如 如果我选择位置 3 处的字母 O