← 解説「ブラウザ API — document.getElementById と textContent で DOM を書き換え、描き直す」に戻る
サンプルコードで身につける: ブラウザ API — document.getElementById と textContent で DOM を書き換え、描き直す
解説で学んだ概念を、3つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1getElementById は文書順で最初の 1 つ
Standard の を素朴な木で写したものです。子を順に見て、一致しなければその子の子孫を先に全部探してから次の兄弟へ進むので()、文書に先に書かれたが深い所にあっても勝ちます。実行すると id="y" は <span>(深い方)が返り、無い id は null になります。
Rust
2textContent の代入は「子を全部外して Text を 1 つ」
DOM Standard の string replace all を に写しました。子を clear() してから、空文字でなければ を 1 つ push するので、<b> のような子要素も一緒に消えます。実行すると子 2 個(#text と <b>)が代入後に #text 1 個になり、空文字を代入すると子 0 個になります。
Rust
3DOM を変えたら relayout() しないと表示は古いまま
に DOM()と、そこから作った(layout_root)を持たせ、set_text_content で DOM だけを変えたときの表示を見ます。箱の木は作った時点の DOM の写しなので、() で作り直すまで count は 0 のままです。参照実装では JsRuntime の dom_changed がこの「作り直しが要る」合図で、元データが変わったら派生データ(集計表やキャッシュ)を作り直すのと同じ考え方です。
Rust