Как создать объект диапазона, когда я знаю только смещения символов? - PullRequest
11 голосов
/ 04 августа 2011

Итак, у меня есть div, который содержит блок текста, ранее пользователь выделил некоторый текст в этом блоке, и я создал объект диапазона из этого выбора.Я сохранил смещение начальной и конечной точек выделенного текста, но у меня возникают проблемы при воссоздании диапазона (поэтому я могу им манипулировать)."quotables" - это div, содержащий весь текст.Я не знаю, что я делаю неправильно.



    var theRange = rangy.createRange();
    var node = $('.quotables').html();
    theRange.setStart(node, 14);
    theRange.setEnd(node, 318);


, но я продолжаю получать ошибки: Uncaught Error: NOT_FOUND_ERR: DOM Exception 8m.setStart(анонимная функция)d.extend._Deferred.f.resolveWithddextend.readydcaddEventListener.y

1 Ответ

16 голосов
/ 04 августа 2011

Граница диапазона не является смещением символа в строковом представлении HTML.Скорее, это смещение в узле DOM.Если узел является текстовым узлом, например, граница выражается как символьное смещение в тексте узла.Если узел является элементом, он выражается как количество дочерних узлов узла до границы.Например, в следующем HTML-коде с диапазоном, границы которого обозначены |:

<div id="test">foo|bar<br>|<br></div>

... начальная граница диапазона находится со смещением 3 в текстовом узле, который является первым дочерним элементомэлемент <div>, в то время как конечная граница лежит со смещением 2 в пределах <div>, поскольку перед границей находятся два дочерних узла (текстовый узел "foobar" и один элемент <br>).Вы можете создать диапазон программно следующим образом:

var range = rangy.createRange(); // document.createRange() if not using Rangy
var div = document.getElementById("test");
range.setStart(div.firstChild, 3);
range.setEnd(div, 2);
...