1

SOにはこの質問の複数のバージョンがありますが、どれも私がやろうとしていることの核心にはなりません。JavaScript が有効になっている場合、ブラウザはnoscript要素のコンテンツを解析されていないテキストとして認識します。その要素を使用してサイトのすべてのコンテンツを提供していますが、JavaScript を使用している場合は、コンテンツを AJAX で読み込みます。

…しかし、すべてのコンテンツがnoscript. noscript代わりに、要素内の文字列から必要な部分を取得しようとします。最初に私はこれを試しました:

do_stuff_with($($("noscript").text()))

しかし、すぐに、そのメソッドを使用すると、ブラウザーは解析された文字列内のすべての置換要素 (画像など) をすぐに要求することがわかりました。(jQuery はそれを解析するために DOM に追加すると仮定します。) 次に $.parseXML() をちらっと見ましたが、マークアップが XML ではない (非 XML 形式の HTML5 である) ため、すぐにその考えを手放しました。

不必要な HTTP リクエストを行わずに、文字列から要素を選択する方法はありますか?

4

2 に答える 2

1

SOアカウントを持っていない、または望んでいない私の同僚が、ここで文書化する価値があると思う解決策について説明しました。すぐにリクエストせずに任意のHTML5を解析する方法を正確に答えることはできませんが、おそらく私が使用するソリューションです。

その同僚の提案は、私のインクルードのそれぞれを別々noscriptの要素に入れることでした。したがって、1つの長い文字列でコンテンツ全体を解析する代わりに、とにかく表示する要素のみを解析します。この場合、解析時に画像とリソースの読み込みを開始すれば問題ありません。

今はとてもシンプルに見えます…</p>

于 2011-09-29T14:34:29.973 に答える
1

HTML を DOM に追加せずに、jQuery で HTML を解析する方法はないと思います。ただし、少し安っぽくなりたい場合は、解析する前に noscript ソースを変更することで、不要な/不要なアセットのリクエストを回避できます。

HTML

<noscript>
  <span class="name">Mr. Smith</span>
  <img src="/images/02938/avatar.jpg" />
  <span class="age">27</span>
</noscript>

jQuery

// Load raw content, make sure it's wrapped in a single node
raw = '<div>' + $('noscript').text() + '</div>';

// "Fix" any elements that might reference external resources by
// turning them into invalid HTML tags.
raw = raw.replace(/img/g, 'cheese');

dom = $(raw);

// Now we can access our variables without unnecessary resource requests
name = dom.find('.name').text();
age = dom.find('.age').text();
于 2011-09-28T18:09:39.323 に答える