Как я могу найти текстовый узел в реальном DOM, используя его копию / клон? - PullRequest
0 голосов
/ 27 мая 2010

Я скопировал несколько текстовых узлов со страницы (то есть, живой DOM) и сохранил их в массиве. Можно ли снова найти эти точные узлы в реальном DOM? Мне нужно использовать простой JavaScript.

Вот как работает мой проект:

  • Объект конфигурации определяет разделы страницы (с помощью селекторов CSS), где есть текстовое содержимое, и, при необходимости, подразделы в этом разделе (также с использованием селекторов CSS), где есть текстовое содержимое, которое следует игнорировать. Я использую имена свойств, соответственно, select и exclude.
  • Используя Sizzle (механизм выбора jQuery), я генерирую коллекцию элементов для каждого из select селекторов, а затем клонирую ее.
  • Затем я запускаю селекторы exclude для коллекции select, нахожу все соответствующие элементы и удаляю их из коллекции select.
  • Используя коллекцию select с удаленными секциями exclude, я пересекаю ее, чтобы построить массив только текстовых узлов.
  • Я использую этот массив текстовых узлов для сопоставления слов на основе предоставленного списка терминов, которые могут быть в исходном текстовом содержимом. Для этого я создаю массив объектов, которые включают свойства, такие как текстовый узел, в котором был найден термин, и в какой позиции / смещении этот термин встречается в текстовом узле data.

Учитывая последний массив, мне нужно иметь возможность сопоставлять клонированные текстовые узлы, в которых были найдены совпадающие термины, с исходными текстовыми узлами, из которых они были клонированы. Если я могу сделать это, я могу просто выполнить итерацию по моему массиву объектов, сначала найдя текстовый узел, который соответствует живому DOM (из которого он был первоначально клонирован), а затем связав термин в позиции / смещении, которое я записал в объекте.

Надеюсь, в этом есть какой-то смысл - пожалуйста, дайте мне знать, если нет, и я могу предоставить более подробную информацию. Это должно быть детерминированным, то есть я не могу просто найти в реальном DOM текстовый узел с таким же data, поскольку это может привести к ложным срабатываниям.

Опять же, я должен использовать простой JavaScript здесь, а не jQuery или любые другие библиотеки.

Я ценю любую помощь!

1 Ответ

2 голосов
/ 27 мая 2010

В общем, вы не можете.После того, как вы клонировали, новые клоны будут отличаться от старых узлов.Не существует универсального способа привязать узел обратно к узлу, с которого он был клонирован.

Если вы знаете самый верхний клонированный узел-предок и узел в документе, с которого он был клонирован, вы можете естественным образомиспользуйте индекс каждого предка в его родительском списке childNode, чтобы пройти от самых верхних предков к конкретному узлу ... но только при условии, что ни один DOM не был мутирован после клонирования.какой-то ужасный хак, такой как обход всего DOM клона сразу после клонирования, запись свойства expando в каждый узел для ссылки на исходный узел.

Я не уверен, почему вы вообще клонируете узлы.В процессе, который вы описываете, вы, конечно же, можете просто хранить живые узлы документа в своих списках без клонирования?

...