【问题标题】:safari getSelection() not working野生动物园getSelection()不起作用
【发布时间】:2018-09-24 23:04:38
【问题描述】:

我一直很困惑为什么这种行为会发生在 safari 上。我试图在输入一些文本时进行选择,为此我使用了 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

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

【问题讨论】:

    标签: javascript safari textselection


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      更新

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

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

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

      它在 iOS 12 上运行良好。

      旧帖

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-18
        • 2021-12-31
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 2016-02-26
        相关资源
        最近更新 更多