更改jquery1.9.1中的.appendTo()

时间:2013-07-25 11:13:55

标签: jquery jquery-1.9 jquery-1.7

我试图了解以前版本的jquery 1.9.1版本中.appendTo()api的行为变化。在升级指南中,它说

  

从1.9开始,这些方法(.appendTo.insertBefore.insertAfter和   .replaceAll)总是返回一个新集合,使它们始终可用   使用链接和.end()方法。在1.9之前,他们会回来   仅当存在单个目标元素时才设置旧集。请注意这些   方法总是返回所有元素的聚合集   附加到目标元素。

我试过这个api的简单用法

<div class="test">hello
</div>

var $ = jQuery.noConflict();
var a =$("<p> hi </p>").appendTo("div.test").attr("style","background-color:red");
console.log(a);

以下是fiddle link

我将一个段落元素附加到div,然后更改结果元素的背景。我在1.7.2和1.9.1中尝试了这两种情况,附加后的结果是段落元素。

但是在文档中已经解释过,在1.9之前它将返回旧集合(在我的示例中,旧集合引用了我认为的div元素)。我肯定对此有错误的想法。

请帮助纠正我的理解。

2 个答案:

答案 0 :(得分:1)

“这些方法总是返回附加的所有元素的聚合集”意味着它返回调用appendTo()的jQuery集合 - 而不是传递给函数的集合。

在您的情况下,这将是段落。所以它应该返回,无论你使用的jQuery版本,只要“div.test”是一个单元素目标(顺便说一下,你不是指$('div.test')?),或者如果使用v 1.9,只要“div.test”返回至少一个元素。

这是jQuery链接大多数调用的情况 - 函数返回它被调用的元素,因此你可以继续用它做其他事情。我相信这是jQuery函数的manipulation子集的所有的情况。

答案 1 :(得分:0)

他们返回附加到单个目标元素的元素。 即使找不到目标元素。

无论目标元素的数量是多少,新版本都会返回整个集合。如果找不到目标元素,它们将不再返回任何内容。

因此,它们返回创建的结构而不是附加的数据。