jQuery如何将xml用作上下文参数,因为它修改了它?

时间:2009-09-29 12:50:57

标签: javascript jquery

我正在尝试在javascript执行期间减少DOM操作,我想到了懒惰编写DOM元素,而不是编写隐藏的大部分DOM并在以后取消隐藏所需的部分。

为此,我将所有DOM内容分离到JSP中,我通过ajax加载到变量中并使用jQuery进行操作。但是,如果jQuery在DOM上的隐藏div中进行此操作,我就没有获得性能提升。帮助

2 个答案:

答案 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] );
}