IE11:document.getSelection在IE11的输入(即文本)标签内无法正常工作

时间:2019-06-20 23:22:25

标签: javascript internet-explorer dom internet-explorer-11

我正在尝试使用document.getSelection()在输入html标记中进行选择,但在Internet Explorer 11上不起作用。该功能受支持,但返回的值似乎错误。

我在Chrome和Edge上对其进行了测试,并且运行良好,因此看来该问题与IE11有关。

在Chrome和Edge上,它返回一个选择对象,该对象的值在anchorNode和rangeCount上(不同于0),并在调用toString()函数时显示所选文本。如果什么也没有选择,或者输入为空,但它已被聚焦,则它仍然在anchorNode和rangeCount上具有值,但是toString函数返回一个空字符串。

Chrome浏览器:

https://media.giphy.com/media/mFpXA8uv0GwUEx6Ofu/giphy.gif https://i.postimg.cc/ncnM5QtP/chrome-abc-selection.png

IE11:

https://media.giphy.com/media/mFpXA8uv0GwUEx6Ofu/giphy.gif https://i.postimg.cc/QxSVrx8x/IE11-abc-selection.png

我主要需要getCountion()返回的rangeCount属性的值,因为那我需要调用getRange函数,但是我正在处理它,IE11遇到了问题,我需要使网站兼容所有这些浏览器。

这是Microsoft可以修复的IE11错误,还是我可以实现的解决方法?

1 个答案:

答案 0 :(得分:0)

您可以使用HTML DOM元素通过element.selectionStart和element.selectionEnd获取选择索引,然后只需获取元素的值并使用索引对值做子字符串即可。...请参见以下示例

<!DOCTYPE html>
<html>
<body>

<button type="button" onclick="myFunction()">Show me My Selection</button> 
<input id="myInput" type="text" value="This is my selection"><br>
<script>
	myFunction = function(){
    let element = document.getElementById("myInput");
    alert('The selected text = ' + element.value.substring(element.selectionStart,element.selectionEnd));  
}
</script>
</body>
</html>