を介してページをロードし、結果の一部をページの対応する部分に挿入$.ajax()
しています。
$.ajax({
url: '/whole_page.html',
success: function (data, status, xhr) {
$result = $(xhr.responseText);
$('#menu').html($('#menu', $result).html());
$('#content').html($('#content', $result).html());
}
});
チャームのように機能しますが、問題が発生しました。
これで、私のページには、結果をフェッチして挿入するときに実行する必要のあるページ固有のJSが含まれています。私の知る限り、script
HTMLテキストからjQueryオブジェクトを作成し、それに対してクエリを実行した場合、jQueryは要素を返しません(私はデモンストレーションのためにフィドルを作成しました)。したがって、jQueryを介して必要なスクリプトのみを選択的に挿入する方法はありません。
script
したがって、応答テキストから要素を自分で取得する必要があるように思われます。基本的に、私はこれを行う正しい方法を探しています。これが私がこれまでに思いついたものです:
function pullScripts(text) {
var frag = document.createDocumentFragment()
, div = document.createElement('div')
, scriptElements
;
// This is roughly how jQuery finds the scripts when cleaning text
frag.appendChild(div);
div.innerHTML = text;
scriptElements = div.getElementsByClassName('class-for-scripts-that-we-want');
$('head').append(scriptElements);
}
これは十分に機能しますが、私はまだくだらないブラウザでテストしていません。script
とにかく、jQueryの機能の1つ(特別な処理)を回避するためだけに、jQueryのそのような基本的な機能を複製することは不快に感じます。フィドルに見られるように、jQueryオブジェクトには実際にはsが含まれていますが、またはscript
のようなものでそれらを返すことはありません。私はこれを行うためのいくつかの明白な方法を逃していますか?.html()
.get()
注:jQueryの内部parseHTML
関数が公開されると、このトピック全体は議論の余地があります
注2:jQuery ajax get responseからスクリプトタグを選択しようとしていますが、受け入れられる答えは「できません」の後に「正規表現を使用する」です。どちらも物足りない