如何遍历放置在正确位置的DOM选择节点

时间:2019-01-09 09:24:06

标签: javascript dom custom-element

我正在制作“ psuedo”,“ super”形式(如自定义元素)。我想遍历节点以查找符合特定条件的节点(一个是它们具有名为function的方法validate,另一个是它们具有属性namevalue)。我想遍历

  • 避免已转移到元素shadowroot内插槽中的元素子节点。
  • 遍历元素上的影子根,并在遍历中拾取已转移到其中的插槽中的元素。
  • 不遍历符合我上面提到的条件的元素的子代或阴影根。

似乎有两种可能的方法。

  1. 创建一个“ treewalker”,并使用它遍历它找到的节点。
  2. 只需将Node API与Node.hasChildNodes()Node.childNodes之类的调用一起使用

但是,我找不到有关这两种可能性的文档,它们无法解释插槽内容的处理方式。这些文档通常会忽略任何关于插槽和插槽内容的提及-可能是因为它们是在插槽成为规范的一部分之前编写的。

在遍历shadowRoot时,显然可以使用Slot.assignedNodes()方法来查找插槽中的内容(尽管有关此文档的内容在可选flatten值的含义上是模棱两可的-说它设置为true时会返回默认内容,但是如果将值设置为false时没有提供实际的插槽,它会返回默认内容吗?-为什么它仍被称为“ flatten”,似乎不适合它吗?)。但是,如果我使用这种方法,那么我还需要一种避免在遍历子级时已移至这些插槽的节点的方法

那么,形成上述行为的最佳方法是怎样的人可以给我一些线索?

1 个答案:

答案 0 :(得分:0)

我最终发现最好的方法是手动操作。测试的症结在于,将元素分配给插槽时node.assignedSlot不为null,因此在扫描子项时可以使用它来忽略将子项分配给插槽时的子项(并在扫描{{时包括它们1}}

这是一个带有slot.assignedNodes()默认功能的模块,用于遍历提供的元素。 walk是每个节点的回调函数,调用方可以使用它来检查节点是否符合所寻找的条件(请参阅问题),因此不扫描子级。

criteria