我有一种情况,在 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);
};
请注意,这需要我向要继承的嵌套脚本元素添加一个特殊属性。