获取页面上选定的文本和选定的节点?

2023-12-29

当选择文本块(可能跨越许多 DOM 节点)时,是否可以使用 Javascript 提取所选文本和节点?

想象一下这个 HTML 代码:

<h1>Hello World</h1><p>Hi <b>there!</b></p>

如果用户从“World...”开始启动 mouseDown 事件,然后在“there!”之后启动 mouseUp 事件,我希望它会返回:

Text : { selectedText: "WorldHi there!" },
Nodes: [ 
  { node: "h1", offset: 6, length: 5 }, 
  { node: "p", offset: 0, length: 16 }, 
  { node: "p > b", offset: 0, length: 6 } 
]

我尝试将 HTML 放入文本区域,但这只会得到 selectedText。我还没有尝试过<canvas>元素但这可能是另一种选择。

如果不是 JavaScript,有没有办法使用 Firefox 扩展来实现这一点?


你将经历一段坎坷的旅程,但这很有可能。主要问题是 IE 和 W3C 向选择公开了完全不同的接口,因此如果您想要跨浏览器功能,那么您基本上必须将整个过程编写两次。此外,这两个界面都缺少一些基本功能。

Mozilla 开发者连接有这样的故事W3C 选择 https://developer.mozilla.org/en/DOM/window.getSelection。微软有他们的系统MSDN 上有记录 http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx。我建议从 PPK 开始范围简介 http://www.quirksmode.org/dom/range_intro.html.

以下是我认为有效的一些基本功能:

// selection objects will differ between browsers
function getSelection () {
  return ( msie ) 
    ? document.selection
    : ( window.getSelection || document.getSelection )();
}

// range objects will differ between browsers
function getRange () {
  return ( msie ) 
      ? getSelection().createRange()
      : getSelection().getRangeAt( 0 )
}

// abstract getting a parent container from a range
function parentContainer ( range ) {
  return ( msie )
      ? range.parentElement()
      : range.commonAncestorContainer;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取页面上选定的文本和选定的节点? 的相关文章

  • 为什么我会收到此 Javascript 错误“连接未定义”?

    我不确定为什么会收到此错误 connection is not defined document getElementById flashTest sendValFromHtml connection value 这是我的代码 functi
  • 使用referrer javascript从google获取查询参数

    是否可以从google搜索中获取查询参数 IE 如果有人用谷歌搜索自行车 网址就会变成 https www google es search q bicycles 如果您随后进入搜索结果并且有人点击您的页面 您将无法看到带有 documen
  • 如何在 Nodejs - mongodb 搜索中对结果进行排序,但是,通过调用动态方法

    我正在 Nodejs 中开发一个 Web 应用程序 通过 mongo 本机连接器连接到 mongodb 在我的一个 js 文件中 我有一个通用方法来调用 find 或 findOne 操作以从 mongodb 集合中检索我需要的任何内容 如
  • 如何根据D3中的数据创建元素?

    看着sample https github com mbostock d3 wiki Selections wiki data d3 select body selectAll div data 4 8 15 16 23 42 enter
  • 将相同的多个对象推送到多个数组中

    这是后续使3个数组相互对应 第一个是对象名称 https stackoverflow com questions 57564488 make 3 arrays correspond to each other with the first
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 在多个 angular.js 应用程序之间共享单个服务

    我正在构建一个电子商务网站 基于 shopify 并且使用多个小型 angularjs 应用程序来处理诸如快速购物车 愿望清单 过滤产品和其他一些较小项目之类的事情 我最初使用了一个大型应用程序 具有路由和所有内容 但当我没有完整的 RES
  • 将 MVC 操作结果发送到打印机

    我有一个带有操作的控制器 SomeController ActionToBePrinted ActionToBePrinted 返回一个 html 视图 当按下按钮时 从普通的 mvc razor 视图调用此操作 当按下按钮时 我将如何将视
  • 如何从矩形点计算旋转角度?

    我有4分1 2 3 4闭合一个矩形 这些点按以下方式排列在数组中 x1 y1 x2 y2 x3 y3 x4 y4 我遇到的问题是矩形可以旋转一定角度 如何计算原始点 灰色轮廓 和角度 我试图在 javascript css3 transfo
  • 使用 ngx-translate 时更改 URL

    当有人使用 ngx translate 单击所选语言时 我尝试更改 URL 我想我应该通过订阅语言更改事件然后修改当前的 url 以反映所选的语言来做到这一点 因为我是新手 所以我不确定是否需要服务来做到这一点 或者可能是另一种解决方法 我
  • Ajax调用完成后执行函数

    我是 Ajax 新手 我尝试在使用 for 循环时使用 Ajax Ajax 调用之后 我正在运行一个使用 Ajax 调用中创建的变量的函数 该函数只执行两次 我认为 Ajax 调用可能没有足够的时间在循环开始之前进行调用 有没有办法在运行
  • c3js数据标签的位置

    有没有可能的方法来更改数据上方标签的位置c3条形图 在官方文档中 很好地解释了如何通过操作 y 和 x 整数来更改 x 和 y 测量轴上标签的位置 但我没有找到任何数据标签 我试图用简单的方式指出它d3其上c3是基于但是console lo
  • 添加元数据到快速路线

    有什么方法可以将元数据添加到 Express 的路线中吗 例如 app get some route function req res some meta data 我正在寻找一种针对我的节点应用程序的 AOP 方法 因此我想通过身份验证和
  • 如何在没有查询参数的情况下重新加载页面?

    假设我想重新加载www domain com abc num 4 但我想重新加载www domain com abcONLY 问号后没有所有内容 window location window location href split 0
  • Boolean("false") 返回 true..还有其他选择吗?

    我正在使用 jquery 将 true 和 false 字符串写入 data html 属性 但是 当我将 false 写入其中一个属性 然后检查它是否为 false 时 它 会返回 true 我还在网上读到它应该这样做 这真的毫无意义 有
  • IE 开发工具断点不起作用

    我正在尝试在 IE 11 中调试一些 javascript 但无法强制它在断点处停止 debugger 行工作正常 停止该行中的调试器 相同的文件没有debugger 行但在同一位置设置断点不会执行任何操作 功能正常 但调试器不会在断点处停
  • 检测浏览器是否支持 contentEditable?

    There s 这个问题 https stackoverflow com questions 3497942 browser detect contenteditable features 但发布的解决方案是浏览器嗅探 我试图避免这种情况
  • 插入四个空格而不是制表符

    我试图在按下 Tab 键时插入四个空格 我正在使用以下代码 请参阅spaces t 但是当我将其切换到spaces 当我按 Tab 时只插入一个空格 我还尝试了 function textarea keydown function e va
  • 对于调用另一个异步函数的异步函数,玩笑测试失败

    我正在尝试测试一个使用另一个异步函数返回的数据的异步函数 这是解释我的问题的代码 StudentInfo js export async function getData studentData imported from another
  • 使用来自Processing-JS的JSON

    我想使用编写一个应用程序处理 JS http processingjs org 并且我希望能够使用服务器端数据加载它 我还没有编写服务器端 所以我可以使用任何东西 但似乎明显的 AJAX 事情是使用 JSON 将数据上传到页面中 如何从我的

随机推荐