为什么jQuery load()在内部使用虚拟div?

时间:2015-12-22 09:07:19

标签: jquery ajax

在收到回复之后,在load()函数的jQuery源代码中看到:

        self.html( selector ?

            // If a selector was specified, locate the right elements in a dummy div
            // Exclude scripts to avoid IE 'Permission Denied' errors
            jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :

            // Otherwise use the full result
            responseText );

“在虚拟div中找到正确的元素”是什么意思?为什么需要一个虚拟div?

2 个答案:

答案 0 :(得分:2)

它不是ajax代码的一部分,而是load()方法的一部分,它允许加载响应内容的片段。

创建temp元素,以便在查询片段时,如果它是最顶层的元素,那么也会获取它,否则find()方法将排除根元素。然后,您需要使用filter / find()的组合来完成此操作。

例如:如果回复为<div class="result">....</div>且选择器为.result,那么如果我们使用$(responseText ).find(selector),则会失败,因为result不是元素的后代,但是根,所以只需将响应作为临时元素的后代添加为html为<div><div class="result">....</div></div>,现在只需使用find('.result')就可以返回正确的元素。

答案 1 :(得分:2)

如果response位于xmlstring/htmlstring并且您可以直接在其中找到元素,则必须执行此操作。

见,

jQuery("<div>")
      .append(jQuery.parseHTML(responseText))
      .find( selector )

逐行采取:

  1. 在内存中创建虚拟div以保存xml/html数据。
  2. .append()xml数据作为带有jQuery.parseHTML()方法的有效html。
  3. 现在您可以在其中找到特定元素。