查找作为给定ExtJS元素的后代呈现的所有HTML组件的最有效方法是什么?请注意,该元素不是组件本身的一部分,也不以任何方式由Ext管理,它只是硬编码的原始HTML。并且该元素不仅可以包含ext组件,它还可以在其中具有其他非ext管理的html,并且该html还可以包含ext组件。因此,这意味着解决方案必须遍历整个DOM,而不仅仅是直接查看子对象。
发布于 2011-12-07 01:12:44
我的建议是遍历dom,根据Ext.getCmp检查每个元素的id,这是一个散列映射查找。然后您可以切换到遍历Component方法,但我认为它的速度基本上是相同的,如果您已经开始遍历dom,那么您不妨继续这样做:
var dom = ...;
var components = [];
Ext.Array.each(Ext.get(dom).query('*'), function(dom) {
var cmp = Ext.getCmp(dom.id);
if (cmp)
components.push(cmp);
});Ext.get(dom).query('*')可能会做比你想做的更多的工作,拥有自己的walker可能会更有效率,就像这样:
function walk(dom, callback) {
if (dom.nodeType === 1) {
callback(dom);
Ext.Array.each(dom.childNodes, function(child) {
walk(child, callback);
});
}
}
var dom = ...;
var components = [];
walk(dom, function(dom) {
var cmp = Ext.getCmp(dom.id);
if (cmp)
components.push(cmp);
});所有这些都假设dom in与组件in匹配,我不知道这是不是在未来的Ext版本中可以依赖的。
https://stackoverflow.com/questions/8401596
复制相似问题