![](/img/trans.png)
[英]How can I invoke a server-side event from jQuery (Sharepoint 2010)?
[英]How can I clone a window server-side using jQuery?
我目前正在使用Node.js和jsdom在AngularJS服务器端运行。 它工作得很好,但是我想通过在将AngularJS范围应用于页面之前缓存jsdom生成的DOM来优化性能。 当我尝试为给定请求应用AngularJS范围之前尝试克隆缓存的DOM时,就会出现问题。 当前,我正在使用jQuery(服务器端)克隆缓存的DOM:
var clone = cachedWindow.$("html").clone(); // This part works fine
然后,我使用jsdom创建一个新窗口,并且html标记内没有内容(快速):
jsdom.env(
'<!doctype html><html></html>',
injectedScripts, // This is where I inject AngularJS, which works fine
function(errors, newWindow) {
newWindow.angular.bootstrap(newWindow.document, ['ngView']);
newWindow.$("html").replaceWith(clone); // This part does not work
}
);
问题来自newWindow.$("html").replaceWith(clone);
生成此错误:
{ code: 4, message: 'Wrong document' }
我理解这个问题与以下事实有关:我试图用一个来自另一个文档( cachedWindow
)的DOM元素替换一个文档( newWindow
)中的DOM元素,但是我想不出任何办法。 这很重要,因为克隆html
元素(从字面上看)比用jsdom从头重新构建DOM快大约十倍...
有什么建议么?
笔记:
解:
由Jason Livesay使用document.importNode提供
var original = cachedWindow.document.getElementById("app");
...
var clone = newWindow.document.importNode(original, true);
newWindow.document.getElementById("app").appendChild(clone);
当我用谷歌搜索“错误文档”时,我看到一堆提到importNode的PHP XML东西。 因此,也许您也可以在JavaScript中使用它: https : //developer.mozilla.org/en-US/docs/Web/API/document.importNode
或类似以下内容: http : //jsdom.wordpress.com/2011/03/14/appendchild-problem-in-google-chrome-and-safari/
另外,如果您想优化该部分,只是仔细检查一下,您就是将最终的HTML保存到磁盘上了吗? 我的意思是您不是在每个请求上都呈现静态页面吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.