Rangy: новый метод получения выбранных узлов

#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