JavaScript セレクター関数 querySelector および querySelectorAll

JavaScript セレクター関数 querySelector および querySelectorAll

セレクターはCssの非常に強力な機能です。以前は、ページ要素は一般的にgetElementByIdgetElementsByTagNameを通じて取得されていましたが、これはいくつかのシナリオでは非常に不便でした。

その後、DOM はSelector API標準を拡張し、 Selector API Level 1には、CSS セレクターを通じてページ要素を一致させることができるquerySelectorquerySelectorAllという 2 つのメソッドが含まれるようになりました。

1. querySelectorは単一の要素を照会する

querySelectorは、ルールを満たすページ内の最初の要素を照会するために使用されます。これは、セレクター文字列パラメータを受け取り、 DocumentインスタンスおよびElementインスタンスで呼び出すことができます。見つかった場合はHTMLElementオブジェクトを返し、見つからない場合はnullを返します。

構文の形式は次のとおりです。

ドキュメントインスタンス.querySelector(セレクター文字列);

要素インスタンス.querySelector(セレクター文字列);

1. ドキュメントインスタンスの呼び出し

Documentインスタンス呼び出しは、ページ全体の一致する要素を取得します。

簡単な例は次のとおりです。

// body 要素を取得します。let body = document.querySelector("body");

コンソール.log(本文)

// ID が container の要素を取得します。最初の要素のみが取得されます。let container = document.querySelector("#container");

console.log(コンテナ)

// クラス内の btn を含む要素を取得します。最初の要素のみが取得されます。let btn = document.querySelector(".btn");

コンソールにログ出力します。



// コンテナーの直接のサブクラスで btn を含む要素を取得します。最初の要素のみが取得されます。let containerBtn = document.querySelector("#container>.btn");

コンソールにログ出力します。

2. 要素インスタンスの呼び出し

Elementインスタンス呼び出しは、要素のサブツリー内の一致する要素を取得します。

簡単な例:

// ID が container の要素を取得します。let container = document.querySelector("#container");

// 要素オブジェクトが存在するかどうかを確認する必要があります。存在する場合のみ、querySelector メソッドがあります。if (container) {

	// コンテナー内でクラスに btn が含まれる要素のみを検索します。

	containerBtn = container.querySelector(".btn"); とします。

	コンソールにログ出力します。

}

理論的には、CSS はセレクターを通じてページ上の任意の要素を取得できるため、 Elementインスタンス呼び出しはDocumentインスタンス呼び出しメソッドとして直接記述でき、セレクター文字列パラメータを変更するだけで済みます。

たとえば、上記の例は次のように直接記述できます。

containerBtn = document.querySelector("#container .btn"); とします。

また、if 判断が 1 つ減ったため、コードはより簡潔になります。もちろん、ビジネス シナリオによっては、 ELementインスタンスがすでに決定されているため、 ELementインスタンスを使用して直接呼び出す方が便利です。

2. querySelectorAllはすべての要素を照会します

querySelectorAllメソッドはquerySelectorメソッドと似ていますが、 NodeList内のすべての一致する要素を返す点が異なります。

簡単な例:

// ページに記事を含む2つのdivクラスがあると仮定します

// クラスに article が含まれるすべての要素を取得します。let articleList = document.querySelectorAll(".article");

console.log(記事リスト);

console.log(記事リストの長さ);

// コンソール出力:

// ノードリスト(2) [div.article, div.article]

// 2

querySelectorAllメソッドはすべての要素を返します。実際には、トラバーサルが必要になることがよくあります。トラバーサルは、従来のforトラバーサル、 for ofトラバーサル、およびforEachトラバーサルを使用して実行できます。

// トラバーサルの for (let item of articleList) {

	console.log(アイテム);

}

// トラバーサル用 for (let i = 0; i < articleList.length; i++) {

	console.log(記事リスト[i]);

	console.log(記事リスト.item(i));

}

// forEach は articleList.forEach((item, index) => { を走査します

	console.log(アイテム、インデックス);

});

1. for in トラバーサルの問題

for or inトラバーサルが使用される場合、 entriesforEachなど、プロトタイプ チェーン上の一部のメソッドもトラバースされます。

2. リアルタイムではなくスナップショットの問題

querySelectorAllメソッドを使用して取得されるNodeListスナップショットであり、リアルタイム データではありません。

次の例を考えてみましょう。

// 取得するには querySelectorAll を使用します。articleList は静的であり、リアルタイムではありません。let articleList = document.querySelectorAll(".article");

console.log(記事リスト);

console.log(記事リスト.長さ); // 2

タイムアウトを設定する(() => {

	// 要素を追加します let div = document.createElement("div");

	div.className = "記事";

	ドキュメントのbodyに子要素を追加します。	

	console.log(記事リスト);

	// まだ2

	console.log(記事リストの長さ);

}, 0);

最後に、タイマーが設定され、 class articleを持つdiv要素がページに挿入されますが、 articleListの長さは依然として 2 のままです。

getElementsByClassNameを使用して取得する場合、 articleListリアルタイム データになります。

次の例を考えてみましょう。

//getElementsByClassName を使用して取得します。articleList はリアルタイムです。let articleList = document.getElementsByClassName("article");

console.log(記事リスト);

console.log(記事リストの長さ);



タイムアウトを設定する(() => {

	// 要素を追加します let div = document.createElement("div");

	div.className = "記事";

	ドキュメントのbodyに子要素を追加します。

	

	console.log(記事リスト);

	// ここは3

	console.log(記事リストの長さ);

}, 0);

コンソールで印刷結果を表示します。

HTMLCollection の動的効果:

getElementsByClassNameを使用して取得されるオブジェクトはHTMLCollection型であり、ドキュメント フローに応じて変化します。

3. まとめ

  • 1. querySelectorquerySelectorAll CSS セレクターに従ってページ要素を取得します。これは非常に強力です。
  • 2. querySelectorAll取得される要素はスナップショットであり、静的であり、リアルタイムではありません。落とし穴に注意してください。

JavaScriptセレクター関数querySelectorquerySelectorAll JavaScript querySelectorと querySelectorAll の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS 災害と CSS 災害から遠ざかる: JS プライベート関数とコンテナとしての CSS セレクタ
  • js は円形メニューセレクターを実装します
  • JS 論理判断セレクターに関する一般的な議論 || &&
  • JavaScript のセレクターを理解する
  • Vue.js で iView 日付ピッカーを使用して開始時間と終了時間の検証機能を設定する

<<:  初心者向けウェブサイト構築ガイド⑦:美しいウェブサイトを作るのはとっても簡単

>>:  HTML ul および li タグを使用して画像を表示するサンプル コード

推薦する

Nginx proxy_pass の / スラッシュによって引き起こされた殺人事件の詳細な説明

背景nginx サーバー モジュールは 2 つのサーバーにプロキシする必要があるため、異なるサーバー...

Mysqlはマスタースレーブ構成とマルチマスターマルチスレーブ構成を実装します

現在シミュレーションしているのは、マスター スレーブ システム (ホスト 1 台とスレーブ 1 台)...

MySQLデータベーステーブルの容量を確認する方法の例

この記事では、MySQL のデータベース テーブルの容量を確認するためのコマンド ステートメントを紹...

JavaScript で 9 グリッドのモバイル パズル ゲームを実装

この記事では、Jiugonggeモバイルパズルゲームを実装するためのJavaScriptの具体的なコ...

WeChatアプレット開発の共通機能と使用方法のまとめ

ここでは、主に小さなプログラムの開発プロセスでよく使われる、非常に実用的な機能ポイントをいくつか整理...

WeChatアプレットが計算機機能を実装

この記事では、WeChatアプレットの計算機機能を実装するための具体的なコードを参考までに紹介します...

Vue は、デスクトップから Web ページにファイルをドラッグするためのサンプル コードを実装します (画像/オーディオ/ビデオを表示できます)

効果使用する場合は、コードとスタイルを自分で最適化してください。画像を表示しない/ビデオとオーディオ...

HTML Web ページにおける URL の表現

HTML では、一般的な URL はさまざまな方法で表現されます。相対 URL:コードをコピーコード...

MySQL パフォーマンス最適化のための魔法のツール、Explain の基本的な使用分析

導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...

Nginx 構成 SSL および WSS 手順の紹介

目次序文1. Nginxのインストール1. Nginxをダウンロードする2. 依存関係をインストール...

Javascript と Vue を組み合わせて、あらゆる迷路画像の自動パス検索を実現します。

目次序文2次元配列、一方向基本インターフェースのマッピング幅優先、包括的検索マップ編集経路探索アルゴ...

Navicat Premiumを使用してMySQLデータベースにリモート接続する方法

新しい接続を作成する側がクライアントに相当し、接続される側がサーバーに相当します。手順は次のとおりで...

Linux でユーザーをグループに追加する 4 つの方法の概要

序文Linux グループは、Linux でユーザー アカウントを管理するために使用される組織単位です...

Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明

この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...

React-Native スクリーンショットコンポーネント react-native-view-shot の紹介と使い方のまとめ

目次1. 現象2. 解決策3. 要約: 1. 現象1. 要件: 特定の表示ページをキャプチャしてアル...