半構造化されたマークアップ テキスト (太字、斜体など) であるサード パーティの HTML を処理しています。
構造の単純化されたサンプルを次に示します。
<div>
<strong class="term">one</strong>
-
<b class="defs">
foo
<i class="pos">verb</i>
bar
<i class="pos">noun</i>
baz
<i class="pos">adjective</i>
blah
</b>
<br>
<strong class="term">two</strong>
... etc ...
</div>
実は、この形にするために、すでに少し加工しています。HTML 要素は問題なく処理できますが、インターリーブされたテキストと<i>
要素を処理する方法がわかりません。
s の周りの「定義」を分割する<i>
ソリューション、パーツを反復処理するソリューションなどに満足しています。ブラウザ固有の癖があるため、jQuery と「生の」DOM API 呼び出しを混在させたくないのですが、避けられないなら分かる。私の浅い知識から、jQuery は「構造化された」HTML ほどマークアップされたテキストを適切にサポートしていないようです...
明らかな何かが欠けていますか?これを探すのはなかなか難しそうですね…。
実世界のデータでは、テキスト ランと<i>
ノードは常にインターリーブされますが、 内の最初のものはdefs
いずれかである可能性があり、各テキスト ランは 1 つ以上の実際のテキスト ノードで構成される場合があります。これは、<i>
とテキスト ランがペアになっていないことを意味します。
適切な解決策としては、各テキスト ランにマークアップを追加するか、テキスト ランごとに 1 つのことを実行して反復することです<i>
。jQuery.contents()
ノードタイプのチェックが鍵になるはずだと考えています...