我正在尝试在javascript执行期间减少DOM操作,我想到了懒惰编写DOM元素,而不是编写隐藏的大部分DOM并在以后取消隐藏所需的部分。
为此,我将所有DOM内容分离到JSP中,我通过ajax加载到变量中并使用jQuery进行操作。但是,如果jQuery在DOM上的隐藏div中进行此操作,我就没有获得性能提升。帮助
答案 0 :(得分:3)
新答案
我刚检查了你的几个recent questions,我想我看到你在这里问的是什么。
当你像$('selector string', context)
一样调用jQuery时,它会被路由到这个:
jQuery(context).find('selector string')
你知道吗? context参数成为[{1}} [sub]调用的第一个参数。然后将其路由到这批快捷代码:
jQuery
所以// Handle $(DOMElement)
if ( selector.nodeType ) {
this[0] = selector;
this.length = 1;
this.context = selector;
return this;
}
参数存储在context
属性中返回的jQuery
对象上。
现在根据您对this question的评论判断,您应该知道您的服务器端代码应该使用.context
标头进行回复。这样做会指示浏览器从您的xml响应主体自动创建"Content-Type: text/xml"
树(仅在DOMDocument
对象本身的responseXML
property中可以访问它 - jQuery只是将其传递给您的{ {1}}处理程序)。
回答您的问题:如果您将此XMLHttpRequest
对象作为success
参数传递给jQuery并继续修改此对象的属性,则在您必须担心的任何隐藏/临时DOMDocument
中没有操纵。 context
只是就地变异。
希望能回答你的问题。
原始答案:
如果你在一个字符串中有html并且你需要它是DOM结构中的节点,你必须以某种方式转换它。将它放在一次性元素中是我知道的唯一方法,同时利用内置的浏览器解析器:
div
许多库或多或少都会这样做,包括jQuery。如果它让你感觉更好,那么上面的一次性DOMDocument
不会被插入到DOM中,从而避免了DOM reflow(非常昂贵的操作),节省了一些周期。
答案 1 :(得分:0)
您可能希望将document fragments视为容纳生成的DOM节点的容器。
var fragment = document.createDocumentFragment();
for ( var e = 0; e < elems.length; e++ ) {
// append elements to fragment
fragment.appendChild( elems[e] );
}