3

我对 JavaScript 很陌生,希望这里有人可以帮助我解决以下问题:

主要是在 IE 8 中寻找解决方案——如果它可以更好地覆盖其他浏览器/版本。我有一个页面,其中只有一个 contenteditable div,它是动态创建的,并且包含文本和 HTML 标签。在页面上,我想添加一个按钮,将光标位置的某些文本插入到这个 div 中。

到目前为止,我有以下代码,只要我在 div 中选择一个文本,它就可以正常工作,但是如果我只是将光标放在那里而不选择任何内容,它会将我的文本插入到 div 之外。

我怎样才能让它总是在光标位置添加我的文本,就像现在在选择位置一样?(我什至不需要它来替换选择,因为它只需要在光标位置。而且,这只需要一个特定的 div。)

我的代码:

<html>
<head>
<script type="text/javascript">
    function test()
    {
        var input = "TEST";
        document.selection.createRange().pasteHTML(input);
    }
</script>

</head>
<body>
    <div id="myDiv" contenteditable>This is a test text.</div><br />
    <button type="button" onclick="test()">Test</button>
</body>
</html>

感谢您对此的任何帮助,蒂姆

4

1 回答 1

7

您的问题是元素在 IE 中触发事件<button>时窃取了焦点并破坏了选择。click您可以<button>将其设为不可选择,这将阻止它获得焦点。这是使用IE中的unselectable属性完成的:

<button type="button" unselectable="on" onclick="test()">Test</button>

演示:http: //jsbin.com/aqAYUwu/5

在我看来,另一个不太好的替代方法是使用mousedown事件并阻止默认操作:

<button type="button" unselectable="on"
    onmousedown="test(); return false">Test</button>

您可以在此处找到一个跨浏览器功能以在contenteditable元素的当前光标位置插入 HTML:

https://stackoverflow.com/a/6691294/96100

最后一点:contenteditable不是一个布尔属性,所以严格来说你应该给它一个值(即<div contenteditable="true">),尽管<div contenteditable>它在我尝试过的所有浏览器中都有效。

于 2013-10-28T10:42:37.957 回答