所以我有一个像这样创建的“光标”对象:
var cursor=document.createElement('span');
cursor.id="currentCursor";
cursor.innerHTML="|";
cursor.style.fontWeight="bold";
cursor.style.position = 'absolute';
cursor.style.marginLeft="-1px";
然后我将它添加到有人点击的页面:
var selection = window.getSelection();
var currentRange = selection.getRangeAt(0);
currentRange.insertNode(cursor);
我遇到的问题是在某些地方(主要是行尾),如果添加了光标对象,它会在对象之前创建一个换行符。使用 insertNode 将其移动到另一个区域会删除换行符。此外,如果我将显示设置为“无”,请等待几秒钟,然后将其设置回“内联”,则删除换行符。
这似乎可能是添加绝对元素的浏览器错误,但我想知道是否有人有解决方法。我尝试将宽度设置为 0px,但没有效果。
更新 所以如果我将光标更改为
cursor.style.position = 'static';
它没有随机换行符。但是,这会导致在元素周围创建空间。有什么办法不允许元素在它们周围创造空间?
更新 2
添加了一个小提琴来显示问题: http: //jsfiddle.net/Mctittles/pSg2D/1/ 原始代码有点大,但我对其进行了精简以突出这个问题。
如果您单击笑脸的末尾然后键入它会导致第 33 行触发创建一个新的文本节点。输入几个字母后,您会看到光标对象被强制到下一行。单击其他位置以移动它会使线条再次合并。
如果您取消注释第 38 和 40 行,您将看到我所说的最初显示:无并稍后更改它。这一次它不会导致换行。
我为提琴手取出了一些跨浏览器代码,所以这可能只适用于 Chrome