1. ホーム
  2. javascript

[解決済み] クラス名ですべての子孫を検索するDojoクエリ

2022-01-29 09:09:50

質問

DOM ノードがある場合、DOM ツリーを掘り下げて、指定されたクラス名のノードを見つけたい。 myClass

例えば

<div class="container">
  <div class="red">Red One</div>
  Some Text
    <div>
        <div class="myClass"></div>
    </div>
  <div class="blue">Blue One</div>
  <div class="red">Red Two</div>
  <div class="blue">Blue Two</div>
</div>

を使ってみました。 dojo.query(".container").children(".myClass"); というのは、どうにもならないようです。

気がつくと dojo.query(".container").children(); は直系の子だけを取得しますが、直系の子だけでなく、すべての子孫(孫も可)を取得する簡単な方法はないでしょうか?

EDIT

というわけで、質問が私の計画通りでないことに気づきましたが、他のユーザーがその恩恵を受けられるように、元のままにしておきます。

私の問題は、クラス名によって最初のノードのハンドルを取得するのではなく、そのクラス名を持つ特定のノード集合のハンドルを取得したと仮定したいのですが、おそらくそれらすべてではありません。

ですから、例えば、私が使いたいと思ったのは、上に書かれていることと一致するように、次のようなものです。

array.forEach(containerNodes, function(node){
    dojo.query(node).children(".myClass")
});

のみであれば children() 関数は2つ以上のツリーレベルを走査します。

そこで、このシナリオでは dojo.query(".myClass", node); はうまくいきました。

しかし、後述するように、同種の dojo.query(".container .myClass"); は、クラス名を使用するために動作します。

解決方法は?

children() は、jQueryと同じで、直系の子しか出ません。もし、"subquery"を作りたい場合(jQueryのような find() ) を使用する必要があります。 query() 例えば

dojo.query(".container").query(".myClass");

も作ってみました。 スモールフィドル をデモしています (ただし、Dojo 1.9 の構文です)。