![](/img/trans.png)
[英]leave javascript intact when dynamically loading a page into jquery mobile
[英]Loading ASPX page with Javascript intact, with a twist
我正在为Microsoft SharePoint编写一个单页Web应用程序。
我想使用$.get()
引入内容,但是遇到了一些困难22。
如果我这样输入内容:
function getLocalPage(url, callback) {
$.get(url, function(data) {
var $page = $(data).filter('.tileContent').html();
callback($page);
});
}
我得到了我要查找的节点,但是我的脚本标签已被剥离。
如果我输入这样的内容:(引用: jquery html()剥离脚本标签 )
function getLocalPage(url, callback) {
$.get(url, function(data) {
var dom = $(data);
dom.filter('script').each(function(){
$.globalEval(this.text || this.textContent || this.innerHTML || '');
});
var $page = dom.filter('.tileContent');
callback($page);
});
}
SharePoint中嵌入的javascript使我的页面崩溃,并且似乎引起了完整的回发。
有什么办法可以使脚本标签保持完整,只获取我想要的节点?
似乎无法同时兼顾。
而不是简写的jQuery方法.get()
,请尝试使用dataType: 'html'
.ajax()
.ajax()
文档说的是dataType: 'html'
:
“ html”:以纯文本形式返回HTML; 插入到DOM中时,将评估包含的脚本标签。
它还说:
“如果指定了'html',则在将HTML作为字符串返回之前,将执行检索到的数据中的所有嵌入式JavaScript。”
这里的重点是“之前”一词,这意味着嵌入式JavaScript在执行时不能直接作用于与它一起交付的HTML(或产生的DOM片段),尽管它可以直接作用于现有DOM。片段插入。
但是,嵌入式JavaScript中包含的任何功能的确确实可以用于对HTML / DOM片段和整个DOM进行操作(如果稍后调用) 。 调用此类函数的第一个机会是在.ajax()
成功处理程序(或链接的.done()
处理程序)中。
除非采取非常规(可能会造成混乱)的措施,否则成功处理程序(或其调用的任何函数)将需要事先以这种方式交付的任何函数名称的“知识”,否则(实际上)它们将是不可调用的。
我不确定$(function() {...});
结构, 可以在当前事件线程完成(?)后执行。 如果是这样,则有可能使其作用于所传递的HTML / DOM片段。 一定尝试。
考虑到所有这些,请尝试以下方法,并在响应中使用适当措辞的JavaScript。
function getLocalPage(url, callback) {
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
callback($(data).find('.tileContent'));
}
});
}
或更好 :
function getLocalPage(url, callback) {
$.ajax({
url: url,
dataType: 'html'
}).done(function(data) {
callback($(data).find('.tileContent'));
});
}
笔记:
.filter()
更改为.find()
,这似乎更合适,但您可能需要将其改回。 .ajax()
选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.