Range = document.getSelection (). GetRangeAt (0) не работает в Safari - PullRequest
3 голосов
/ 02 ноября 2019

У меня есть функция на моем веб-сайте, которая копирует адрес электронной почты при каждом нажатии. Он отлично работает в Chrome, но текст не будет выделен в Safari. Могу ли я что-нибудь сделать, чтобы он работал и в Safari?

enter image description here

Вот скрипка с соответствующим кодом: https://jsfiddle.net/zsoltszilvai/odbxze9j/12/

function myFunction3() {
  var copyText = document.getElementById("myInput3"),
  range = document.getSelection().getRangeAt(0),
  tooltip = document.getElementById("myTooltip3");

  range.selectNode(copyText);
  document.execCommand("Copy");
  tooltip.innerHTML = "Copied";
}

function outFunc3() {
  var tooltip = document.getElementById("myTooltip3");
  tooltip.innerHTML = "Click to copy";
}

1 Ответ

3 голосов
/ 02 ноября 2019

<!DOCTYPE html>
<html>

<body>
  <style media="screen">
    .tooltip {
      position: relative;
      display: inline-block;
    }
    
    .tooltip:hover {
      border-bottom: dotted 1px grey;
      cursor: pointer;
    }
    
    .tooltip .tooltiptext {
      visibility: hidden;
      font-size: 18px;
      width: 120px;
      background-color: black;
      color: white;
      text-align: center;
      border-radius: 2px;
      padding: 8px;
      position: absolute;
      z-index: 1;
      bottom: 150%;
      left: 50%;
      margin-left: -60px;
      opacity: 0;
      transition: opacity 0.3s;
    }
    
    .tooltip .tooltiptext::after {
      content: "";
      position: absolute;
      top: 100%;
      left: 50%;
      margin-left: -5px;
      border-width: 5px;
      border-style: solid;
      border-color: #555 transparent transparent transparent;
    }
    
    .tooltip:hover .tooltiptext {
      visibility: visible;
      opacity: 1;
    }
  </style>


  <html>

  <body>

    <h1>
      Hello there
    </h1>

    <p>Write me an email to <span class="tooltip"><span onclick="myFunction3()" onmouseout="outFunc3()" id="myInput3">hello@johndoe.com</span> <span class="tooltiptext" id="myTooltip3">Click to copy</span> </span> or just contact me on social media.</p>

  </body>

  </html>

  <script type="text/javascript">
    function myFunction3() {
      var copyText = document.getElementById("myInput3");
      var range = document.createRange();
      selectText('myInput3')

      tooltip = document.getElementById("myTooltip3");

      document.execCommand("Copy");
      tooltip.innerHTML = "Copied";
    }

    function outFunc3() {
      var tooltip = document.getElementById("myTooltip3");
      tooltip.innerHTML = "Click to copy";
    }

    function selectText(element) {
      var text = document.getElementById(element);
      if (document.body.createTextRange) {
        var range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
      } else if (window.getSelection) {
        var selection = window.getSelection();
        var range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
      } else {
        alert("none");
      }
    }
  </script>

</body>

</html>

Различные браузеры могут по-разному выбирать контент, поэтому я написал здесь метод selectText, и я могу хорошо работать в Safari.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...