DOM要素の問い合わせ – Dart逆引きリファレンス

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

DOM要素の問い合わせ(Finding elements in DOM)

要素の探索にはCSSのような「パターンマッチング」が用いられます。
要素の取得に用いる関数は以下の二種類です。単純なので覚え易いですね。(^^)

document.query(selectors)
指定されたセレクタに該当する要素をひとつ返します。複数の要素が該当する場合は先頭の要素が返されます。
document.queryAll(selectors)
指定されたセレクタに該当する全ての要素をリストで返します。
<h1>Finding elements in DOM</h1>
<h2 id="toc-heading2" id="h2">Heading2</h2>
<h3 class="h3">Heading3-1</h3>
<h3 class="h3">Heading3-2</h3>
<h3 class="h3">Heading3-3</h3>
<h4>Heading4-1</h4>
<h4>Heading4-2</h4>
<h4>Heading4-3</h4>
<h5 data-heading-level="5">Heading5-1</h5>
<h5 data-heading-level="5">Heading5-2</h5>
<h5 data-heading-level="5">Heading5-3</h5>
<div id="main">
  <div>
    <p class="visible">Paragraph-1</p>
    <p class="invisible">Paragraph-2</p>
    <p class="visible">Paragraph-3</p>
  </div>
  <div></div>
  <div></div>
  <div></div>
</div>

id名で要素を取得したい

IDセレクタ「E#id」を利用します。

Element elem = document.query('#h2')
print(elem.text); // Heading2

class名で要素を取得したい

クラスセレクタ「E.class」を利用します。

Element elem = document.query('.h3');
print(elem.text); // Heading3-1
List elems = document.queryAll('.h3');
for (Element elem in elems) {
  print(elem.text); // Heading3-1 Heading3-2 Heading3-3
}

要素名で要素を取得したい

タイプセレクタ「E」を利用します。

Element elem = document.query('h4');
print(elem.text); // Heading4-1
List elems = document.queryAll('h4');
for (Element elem in elems) {
  print(elem.text); // Heading4-1 Heading4-2 Heading4-3
}

属性で要素を取得したい

属性セレクタ「E[name="value"]」を利用します。

Element elem = document.query('[data-heading-level="5"]');
print(elem.text); // Heading5-1
List elems = document.queryAll('[data-heading-level="5"]');
for (Element elem in elems) {
  print(elem.text); // Heading5-1 Heading5-2 Heading5-3
}

複数のセレクタを併用して要素を取得したい

子孫セレクタ「E F」や子セレクタ「E > F」、隣接セレクタ「E + F」等を利用します。

List elems = document.queryAll('#main div:first-of-type .visible');
for (Element elem in elems) {
  print(elem.text); // Paragraph-1 Paragraph-3
}

この例ではセレクタを半角スペースで区切って指定する子孫セレクタを用いています。

先頭の子要素へアクセスしたい

子要素が格納された配列「nodes」プロパティを利用してアクセスします。

elem.nodes[0];

要素が子要素を持っているかどうかを調べたい

子要素の配列で「isEmpty()」メソッドを利用して判断します。

!elem.nodes.isEmpty();