ホームページ >ウェブフロントエンド >jsチュートリアル >`getElementsByTagName()` の制限がある場合、ドキュメント内のすべてのテキスト ノードを効率的に取得するにはどうすればよいですか?

`getElementsByTagName()` の制限がある場合、ドキュメント内のすべてのテキスト ノードを効率的に取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-30 05:18:13936ブラウズ

How Can I Efficiently Retrieve All Text Nodes in a Document, Given the Limitations of `getElementsByTagName()`?

getElementsByTagName() TextNodes と同等

getElementsByTagName() はドキュメント内の要素のコレクションを効率的に取得しますが、textNode オブジェクトを除外し、個性的

代替アプローチ

すべての textNode オブジェクトを取得するネイティブ メソッドがないにもかかわらず、いくつかのアプローチで効果的にこれを達成できます。

1. TreeWalker:
TreeWalker を利用して深さ優先の方法で DOM を移動し、textNodes を識別して収集します。

2.カスタム走査反復:
DOM を反復的に走査し、各ノードを検査し、ノード タイプ 3 を textNode として分類します。

3。カスタム トラバーサル再帰:
再帰関数を使用して DOM を下降し、トラバーサル パスに沿って検出された textNodes をキャプチャします。

4. Xpath クエリ:
XPath 式を利用してドキュメント内のすべての textNode を選択します。

5. querySelectorAll:
DOM 内のすべてのノードを選択し、結果をフィルターして textNodes のみを含めます。

6. getElementsByTagName (Handicap):
getElementsByTagName() で取得したすべての要素の最初の子を textNode であると想定して、間接的に textNode を識別しようとします。このアプローチには制限があるため、注意して使用する必要があることに注意してください。

パフォーマンスの比較

パフォーマンス テストでは、getElementsByTagName() が最も高速に実行されますが、特定の textNodes が除外されることが明らかになりました。対照的に、TreeWalker は、すべての textNode を効果的にキャプチャしながら、同等の速度を示します。カスタムの再帰的トラバーサル メソッドは、テストしたメソッドの中で最も遅いです。

追加の考慮事項

選択したメソッドに関係なく、textNodes の実際のテキスト コンテンツにアクセスするには、後続の反復が必要です。 node.nodeValue を使用した抽出。
詳細については、次のディスカッションを参照してください。 http://bytes.com/topic/javascript/answers/153239-how-do-i-get-elements-text-node.

以上が`getElementsByTagName()` の制限がある場合、ドキュメント内のすべてのテキスト ノードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。