#javascript #rangy
#javascript #rangy
Вопрос:
Похоже, что новейшая альфа-версия rangy устарела метод createNodeIterator() и заменила его более общим createIterator() . Похоже, синтаксис для его использования также немного отличается.
Допустим, пользователь просмотрел и сделал несколько выборок для документа и применил классы CSS к этим выборкам. Моя цель — убедиться, что пользователь не может делать перекрывающиеся выделения для текста, в котором уже есть примененный CSS-класс rangy.
Могу ли я по-прежнему делать это с помощью функции createIterator? Есть ли встроенная функция, которая могла бы помочь мне в этом в противном случае?
Комментарии:
1. Почему вы не используете getNodes()? Он возвращает нужную вам коллекцию узлов.
2. @taggon Хороший вызов. Я опубликую код для своего решения
3. Извиняюсь за то, что еще не полностью все это документировал.
Ответ №1:
Я пошел с этим решением:
var isHighlighted = false,
range = rangy.getSelection().getRangeAt(0);
var it = range.getNodes([3], function(node) {
return node.parentNode.tagName == 'SPAN' amp;amp; node.parentNode.className == 'highlight';
});
if (it.length > 0)
isHighlighted = true;
return isHighlighted;
Комментарии:
1. Одной из вещей, которая меня сбила с толку, был параметр [3] . Это просто перечисление для типа узла TEXT_NODE: developer.mozilla.org/en-US/docs/Web/API/Node.nodeType