防止 JavaScript window.getSelection() 循环引用

2023-12-04

请参阅此演示(取决于目前仅在 Chrome 中有效的选择更改事件):http://jsfiddle.net/fyG3H/

选择一些 lorem ipsum 文本,然后聚焦文本输入。在控制台日志中,您将看到有一个 DOMSelection 对象。 它的anchorNode值为HTMLBodyElement虽然它应该有其中之一Text.

在我尝试对选择对象进行字符串化之前,我不知道为什么会发生这种情况:http://jsfiddle.net/fyG3H/1/

这会产生以下错误:

未捕获的类型错误:将循环结构转换为 JSON

你知道如何防止 window.getSelection() 引起的循环引用吗?

EDIT

新的演示也适用于其他浏览器,但仍然给出错误的锚节点:http://jsfiddle.net/fyG3H/5/

并使用 JSON.stringify:http://jsfiddle.net/fyG3H/6/

Firefox 似乎返回一个空的 {} 而不是抛出错误。


你需要调用toString() on getSelection(). I've 更新了你的小提琴表现得如你所期望的那样。

var selection;

$('p').bind('mouseup', function() {
    selection = window.getSelection().toString();
});

$('input').bind('focus', function() {
   this.value = selection;
   console.log(selection); 
});

See demo


EDIT:

您没有获得正确的锚节点的原因是DOMSelection对象通过引用传递,当您关注输入时,选择将被清除,从而返回与无选择相对应的选择默认值。解决这个问题的一种方法是克隆DOMSelection对象的属性并引用该对象。你不会有原型DOMSelection方法不再多,但根据您想要执行的操作,这可能就足够了。

var selection, clone;

$('p').bind('mouseup', function() {
    selection = window.getSelection();
    clone = {};
    for (var p in selection) {
        if (selection.hasOwnProperty(p)) {
            clone[p] = selection[p];
        }
    }
});

$('input').bind('focus', function() {
   console.dir(clone); 
});

See demo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 JavaScript window.getSelection() 循环引用 的相关文章

  • 如何确定并打印 jQuery 版本?

    是否有一个 jQuery 函数可以返回当前加载的 jQuery 版本 你可以使用这个 fn jquery or if you re using noConflict jQuery fn jquery 当 jQuery 构建时它会自动更新 定
  • 带换行符的 React/Momentjs 日期格式

    我有一个日期字符串 我想对其进行格式化 其中数字位于月份下 Jul 6 我尝试了几种不同的方法来添加新行
  • 为什么我的反应路由器链接将我带到页面中间?

    我的网站上有很多链接 但只有一个可以执行此操作 它没有将我带到导航栏的顶部 而是转到内容的中间 知道为什么会这样吗 这是一个页面 其中有一个 map经历一些JSON 这是渲染div页面下方的文本元素 如果重要的话 这是一些可能相关的代码 路
  • axios 请求中未发送正文数据

    我试图通过 axios 请求将数据发送到我的后端脚本 但正文看起来是空的 这是前端发送的请求 axios request method GET url http localhost 4444 next api headers Authori
  • 在 jQuery .live() 方法中模拟“焦点”和“模糊”

    Update 从 jQuery 1 4 开始 live 现在支持focusin and focusout events jQuery http www jquery com currently1 doesn t support blur o
  • 使用 jQuery Select2 清除下拉菜单

    我正在尝试使用奇妙的方式以编程方式清除下拉菜单Select2 http ivaynberg github com select2 图书馆 使用 Select2 远程 ajax 调用动态填充下拉列表query option HTML
  • JQuery datepickers-从开始日期设置结束日期

    使用了两个 Jquery 日期选择器 StartDate 和 EndDate
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • 在 R 传单中添加不透明度滑块

    如何在 R leaflet 应用程序中添加滑块来控制特定图层的不透明度 对于这个应用程序 我不想使用闪亮 这里建议 在 R 传单应用程序中添加滑块 https stackoverflow com questions 37682619 add
  • 如何在不阻止触摸启动的情况下防止“过度滚动历史导航”?

    我正在实现基于滑动的导航 但我在使用 Chrome 时遇到了麻烦 当页面向右拖动时 会触发新实现的功能 过度滚动历史导航 从而导致跳回 到 历史 1 为了防止这种情况 我必须打电话 preventDefault on touchstart
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • JS 保留以零结尾的小数[重复]

    这个问题在这里已经有答案了 在JavaScript中 是否可以 锁定 十进制数 以保留以零结尾的 浮点数 例如 我有 2 个不同的数字 如下所示 伪代码 let a 1 0 let b 1 00 a b true should be fal
  • React JS 服务器端问题 - 找不到窗口

    你好 我正在尝试在我的reactJS项目中使用react rte 我有服务器端渲染 每次我想使用这个包时 我都会得到 return msie 6 9 b test window navigator userAgent toLowerCase
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 将 Firebase FCM 添加到 ReactJS 应用程序

    我正在尝试向我的 ReactJS 应用程序中的用户发送推送通知 我已添加 firebase 请求用户通知权限 这正在发挥作用 但现在我想注册设备令牌 但这给了我错误 消息传递 我们无法注册默认的 Service Worker 无法注册 Se
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • 如何动态调整jqgrid到当前窗口大小?

    如何动态调整jqgrid到当前窗口大小 基于javascript jQuery 最好的例子在这里 TinyMCE 去 http www tinymce com tryit full php http www tinymce com tryi
  • 类中可以有生成器 getter 吗?

    我的意思是吸气剂是发电机 我相信这一切都是 ES6 也许像这样 class a get count let i 10 while i yield i let b new a for const i of b count console lo
  • PDF 在 Safari 中隐藏 Jquery Modal

    这是与我有关的事情this https stackoverflow com questions 24052681 pdf hide jquery modal in ie问题 在 IE 中 我在对话框中使用 iframe 解决了问题 所以它工

随机推荐

  • 登录对话框 PyQt

    当客户询问我是否可以在应用程序启动时实现某种登录表单时 我几乎完成了我的应用程序 到目前为止 我已经设计了用户界面 并修改了实际的执行 用户名和密码目前无关紧要 class Login QtGui QDialog def init self
  • 我无法使用 ctypes 访问 C++ 类属性

    我正在使用 ctypes 为 C 库开发一种 Python API 到目前为止 一切都很顺利 但是 我将操作系统从 Ubuntu 20 4 LTS 升级到 22 04 现在使用 Python3 10 6 和 g 11 3 0 但即使使用 g
  • 将基于Box的树结构适配为Rc+RefCell时如何处理“临时值丢失”错误?

    我创建了一个树 其类型定义类似于 derive Debug Clone pub crate struct TreeBox
  • 配置 gvim 设置颜色和字体

    我想尝试一下 vim 但是配置文件有点问题 我这里已经安装了gvimC Program Files x86 Vim vim73并添加了一个名为C Program Files x86 Vim vim73 vimrc 但是当我尝试不同的配置时
  • 通过 FTP 将文件发送到服务器,但结果到达时字节大小为零

    我正在尝试使用 FTPClient 将文件上传到数据库服务器 显示文件传输成功 但文件为空 大小为0字节 下面是我用来构建的源代码 有人能解决这个问题吗 package Examples import org apache commons
  • 如何在 JOIN 的 WHERE 子句中使用列名作为 LIKE 语句的一部分

    LEFT OUTER JOIN INVENTTRANS ON TEMP VOUCHERPHYSICAL INVENTTRANS VOUCHERPHYSICAL WHERE INVENTTRANS ITEMID Temp INVENTDIMI
  • Logstash 文件输入:sincedb_path

    重新启动 Logstash 后 有时会观察到 Logstash 会重复日志事件 想知道什么是正确的申请方式start position sincedb path sincedb write interval配置选项 当同一位置有多个文件时会
  • 立即将图像加载到内存中

    我需要将 WPF 中的 Tiff 图像中的所有帧打开到内存中 然后删除源 之后我最终需要渲染该图像 根据窗口大小调整大小 我的解决方案非常慢 我无法在第一次请求之前删除文件源 有什么最佳实践吗 Use CacheOption BitmapC
  • Python/格式 - 列表和宽度

    到目前为止 我的列表的格式是这样的 print gt 15 gt 15 gt 15 gt 15 format i liste l 我对 python 很陌生 我不知道如何通过动态设置动态宽度 我的意思是 len total int len
  • 如何按起始字符范围进行选择?

    这是我的 mySQL 查询 SELECT FROM eodList WHERE datechanged gt curdate GROUP BY symbolName ORDER BY dateChanged DESC 我如何获取所有行 例如
  • MySQL JOIN 和 COUNT 在单个查询中

    我正在尝试将两个表连接在一起并获取外键的计数 抱歉 我真的不知道如何解释自己 所以让我演示一下 我有 1 个表 订单 用于订单 包含以下字段 id f name l name credit card ETC 然后 我有一个订单中的项目的 o
  • 确定一个符号是否是第 i 个组合 nCr 的一部分

    更新 组合学和取消排名最终是我所需要的 下面的链接有很大帮助 http msdn microsoft com en us library aa289166 v vs 71 aspx http www codeproject com Arti
  • 如何为 Google Cloud Function 分配内存?

    今天我在云函数中遇到这个错误 函数被杀死 错误 超出内存限制 我的功能是基于经过身份验证的 json api 示例Firebase 示例函数 因为它工作起来就像一个魅力 我用多个路由和多个任务扩展了它 比如连接多个外部 api 将 base
  • JTable刷新不显示

    我拼命地试图说服我的JTable当我更改其数据时刷新 数据存储在全局单例中 TreeSet 我正在使用 每当TreeSets 数据被更改 会触发一个事件来刷新TableModel 出于测试目的 我将其替换为一个简单的Timer射击事件 每次
  • 无法从数据源获取单元格

    下面的代码有什么问题 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath NSString CellIden
  • 使用 cout 打印正确的小数位数

    我有一个清单float值 我想打印它们cout保留 2 位小数 例如 10 900 should be printed as 10 90 1 000 should be printed as 1 00 122 345 should be p
  • 我无法删除使用苹果登录的用户

    我们正在实施新的指导方针Apple 强制要求删除用户 我正在使用 firebase 进行身份验证 我正在创建一个用户帐户 这里没问题 但我无法删除使用苹果登录的用户 我收到错误 我正在使用这个api来删除 令牌撤销API 我是快速的新手 我
  • 首次未加载带有毕加索的地图标记点图像

    我正在使用自定义标记实现 android Mapview 我正在使用毕加索将图像加载到标记视图中 当我第一次启动该应用程序时 它会向我显示所有标记 但只有一个标记是使用 picasso 从数据库加载的 其他标记不会从数据库加载 它们只向我显
  • 如何对 DataGridView 列进行排序?

    我创建了一个数据表 如下所示 accTable new DataTable accTable Columns Add new DataColumn Date accTable Columns Add new DataColumn Amt a
  • 防止 JavaScript window.getSelection() 循环引用

    请参阅此演示 取决于目前仅在 Chrome 中有效的选择更改事件 http jsfiddle net fyG3H 选择一些 lorem ipsum 文本 然后聚焦文本输入 在控制台日志中 您将看到有一个 DOMSelection 对象 它的