首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >safari getSelection()不工作

safari getSelection()不工作
EN

Stack Overflow用户
提问于 2016-02-09 07:29:02
回答 2查看 2K关注 0票数 3

我一直不明白为什么这种行为会发生在safari上。当我输入一些文本时,我试图获得选择,为此我使用了window.getSelection(),它在火狐,Chrome,Opera等浏览器上运行得很好,给了我一些类似的东西:

代码语言:javascript
复制
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上,当我做完全相同的事情时,结果将是:

代码语言:javascript
复制
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

我想知道这是不是我做错了什么?如果它确实是一个bug,或者它不工作,有没有可能的变通方法?或者另一种方法来获得在大多数浏览器上都能工作的相同信息?

EN

回答 2

Stack Overflow用户

发布于 2016-05-06 05:24:38

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

代码语言:javascript
复制
[contenteditable] {
  -webkit-user-select: auto;
  user-select: all;
}

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

票数 3
EN

Stack Overflow用户

发布于 2018-09-24 18:13:09

更新

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

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

代码语言:javascript
复制
var range = document.caretRangeFromPoint(event.clientX, event.clientY);

它在iOS 12上运行得很好。

旧POST

我只在iOS12上遇到了同样的问题(不是mater -webkit-user-select)

我设法通过向Div容器添加: contentEditable="true“让它再次工作,

但是不幸的是,键盘出现了,内容变成了可编辑的!(这几乎是意料之中的…)

我还在寻找一个变通的方法@galart,你发现什么了吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35281283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档