Как использовать метод toggleRange Rangy?
Я использую следующий код, чтобы вставить ссылку в диапазон.
У меня есть следующая функция, которая вызывается кнопкой, чтобы сохранить выделенный текст. Затем он показывает div linkBar, который включает текстовый ввод для вставки ссылки.
Обратите внимание: когда я фокусируюсь на вводимом тексте внутри текстового ввода, я теряю выделение, поэтому я пытаюсь использовать toggleRange() вместо toggleSelection.
function linkIt(){
if (savedSel) {
rangy.removeMarkers(savedSel);
}
savedSel = rangy.saveSelection();
savedSelActiveElement = document.activeElement;
$("#linkBar").css({"display":"block", "top": "150px", "left": "500px"});
}
После этого у меня есть следующий код, который выполняется после нажатия кнопки в том же элементе div, который был показан предыдущей функцией.
submitLink.ontouchstart = submitLink.onmousedown = function() {
var linkName = $("#linkText").val();
toggleLink(linkName);
$("#linkBar").css({"display":"none"});
if (savedSel) {
rangy.restoreSelection(savedSel, true);
savedSel = null;
gEBI("restoreButton").disabled = true;
window.setTimeout(function() {
if (savedSelActiveElement && typeof savedSelActiveElement.focus != "undefined") {
savedSelActiveElement.focus();
}
}, 1);
}
return false;
}
Эта функция вызывает следующую функцию, чтобы применить linkApplier к выбранному диапазону. Но это НЕ работает
function toggleLink(linkName) {
linkApplier = rangy.createCssClassApplier("link", {
elementTagName: "a",
elementProperties: {
href: linkName,
title: "Rangy home page",
target: "_self"
}
});
//linkApplier.toggleSelection();
linkApplier.toggleRange(savedSel);
}
1 ответ
Вам нужно позвонить toggleSelection()
после того, как выбор был восстановлен. Я думаю, что следующее исправит это (не проверено):
submitLink.ontouchstart = submitLink.onmousedown = function() {
var linkName = $("#linkText").val();
$("#linkBar").css({"display":"none"});
if (savedSel) {
rangy.restoreSelection(savedSel, true);
toggleLink(linkName);
savedSel = null;
gEBI("restoreButton").disabled = true;
window.setTimeout(function() {
if (savedSelActiveElement && typeof savedSelActiveElement.focus != "undefined") {
savedSelActiveElement.focus();
}
}, 1);
}
return false;
};