javascript - Microsoft Edge 浏览器中的 range.endOffset 给出了错误的值

标签 javascript html range microsoft-edge

这是 Microsoft Edge 浏览器的特定问题。我正在尝试使用 Range API 将 CSS 样式附加到选定的单词。当我尝试公开功能 range.endOffset 时,边缘浏览器出现问题。在这里我附上我的代码。

  <!DOCTYPE html>
  <html>
  <body>
  <p>This is sample content</p>
  <p id="demo"></p>

  <script>
  var range = null;
  var selection = window.getSelection();
  if( selection && selection.rangeCount > 0 ) 
  {
       range = selection.getRangeAt( 0 );
  }

  var startOffset = range.startOffset;
  var endOffset = range.endOffset;

 document.getElementById("demo").innerHTML =
 startOffset + "<br>" + endOffset; 
 </script>

 </body>
 </html>

现在,如果我尝试从“P”标签中选择文本“content”,它会为 range.startOffset 提供正确的值,但为 range.endOffset 值提供不正确的值。这将导致整个“P”标签的样式困惑。此问题仅发生在 Microsoft Edge 浏览器中,并且如果所选文本以某个 html 标记结尾(如此处),则它以“内容”文本结尾。如果我尝试选择文本之间的文本,则不会出现此问题。它在 chrome 浏览器中工作。在边缘浏览器中是否有解决此问题的解决方法?

最佳答案

你的 Edge 浏览器是什么版本?我在 Edge 42 和 Edge 44 版本上使用以下代码重现了您的问题。

<p>This is sample content</p>
<p id="demo"></p>

<script>
    document.getElementsByTagName('p')[0].onmouseup = function () {
        var range = null;
        var selection = window.getSelection();
        if (selection && selection.rangeCount > 0) {
            range = selection.getRangeAt(0);
        }

        var startOffset = range.startOffset;
        var endOffset = range.endOffset;

        document.getElementById("demo").innerHTML =
            startOffset + "<br>" + endOffset;
    }
</script>

在 Edge 42 版本上,如果我选择“content”,endOffset 将为 1。

在 Edge 44 版本上,如果我拖动以选择“内容”,则 endOffset 效果很好,但如果 我使用双击方法选择“内容”,endOffset 仍然是 1。

所以,这个问题和Edge浏览器有关,我已经把这个问题反馈给Edge Platform了。

作为解决方法,我建议您可以根据 startOffset 和所选文本计算 endOffset。尝试使用以下代码:

<p>This is sample content</p>
<p id="demo"></p>

<script>
    document.getElementsByTagName('p')[0].onmouseup = function () {
        var range = null;
        var selection = window.getSelection();
        if (selection && selection.rangeCount > 0) {
            range = selection.getRangeAt(0);
        }

        var startOffset = range.startOffset;
        var endOffset = startOffset + selection.toString().length;

        document.getElementById("demo").innerHTML =
            startOffset + "<br>" + endOffset + "<br/>" + selection;
    }
</script>

截图如下:

enter image description here

关于javascript - Microsoft Edge 浏览器中的 range.endOffset 给出了错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55392522/

相关文章:

html - 如何关闭 <button> 内容的自动垂直对齐?

javascript - html 中真的需要 name 属性吗?

javascript - Elessar - 配置范围 slider 标签

javascript - Extjs:使用父 div 调整大小调整面板

javascript - google.maps.event.addDomListener() 已弃用,请改用标准 addEventListener() 方法 : Google Place autocomplete Error

javascript - 错误 : No ESLint configuration found

javascript - 输入字段的 Maxlength 属性不受尊重

javascript - 如何 'reset' ReactJS 元素?

range - 如何从 D 中的范围创建关联数组

c++ - 二叉搜索树上的范围查询(递归)