如何使用其副本/克隆在实时DOM中查找文本节点?

时间:2010-05-27 13:22:42

标签: javascript dom copy clone

我从页面复制了一些文本节点(即实时DOM)并将它们存储在一个数组中。是否有可能在实时DOM中再次找到那些确切的节点?我需要使用纯JavaScript。

这基本上是我的项目的工作方式:

  • 配置对象指定页面的各个部分(使用CSS选择器),其中有一些文本内容,以及该部分中的子选项(也使用CSS选择器),其中存在应忽略的文本内容。我使用的属性名称分别是selectexclude
  • 使用Sizzle(jQuery的选择器引擎),我为每个select选择器生成一个元素集合,然后克隆它。
  • 然后,我针对exclude集合运行select选择器,查找匹配的所有元素,并将其从select集合中删除。
  • select集合与已删除的exclude部分一起使用,我遍历它以构建仅包含文本节点的数组。
  • 我使用这个文本节点数组根据提供的原始文本内容中的术语列表进行一些单词匹配。为此,我构建了一个对象数组,其中包含找到术语的文本节点等属性,以及文本节点data中该术语出现的位置/偏移量。

鉴于后一个数组,我需要能够将找到匹配项的克隆文本节点与克隆它们的原始文本节点进行匹配。如果我可以这样做,我可以迭代我的对象数组,首先找到对应于实时DOM(最初克隆它)的文本节点,然后在我记录的位置/偏移处链接该术语在对象中。

希望这是有道理的 - 如果没有,请告诉我,我可以提供更多细节。这必须是确定性的 - 即,我不能只在实时DOM中搜索具有相同data的文本节点,因为这可能会导致误报。

同样,我必须在这里使用纯JavaScript,而不是jQuery或任何其他库。

我感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

一般情况下,你不能。克隆后,新克隆与旧节点具有不同的标识。没有通用的方法将节点绑定回克隆的节点。

如果您知道最顶层的克隆祖先节点以及文档中从中克隆的节点,您可以自然地使用其父子节点列表中每个祖先的索引从最顶层的祖先向下走到特定节点。 ..但只是假设自克隆以来DOM都没有变异。

否则,你会留下一些可怕的黑客攻击,比如克隆后立即遍历克隆的整个DOM,将expando属性写入每个节点以引用源节点。

我不确定你为什么要克隆节点。在您描述的过程中,您肯定可以将实时文档节点存储在列表中,而无需进行任何克隆吗?