Показать сообщение отдельно
  #4 (permalink)  
Старый 01.10.2015, 00:50
Профессор
Отправить личное сообщение для ТОТ_САМЫЙ Посмотреть профиль Найти все сообщения от ТОТ_САМЫЙ
 
Регистрация: 10.09.2015
Сообщений: 184

Вот готовое решение:

class SelectionSaver


  isMs = /edge|msie|trident/i.test(navigator.userAgent)
  isInteractive = off

  if isMs
    addEventListener 'mousedown', =>
        isInteractive = on
    , on

    addEventListener 'mouseup', =>
        isInteractive = off
    , on


  constructor: ->
    @selection = getSelection()
    @anchorNode = null
    @anchorOffset = null
    @focusNode = null
    @focusOffset = null
    return


  clear: ->
    @anchorNode = null
    @anchorOffset = null
    @focusNode = null
    @focusOffset = null
    return


  save: ->
    @anchorNode = @selection.anchorNode
    @anchorOffset = @selection.anchorOffset
    @focusNode = @selection.focusNode
    @focusOffset = @selection.focusOffset
    return


  restore: ->
    if isMs and isInteractive then return
    @selection.removeAllRanges()
    unless @anchorNode then return
    range = document.createRange()
    range.setStart(@anchorNode, Math.min(@anchorOffset, @anchorNode.length))
    @selection.addRange(range)
    @selection.extend(@focusNode, Math.min(@focusOffset, @focusNode.length))
    return

Последний раз редактировалось ТОТ_САМЫЙ, 02.10.2015 в 01:43.
Ответить с цитированием