Google Chrome перемещает курсор в конец предыдущего узла при установке его в начало узла с JavaScript - PullRequest
3 голосов
/ 10 мая 2011

У меня есть следующий контент в экземпляре TinyMCE:

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

Когда пользователь устанавливает курсор перед буквой «B» и начинает печатать, я хочу, чтобы текст печатался во втором диапазоне.Google Chrome (я использую 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”…

Похоже, что Google Chrome снова перемещает курсор в конец предыдущего узла.Я также попытался изменить объект Range вместо этого, но это привело к той же проблеме.

Я не могу придумать какое-либо решение этой проблемы, есть ли у кого-нибудь идея, что вызывает это и как исправитьэто?

Ура,
Кандид

1 Ответ

1 голос
/ 10 мая 2011

Это давняя ошибка в WebKit, которая на протяжении многих лет разочаровывает разработчиков многофункциональных текстовых редакторов.Соответствующие ошибки WebKit:

К сожалению, достойного решения не существует.В прошлом я прибегал к отслеживанию позиции курсора, вставке символа пробела нулевой ширины в начале текущего текстового узла и удалению его позже, когда курсор переместился в другое место, но это абсолютная боль в управлении, и ее трудно получитьправый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...