如何使用 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() 中查找所选文本的索引? 的相关文章

  • 循环选项在 youtube js api 中不起作用

    我想知道为什么我的代码不循环播放视频 除了循环选项之外 一切正常 我真的需要它 多谢 div You need Flash player 8 and JavaScript enabled to view this video div
  • 将nodejs Express静态请求重定向到https

    我需要将所有 http 请求重定向到 https 包括对静态文件的请求 My code app use express static dirname public app get function req res if req secure
  • 将相同的多个对象推送到多个数组中

    这是后续使3个数组相互对应 第一个是对象名称 https stackoverflow com questions 57564488 make 3 arrays correspond to each other with the first
  • JQuery UI Draggable - 如何知道元素是否可拖动初始化?

    我的逻辑是 if this draginited a drag disabled element shouldn t get pass here as it is inited this draggable 我搜索了很多 找不到实现这个逻辑
  • Backbone Collection 和 Marionette CompositeView 中未定义的模型原型

    尝试从值列表填充集合时 我收到有关集合的错误model s prototype未定义 看着这个问题是关于类似问题的 https stackoverflow com q 16126195 1663942 我已经检查过模型确实已创建before
  • 使用 lambda 更新 amazon s3 对象元数据而不执行对象复制?

    是否可以使用 lambda 函数添 加或更新 s3 对象元数据而不复制对象 这篇 2 年前的帖子说我们确实需要复制一份 https stackoverflow com questions 32646646 how do i update m
  • 如何使用 javascript/ASP.NET/CSS 旋转和淡入淡出背景图像

    我需要随机淡入淡出背景图像 这将是一个定时函数 例如每 5 秒一次 我需要使用 ASP NET Javascript CSS 或全部三者来完成此操作 请大家帮帮我 谢谢 Cycle 一个 jQuery 插件 是一个非常灵活的图像旋转解决方案
  • 用于自由形式绘图的 javascript 库

    是否有一个 JavaScript 库可以让我在网页上绘图 然后保存该绘图的状态 我想使用鼠标绘制 2D 图像 然后如何存储和加载该绘图 使用 HTML5 画布 绘制图像的简单示例如下 http jsfiddle net ghostoy wT
  • 如何在 Ionic 2 中动态创建具有特定类的模式?

    嗨 我已经被一个问题困扰好几天了 到目前为止还没有研究证明足够 我正在尝试在 Ionic 2 中创建一个具有特定类 或 id 的简单模式 我需要这样简单的东西
  • 检测 JavaScript 版本

    如何检测浏览器支持的 JavaScript 版本 如果有 我想检查 ECMAScript 3 ECMAScript 5 和 ECMAScript 6 注意 我想避免已弃用的language tag 这里有一个很好的参考给你 http www
  • Android键盘点击搜索输入时出现和消失

    我在用谷歌地图 Js API当我搜索一个地方时 我的输入搜索栏工作正常 当我通过 iPhone 设备使用它时 它也工作得很好 但是当我通过Android 设备然后键盘立即出现和消失 我已经找到了一些关于当我按下搜索栏时 android 键盘
  • setTimeout() 的问题

    这是我的代码 我想要它做的是写 0 等待一秒 写 1 等待一秒 写 2 等待一秒 等等 而是写 5 5 5 5 5 for i 0 i lt 5 i setTimeout document write i 1000 http jsfiddl
  • Immutable.js 推入嵌套对象中的数组

    假设有一个对象 const object foo bar 1 2 3 我需要推动4 to object foo bar array 现在我正在这样做 const initialState Immutable fromJS object co
  • javascript 多维类型数组 (Int8Array) 示例

    我尝试使用类型数组而不是数组来减少内存 function createarrayInt8 numrows numcols number var arr new Int8Array numrows for var i 0 i lt numro
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他
  • Ajax调用完成后执行函数

    我是 Ajax 新手 我尝试在使用 for 循环时使用 Ajax Ajax 调用之后 我正在运行一个使用 Ajax 调用中创建的变量的函数 该函数只执行两次 我认为 Ajax 调用可能没有足够的时间在循环开始之前进行调用 有没有办法在运行
  • IE 开发工具断点不起作用

    我正在尝试在 IE 11 中调试一些 javascript 但无法强制它在断点处停止 debugger 行工作正常 停止该行中的调试器 相同的文件没有debugger 行但在同一位置设置断点不会执行任何操作 功能正常 但调试器不会在断点处停
  • 来自 ajax 的 Bootstrap 表 json

    我有 ajax 和 bootstrap 表的问题 我有一个 ajax JSON 我用这个方法调用 document ready function ajax url php process php method fetchdata dataT
  • 使用来自Processing-JS的JSON

    我想使用编写一个应用程序处理 JS http processingjs org 并且我希望能够使用服务器端数据加载它 我还没有编写服务器端 所以我可以使用任何东西 但似乎明显的 AJAX 事情是使用 JSON 将数据上传到页面中 如何从我的
  • 带有 'as' 属性的通用 React TypeScript 组件(能够渲染任何有效的 dom 节点)

    我在下面的示例中按预期工作 我的问题是 无论如何我可以重写它 这样我就不必传递通用的T和as支柱 理想情况下我想通过asprop 并让组件的 prop 接口使用它 这在 TypeScript 中可能吗 export type Props l

随机推荐

  • 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