5

我试图从以前的版本中了解 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);

这是小提琴链接

我将段落元素附加到 div,然后更改结果元素的背景。在这两种情况下,我都使用 1.7.2 和 1.9.1 进行了尝试,附加后的结果是段落元素。

但是在文档中已经解释过,在 1.9 之前它将返回旧集(在我的示例中,旧集是指我相信的 div 元素)。我对此肯定有一个错误的想法。

请帮助纠正我的理解。

4

2 回答 2

1

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

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

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

于 2013-07-25T11:29:00.393 回答
0

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

新版本返回整个集合,而不考虑目标元素的数量。如果没有找到目标元素,它们将不再返回任何内容。

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

于 2013-07-25T11:33:23.323 回答