【发布时间】:2019-01-25 03:44:09
【问题描述】:
我正在做一个辅助项目,在该项目中生成 HTML 文件并将其发送到前端,使用 Polymer 3 和其他技术对其进行格式化和显示。
长话短说,当我调用querySelectorAll时,它不会返回,例如document中的所有锚标记:
document.querySelectorAll("a");
相反,它似乎只承认标签的存在,如果它们是调用querySelectorAll 的节点的直接子节点。所以,如果我有:
<div>
<custom-tag1>
<custom-tag2>
<a href="http://www.google.com">Google</a>
<a href="http://www.yahoo.com">Yahoo!</a>
<a href="http://www.amazon.com">Amazon</a>
</custom-tag2>
</custom-tag2>
</div>
我发现我必须首先获取 document 对象,然后是 body 对象,然后是位于 body 对象顶层的任何东西(例如,上面的 div 就在 body 内部)等。
因此,如果我(终于!)获得对主体的引用,我可以调用:
theBody.querySelectorAll("a");
它会返回一个空列表。我必须这样做:
theBody.querySelectorAll("div")[0].querySelectorAll("custom-tag1")[0].querySelectorAll("custom-tag2")[0].querySelectorAll("a");
为了得到一个锚元素的列表!
但是,如果锚点存在于其他任何地方,它就不会得到它们。
注意事项: Polymer 3 服务器正在运行。 由于某些元素(至少我在 Chrome 的调试器中看到的)是 shadow root,因此情况可能会变得复杂。
因此,有时我们最终会这样做:
someNode.shadowRoot.querySelectorAll("a");
或类似的。
【问题讨论】:
标签: javascript dom web polymer components