我正在通过加载页面$.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,这些 JS 必须在获取和插入结果时执行。据我所知,如果你从 HTML 文本构造一个 jQuery 对象并对其进行查询,jQuery 不会返回script
元素(我做了一个小提琴来演示)。因此,我无法通过 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 的这种基本功能感觉不舒服。从小提琴中可以看出,jQuery 对象实际上确实包含script
s,但它不会用类似.html()
or的东西返回它们.get()
。我错过了一些明显的方法吗?
注意:一旦 jQuery 的内部parseHTML
函数被暴露,这整个话题就没有实际意义了
注意 2:我还阅读了 Trying to select script tags from a jQuery ajax get response但是接受的答案是“你不能”,然后是“使用正则表达式”。这两个都不满意