Dojo 中有没有办法在 DOM 元素中查找所有小部件后代?

Posted

技术标签:

【中文标题】Dojo 中有没有办法在 DOM 元素中查找所有小部件后代?【英文标题】:Is there a way in Dojo to find all widget descendants in a DOM element? 【发布时间】:2011-10-25 08:56:25 【问题描述】:

Dojo 有没有办法在一个 DOM 元素中查找所有小部件后代?我使用了下面的示例,它只会列出元素的子元素,在这种情况下,任何作为文档对象的子元素的小部件,而不是所有后代或嵌套小部件。希望这很清楚。

var widgets = dijit.findWidgets(dojo.doc);
dojo.forEach(widgets, function(w) 
    console.log(w);
);

我可以编写自己的递归函数,但我想确保我不会错过已经这样做的 Dojo 方法。

非常感谢

【问题讨论】:

为了清楚起见,您想要一个函数来获取 domNode 下的所有小部件,包括那些嵌套在其他小部件中的小部件? @screenm0nkey,您最终找到解决方案了吗?我也需要这个确切的功能。 【参考方案1】:

嗯,dijit.findWidgets(parentWidget.domNode)?

编辑哦,现在我需要 findWidgets 不会递归搜索。

我检查了 dijit.findWidgets 源代码,它所做的只是检查 dijit 注册表中表示的具有widgetid 属性的节点。以下版本使用 dojo.query 递归地执行相同的搜索:

function findEvenTheNestedWidgets(innitialNode)
    return dojo.query("[widgetid]", innitialNode)
    .map(dijit.byNode)
   .filter(function(wid) return wid;) //filter invalid widget ids that yielded undefined

【讨论】:

嘿missingno。那是猜测吗?我认为没有 dojo.findWidgets 方法。 哎呀,我的意思是 dijit... 重要的是您可以选择小部件的 domNode 来开始搜索,而不是搜索文档中的所有小部件。 但这仍然只给我直接在那个domNode下的孩子,而不是嵌套在孩子和孩子的孩子等内部的小部件。 我猜没有这样的功能,除非有人现在已经回答了。我本来想 +1 你的帮助,但不小心把它选为正确答案;) 检查更新版本。现在我做了一些研究,我认为它实际上值得绿色复选标记:P

以上是关于Dojo 中有没有办法在 DOM 元素中查找所有小部件后代?的主要内容,如果未能解决你的问题,请参考以下文章

小部件上的 dojo 查询

HTML 在 dojo 小部件中显示为纯文本

Dojo操作dom元素的样式

如何等待dojo元素存在?

dojo:哪些事件附加到元素?

JavaScript DOM:在容器中查找元素索引