#15:链式操作

我们已经多次谈论了 jQuery API 中一些非常棒的小细节。一切都经过精心设计和完善。链式操作绝对属于此类。一旦你开始使用并理解它,就会感觉非常自然,就像应该没有其他方法一样。

主要思想是,你可以对单个元素集合连续使用多个方法。

例如,假设我想在点击按钮后更改类并更改一些文本。但是按钮中有一些 HTML 内容。

<button class="button open">
  <span class="icon"></span>
  <span class="text">Open</span>
</button>

使用 jQuery,我们可以将整个操作序列“链接”在一起。

$(".button")
  .removeClass("open")
  .addClass("closed")
  .find(".text")
  .text("Closed");

这之所以可行,是因为 jQuery 的大多数方法虽然用作 setter,但会返回与调用方法时相同的元素集。有时该集合完全相同,例如这里 removeClassaddClass 的情况,有时该集合会被修改,例如这里 find 的情况。

我们视频中使用的示例 中,我们还谈论了 .end(),它会在链中“退回”一层。

$(".button")
  .removeClass("open")  // .button
  .addClass("closed")   // .button
  .find(".text")        // .button .text
    .text("Closed")     // .button .text
    .end();             // .button
  .data("thing");       // GETTER on .button

也许这样解释更清楚。当元素集合发生变化时,我缩进了该行并用注释标明了变化。然后当我们使用 .end() 时,它就会退回一层。无论你改变选择次数有多少,这都适用。只有当你使用返回非元素集的其他内容的方法时,它才会结束。