【问题标题】:Google Chrome moves cursor to end of the previous node when setting it to the start of a node with JavaScript当使用 JavaScript 将光标设置为节点的开头时,Google Chrome 会将光标移动到上一个节点的末尾
【发布时间】:2011-05-10 07:25:16
【问题描述】:

我在一个 TinyMCE 实例中有以下内容:

<p><span id="span1">Test</span><span id="span2">Bla</span></p>

当用户将光标设置在“B”之前并开始输入时,我希望将文本输入到第二个跨度中。谷歌浏览器(确切地说,我使用的是 Chromium 11.0.696.65)将光标设置到第一个跨度的末尾,您可以使用以下代码进行验证:

document.body.innerHTML = '<p><span id="span1">Test</span><span id="span2">Bla</span></p>';
document.designMode = "on";
// Now click between the “t” and the “B”
var sel = document.getSelection();
alert(sel.baseNode.data);

不幸的是,似乎无法手动将焦点设置到第二个跨度的开头:

var span = document.getElementById("span2");
sel.setBaseAndExtent(span, 0, span, 0);
alert(sel.baseNode.data); // Is still “Test”!
sel.setBaseAndExtent(span, 1, span, 1); // Move inside the span for testing
alert(sel.baseNode.data); // Now it’s “Bla”…

谷歌浏览器似乎再次将光标移动到上一个节点的末尾。我也尝试修改 Range 对象,但这导致了同样的问题。

我想不出任何解决这个问题的方法,有人知道是什么原因造成的以及如何解决它吗?

干杯,
坦率的

【问题讨论】:

  • 很抱歉,我认为您无法解决此问题 :(

标签: javascript google-chrome selection


【解决方案1】:

这是 WebKit 中长期存在的错误,多年来一直困扰富文本编辑器开发人员。相关 WebKit 错误:

不幸的是,没有一个像样的解决方案。我过去曾求助于跟踪光标位置,在当前文本节点的开头插入一个零宽度的空格字符,并在光标移到其他地方后将其删除,但这绝对是管理的痛苦并且很难获得对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2012-11-10
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多