特定のHTML要素の子孫としてレンダリングされるすべてのExtJSコンポーネントを見つける最も効率的な方法は何でしょうか?この要素はコンポーネント自体の一部ではなく、Extによって何らかの形で管理されているわけではなく、ハードコードされた生のHTMLです。また、この要素にはextコンポーネントのみが含まれているだけでなく、他の非ext管理HTMLも含まれている可能性があります。また、htmlにはextコンポーネントも含まれています。したがって、ソリューションは、直接の子どもを見るだけでなく、DOMの下を横切る必要があります。ExtJS 4 - 指定された要素の子孫であるすべてのコンポーネントを取得する
2
A
答えて
2
私の提案は、各要素のIDをExt.getCmp
(ハッシュマップルックアップ)と照らし合わせて調べることです。その後、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('*')
あなたが希望よりも、あなた自身の歩行器を持っている方が効率的かもしれない多くの作業を行うことができ、このように:
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 IDがあれば、私は知らないコンポーネントのIDを、一致していることを前提としていこれはExtの将来のバージョンで頼りになるものです。
関連する問題
- 1. 指定された要素の子孫でないすべての要素を選択します。
- 2. コンポーネントの子要素を取得する
- 3. すべての子孫を取得フレックス内のVBox(コンテナ)の要素(コントロール)?
- 4. linqの親IDからすべての子要素と孫要素を取得する方法
- 5. 指定された位置に要素を取得する - JavaScript
- 6. jsonリクエストのすべての子孫を取得する
- 7. ExtJS 4/Sencha Touchコンテナ、コンポーネント、要素、パネル
- 8. 子孫の要素を選択する
- 9. c#指定された名前の配列のすべての子を取得
- 10. Scala.jsのIDで型指定された要素を取得する
- 11. クリックイベントで指定されたすべてのdiv要素を表示する
- 12. 要素のDOM階層レベルを取得する(カウントの子孫レベル)
- 13. 指定された配列要素の取得 - 流星のMongoDB
- 14. 指定された親IDからすべての子ノードと孫ノードを検索するPHP
- 15. CTE再帰、親あたり一定数の子孫を取得する
- 16. jQuery UIのドラッグされた要素の子要素を取得する方法
- 17. 特定のクラスの子孫のないすべての要素のXPath?
- 18. Linqのすべての子リスト、孫リスト、孫孫リストなどのカウントを取得する方法
- 19. 別の要素の値を使用してルート子孫要素を取得する
- 20. mysqlまたはphpの親の子孫をすべて取得しますか?
- 21. ルーティングされた子の@Output値を親コンポーネントに取得する方法4
- 22. 要素のすべての子孫にCSSルールを適用する方法
- 23. 要素が別の要素の子孫であるかどうかを調べる最も良い方法
- 24. jqueryセレクタは、どのdiv要素がネストされていても、指定されたdiv内のすべてのアンカー要素を取得しますか?
- 25. 、指定された要素
- 26. ExtJS 4 - Ext.toolbarのオーバーフローメニューを取得する
- 27. 特定の種類のすべてのXML要素を取得:ネストされた要素も含めて
- 28. Reactコンポーネント内の子要素の高さの取得
- 29. 特定の要素である最初の子を取得するには?
- 30. 親コンポーネント内の子コンポーネントの要素への参照の取得
ドームIDがコンポーネントIDと一致していることは間違いありませんが、他のすべての問題があると変更した場合でもそうです。 私はこれについてもう少し考えていましたが、Ext.ComponentManager.allをループし、 'Ext.Element.contains()'を使って考えていました。[link](http://docs.sencha.com/ext- js/4-0 /#!/ api/Ext.Element-method-contains)を使用して、各コンポーネントの '.getEl()'結果が指定された要素に含まれているかどうかを確認します。この方法はあなたが提案したものより効率が悪いですか? –
効率は異なるでしょう。必ずしも悪くはないが、おそらく悪化する。各コンポーネントについて、いくつかの要素をループします。 DOMツリーの深さがMであり、コンポーネントの数がNであれば、O(M * N)のようなものです。私が提案した方法はO(X)のようなもので、XはDOM要素の数です。どちらの方法をより高速化するのが一般的ではありませんが、(a)Extがページの投稿を管理していて、(b)ページに多くの要素がある場合は、dom walkがおそらくもっと速くなる。 –
意味があります、助けてくれてありがとう! –