jquery链式调用本质是方法返回this,设置型方法支持链式,获取型方法中断链式,筛选型方法返回新对象;.end()可回溯原始集合。

想让网页元素连续执行样式修改、动画和类名切换,又不想反复写选择器、不声明中间变量、不降低性能,就得真正理解jQuery链式调用的底层机制。
链式调用的本质:每个方法都返回 this
jQuery所有支持链式调用的方法(如.css()、.addClass()、.hide())内部都以return this结尾。这使得上一个方法执行完后,仍持有原始jQuery对象的引用,下一个方法可直接在其上调用。
如果不返回this,比如写成return undefined或return true,链式就会在该方法处中断——后续方法会报“undefined is not a function”错误。
这一步操作起来很简单,直接把文件拖进去就行。
哪些方法能链?哪些不能?关键看返回值类型
方法是否支持链式,取决于它设计时的返回值意图:
方法一:设置型方法 → 全部支持链式
例如 .css('color', 'blue')、.attr('disabled', true)、.html('新内容'),它们只做修改,返回this。
jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。
方法二:获取型方法 → 中断链式
【.text()、.val()、.html()(无参数)、.attr()(单参数)这些获取值的方法,返回的是字符串/布尔/数字等原始值,不是jQuery对象】。一旦调用它们,后面就不能接.addClass()这类方法。
方法三:筛选/遍历型方法 → 多数支持,但作用域可能改变
.find()、.children()、.filter() 返回的是**新的jQuery对象**(子集),链式可继续,但后续操作只影响这个新集合,不是原始集合。
实战验证:一行代码完成三步交互
第一步:用$('#loginBtn')选中登录按钮;
第二步:添加loading状态类并禁用按钮;
第三步:300ms后淡出提示框,再淡入成功消息。
完整写法:$('#loginBtn').addClass('loading').prop('disabled', true).end().next('.tip').fadeOut(300).delay(100).fadeIn(300).text('登录成功');
注意.end()的作用:它把链的上下文从.next('.tip')切回原始$('#loginBtn'),否则后续.fadeOut()会在按钮上执行——而按钮根本不会淡出。
这行代码只查找一次#loginBtn,全程无临时变量,DOM访问效率最高。










