我试图以递归方式遍历阴影和轻DOM(寻找第一个input
,无论它在哪里)。这似乎不是一项艰巨的任务,所以我编写了以下代码
recursiveWalk: function(node, func) {
var done = func(node);
if(done){
return true;
}
if('root' in node){
this.recursiveWalk(node.root, func);
if(done){
return true;
}
}
node = node.firstChild;
while (node) {
var done = this.recursiveWalk(node, func);
if(done){
return true;
}
node = node.nextSibling;
}
}
由于我无法理解的原因而以无限循环结束(我的猜测它与光DOM中可以再次找到轻DOM中的元素这一事实有关,但是阴影DOM中的元素不需要在轻DOM中,但不是每个元素都有阴影DOM ......所以我被卡住了)。
答案 0 :(得分:1)
解决方案是等待聚合物准备就绪:
document.addEventListener('polymer-ready', function() {
recursiveWalk(document.body, function (node) {
console.log(node.nodeName);
});
})
并使用shadowDom属性:
if ('shadowRoot' in node && node.shadowRoot) {
var done = recursiveWalk(node.shadowRoot, func);
if (done) {
return true;
}
}