AJAX 呼び出しの後に、サーバーから HTML 応答が返される状況があります。特定の要素とその子を取り出して、DOM に挿入する必要があります。
現在、私の AJAX コールバックは次のようになっています。
var onSuccess = function (rawData) {
var rawData = $(rawData);
var data = rawData.find("#foo");
$("#bar").append(data);
};
要素#foo
が含まれていない限り、これは正常に機能します。<script>
いろいろ調べた結果、最初のステップで問題が発生することがわかりました。
var rawData = $(rawData);
HTML を jQuery に渡すと、すべての<script>
要素が元のコンテキストから取り出され、トップレベルになります。後続の要素は、既に別の場所に移動されているため.find("#foo")
、以前にネストされた要素を移動できませんでした。<script>
生の HTML を DOM に直接挿入するとすべて正常に動作しますが、私たちのシステムは古く、対象の要素だけに返されるものを制限する前に多くのマッサージが必要になるため、今のところ、できるようにする必要があります。応答全体をスキャンして、必要なものだけを取得します。それらの<script>
要素が含まれています。
助言がありますか?
【追記】ご協力ありがとうございました。
最終的に、このソリューションを自分のニーズに合わせて調整し、AJAX 成功のコールバックを次のようにしました。
var onSuccess = function (rawData) {
var data = $(rawData);
var scripts = data.filter("script[someAttribute='someValue']");
var elementOfInterest = data.find("#foo"); // scripts above used to live in #foo
$("#target").append(elementOfInterest);
$("body").append(scripts);
};
これには、継承したいネストされたスクリプト要素に特別な属性を追加する必要があることに注意してください。