Microsoft Edge window.getSelection () возвращает неверный результат - PullRequest
0 голосов
/ 27 апреля 2018

Я испытываю это с Microsoft Edge; Хром ведет себя как положено.

Проблема заключается в том, что когда последний символ включен в выделение, window.getSelection (). AnchorOffset или window.getSelection (). FocusOffset возвращает 1 при использовании Edge. (То, какая функция возвращает значение 1, зависит от того, в каком направлении сделан выбор.) Что касается приведенного ниже примера, я ожидаю, что значение будет 225, что и возвращает Chrome. Когда выбор включает в себя что-либо кроме последнего символа, результат является правильным. Любое руководство относительно обходного пути или другого подхода будет оценено. Спасибо.

<style>
    #mydiv {
        position: absolute;
        display: inline-block;
        border: 1px solid;
        top: 100px;
        left: 100px;
        width: 400px;
        height: 300px;
    }
</style>

<script>
    var mydiv = document.getElementById("mydiv");
    mydiv.addEventListener("dragstart", function (e) {
        e.preventDefault();
        var s = window.getSelection().anchorNode.textContent;
        var anchorOffset = window.getSelection().anchorOffset;
        var focusOffset = window.getSelection().focusOffset;
        myresults.textContent = "anchorOffset: " + anchorOffset + " focusOffset: " + focusOffset;
    });
    var myresults = document.getElementById("myresults");
</script>

<div id="mydiv" class="mydiv" contenteditable="true">Microsoft Edge: Select a portion of text here then drag it. The selection anchorOffset and focusOffset will display. Do it again, but this time make sure the last character is included in the selection. One of the values will be 1!</div>
<div id="myresults"></div>

1 Ответ

0 голосов
/ 10 марта 2019

Вы можете попробовать использовать

function getSelectedText() {
  var txt = '';

  if (window.getSelection) {
    txt = window.getSelection();
  }
  else if (document.getSelection) {
    txt = document.getSelection();
  }
  else if (document.selection) {
    txt = document.selection.createRange().text;
  }
  else return; 

  return txt;
}

Совместимость браузера с этим методом приведена ниже.

Справка:

DocumentOrShadowRoot.getSelection () - Веб-API | MDN

https://caniuse.com/#search=window.getSelection

Кроме того, если вы хотите проверить, является ли браузер Edge, вы можете сделать это ниже.

window.navigator.userAgent.indexOf("Edge") > -1
...