私は現在、生の HTML の任意のスライスから閉じられていない HTML タグを見つけて一覧表示するソリューションを探しています。これがひどい問題になるとは思いませんが、JSでそれを行うものを見つけることができないようです。残念ながら、これは HTML ページへの注釈のレンダリングに使用されるため、クライアント側である必要があります。注釈は、HTML 要素の一部 (つまり、既存の HTML マークアップに重ねられたマークアップ) のみに適用される可能性のある書式を選択または適用するため、明らかに厄介なビジネスです。
単純な使用例の 1 つは、HTML ページの一部のみをレンダリングし、残りを後で挿入する場合です。たとえば、架空のセグメントを想像してください。
<p>This is my text <StartDelayedInject/> with a comment I added. </p>
<p> But it doesn't exist until now. </p> <StopDelayedInject/>
HTML を再構築するための前処理を行って、適切な書式設定を適用するスパン型要素に部分要素をラップします。最初は、これは次の形式で解析されます。
<p><span>This is my text</span></p>
ユーザーのアクションの後、次のような形式に変更されます。
<p><span>This is my text</span><span>with a comment I added.</span></p>
<p>But it doesn't exist until now.</p>
これは非常に単純化された例ですが (明らかに ul 要素やテーブルなどはより複雑になります)、一般的な原則を示しています。ただし、これを効果的に行うには、HTML のセグメントをチェックして、開いている (閉じていない) タグがあることを確認できる必要があります。その情報を知っていれば、最後に終了していないテキスト データをスパンにラップし、閉じていないタグを閉じて、必要に応じてそのポイントに戻って残りのコンテンツを挿入することができます。ただし、コンテンツの別のセグメントを挿入または変更するときに、それを適切な場所に配置できるように、まだ開いているタグを知る必要があります (たとえば、「追加したコメントで」を取得します)。第一段落)。
文脈自由文法に関する私の理解からすると、これは比較的簡単な作業です。タグを開く/入力する、または閉じる/終了するたびに、開いたがまだ閉じていないタグのスタックを保持できます。そうは言っても、その目的のために単純なパーサーを作成するよりも、もう少し成熟したソリューションであるライブラリを使用したいと思います。これを行うJS HTMLパーサーがいくつかあると思いますよね?彼らの多くはタグを閉じる方法を知っているので、ある時点でこれを計算したことは明らかです。