私が望むのは、 JavaScript を使用して、 「エントリ ポイント」(<script>
タグやイベントなど) を囲むコンテキスト フリーの HTML 要素で作業できるようにすることです。私ができることにはいくつかの厳しい制限があります。
概要
- ユーザーが生成した HTML のブロックが複数あり、読み込み時に個別に処理する必要があります。
- これらのブロックのコンテンツには、同様の動作をする同様のブロックを含めることができます。
- コンテンツも 1 回複製する必要があり、2 で説明したスクリプトの実行を再開する可能性があります。
- これらのブロックは静的テンプレートから生成され、(最初は) ID やランダムな属性値などの一意の識別データを含めることはできません。
- これらのブロックは AJAX を介して生成することもできますが、これは私の制御範囲外です。実行順序に依存することなく、表示されたとおりに処理する必要があります。
バックグラウンド
これは、特定の BBCode タグ[tag]content[/tag]
が固定 HTML に置き換えられているフォーラム ソフトウェア用です。サーバー側のスクリプトにアクセスできないため、置換はコンテキストに依存しません。つまり、常に同じです。たとえば、[tag]{content}[/tag]
次のようになります。
<span ...>
...
{content}
...
<!-- script entry point -->
</span>
データがロードされる頃に、クライアント側の処理を行う必要があります。
問題の要件を変更することはできません。最終製品は、次のようなタブを生成するためのコードです。
[tabspace]
[tab]content 1[/tab]
[tab]
content 2, and
nested tabs:
[tabspace]...[/tabspace]
[/tab]
[/tabspace]
スクリプトによって出力されるコンテンツは、それぞれの にリンクする「タブ ボタン」自体で構成されますcontent
。
制限
- IDが使えません。すべてが、テンプレートのコンテキストフリーの置換である、または開始する必要があります。
[tag]
s はネストできます。- スクリプトはコンテンツの一部を複製する必要があり、その一部は同様のスクリプトである可能性があります。これにより、タグの外側のペアで既に実行されているスクリプトが台無しになります。これを解決するためのボトムアップ ソリューションがありますが、同様の環境を気にせずに任意の深さでスクリプトを開始することに依存しています。(別の言い方です)
これらのタグは、AJAX を使用して、ページ上の任意の投稿にいつでも動的に読み込むことができます。
問題を簡単にするために、テンプレートの任意の場所にスクリプトを入れることができます。
私が試したこと
- JS を使用
<span id='something random'></span>
してロード時に a を動的に出力し、指定された ID を検索し、その場所を使用して周囲の要素を見つけます。ページを動的にロードしたり、タグがネストされていると機能しません。 - 周囲の要素にクラスを与え、その種類の最後の要素を見つけます。ページがロードされた後、ページの途中で更新が行われる可能性があるため、これは機能しません。
むしろ避けたい解決策
- を使用して
<img src='bogus' onerror='script entry point'/>
、スクリプトを実行し、 を使用して周囲のタグにアクセスできますthis
。しかし、単純で適切な問題を解決するために、壊れたリンクやエラーを使用したくはありません。