Safari getSelection() 不起作用

safari getSelection() not working

本文关键字:不起作用 getSelection Safari      更新时间:2023-09-26

我一直很困惑为什么这种行为发生在野生动物园上。当我键入一些文本时,我正在尝试获得选择,为此我使用 window.getSelection(),它在 Firefox、Chrome、Opera 等上工作得很好,给我这样的东西:

Selection {}
anchorNode: text
anchorOffset: 14
baseNode: text
baseOffset: 14
extentNode: text
extentOffset: 14
focusNode: text
focusOffset: 14
isCollapsed: true
rangeCount: 1
type: "Caret"
__proto__: Selection

但是在 safari9 上,当我做完全相同的事情时,结果将是这样的:

Selection
anchorNode: null
anchorOffset: 0
baseNode: null
baseOffset: 0
extentNode: null
extentOffset: 0
focusNode: null
focusOffset: 0
isCollapsed: true
rangeCount: 0
type: "None"
__proto__: SelectionPrototype

我想知道这是否是我做错了什么?如果它确实是一个错误或它不起作用,是否有可能的解决方法?还是另一种获取适用于大多数浏览器的相同信息的方法?

当我处理可内容编辑的div 时,我遇到了类似的问题,并且似乎 safari 默认user select none这使得用户无法选择任何内容。我做了

[contenteditable] {
  -webkit-user-select: auto;
  user-select: all;
}

您可以尝试将[contenteditble]替换为input或其他 css 元素。

更新

我找到了一个干净的解决方案:看看这个:https://github.com/megahertz/jquery.get-word-by-event

它使用click EVENT对象(我认为比window.getSelection更干净):

var range = document.caretRangeFromPoint(event.clientX, event.clientY);

它在 iOS 12 上运行良好。

旧帖子

我仅在iOS12上遇到了同样的问题(no mater -webkit-user-select)

我设法通过添加:contentEditable="true"来使其再次工作到 Div 容器,

但是

(大但是)不幸的是键盘出现并且内容变得可编辑!(这是意料之中的...

我仍在寻找解决方法@galart 你发现了什么吗?