添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

jQuery 现在已经几乎不再用了,但是它的 API 设计值得学习。本文仅做备忘用,方便日后维护老项目时的查询需求。
本文于 2023 年更新,现在基于 jQuery 版本 3+。注意 jQuery 在 v3 后废弃了大量 API,本文不记录被废弃的 API,如果查不到,建议看官网原文档。

相关链接: jQuery 官网 API 文档 jQuery 源码分析 国人做的 API 速查表

本文页面已部署 jQuery v3.7.1,你可以在 F12 控制台通过 $ jQuery 来访问它。

选择器语法

选择器语法:

  • jQuery 选择器接受第二个参数作为搜寻范围,默认为 document

  • $('div.userinfo') 查询选择器

  • $.escapeSelector(n) 将选择器专用字符转义,例如 #a 会转为 \#a

    jQuery 扩展的选择器伪类(原生不支持):

  • :text / :password / :radio / :checkbox / :file / :reset / :submit
    对应类型的表单元素
  • :visible / :hidden 选择可见/隐藏元素
  • :image / :input 图片/输入控件元素
  • :enable / :disable 可用/禁用的表单元素
  • :checked 已勾选的复选框、单选框,以及被选中的 <option>
  • :selected 被选中的 <option>
  • :animated 处于动画状态的元素
  • :contains(t) 内容文本包含 t 的元素,大小写需严格匹配
  • :has(a) 选择带有符合 a 选择器的元素的元素
  • :parent 选择含有任意子元素或内容的元素
  • DOM 集合

    返回原生 DOM 元素的方法:

  • .get(2) 获取集合中的第 3 个元素,也可以写成 [2] ,但它还支持负数
    .get() 获取集合中所有元素
  • .first() / .last()
    返回集合中第一个/最后一个元素,等同于 .get(0) / .get(-1)
  • .toArray() 将所有 DOM 以数组形式返回
  • 以下方法返回新的 jQuery 对象,且不会对原 DOM 集合进行任何修改

    集合相关:

  • .length 获取集合的元素数量,和已废弃的 a.size() 作用相同
  • .clone([e][, d]) 克隆元素, e 表示是否复制事件和数据, d 表示是否递归到所以子元素
  • .index(selector | el) 获取选择器/元素在 DOM 集合中的索引位置,不存在则返回 -1
    .index() 返回集合中首个元素在其同级元素中的索引位置
  • .each(cb) ,回调参数 function(index, el)
    同数组的 forEach ,回调中可以通过 this 获取当前元素,回调返回 false 则会停止迭代
  • .map(cb) ,回调参数 function(index, el)
    同数组的 map 操作,但此方法最终返回一个新的 jQuery 对象
  • .is(selector | cb) 判断集合中是否有任意元素匹配选择器/回调
  • 过滤方法:

  • .eq(4) / .eq(-5)
    返回集合中正数第 5 个/倒数第 5 个元素;正数从 0 开始,倒数从 -1 开始
  • .even() / .odd()
    滤出集合中偶数/奇数的元素
  • .filter(selector | cb) / .not(selector | cb)
    同筛选/反向筛选,返回一个筛选后的结果
  • .find(selector) 从集合中所有元素的子元素中应用选择器,返回这些新元素的集合
  • .has(selector | el) 返回集合中含有指定子元素的元素
  • .slice(start [, end]) 同数组的 slice 操作
  • DOM 相对选择

    这些方法返回 jQuery 对象后,可以一直调用方法来链式筛选、移动、增加元素

    链式操作:

  • .add(el | selector) 将新的元素加入 DOM 集合
  • .addBack() 使用了 .next() 之类的方法选择其他 DOM 时,可以把之前的元素加入集合
  • .end() 回退到上一次调整 DOM 集合内容之前的内容
  • 以下所有的 filter 参数,均为可选,表示提供一个选择器字符串,用于进一步筛选

    后代元素:

  • .children([filter]) 返回 DOM 集合元素的所有 直接 子级元素
  • .contents() 返回 DOM 集合元素的所有子节点,包含文本节点
  • 祖先元素:

  • .parent([filter]) 返回 直接 父级元素
  • .parents([filter]) 类似于 parent ,但它返回所有父级元素
  • .parentsUntil([el] [, filter]) 类似于 parent ,但会返回满足条件的前一层
  • .closest(filter) 从元素自身向父级开始,返回匹配的第一个元素
  • .offsetParent() 返回可用于定位的第一个父级元素,可定位元素的 position relative absolute
  • 同级元素:

  • .next([filter]) / .prev()
    选择当前元素后面/前面的第一个元素
  • .nextAll([filter]) / .prevAll()
    类似上一个方法,但会选择后面/前面的所有元素
  • .nextUntil(selector [, filter]) / .prevUntil()
    从当前元素开始向后/向前,一直选中直到找到匹配选择器的元素,但不包含匹配选择器的元素
  • .siblings([filter]) 选择当前元素的其他所有同级元素
  • DOM 移动和修改

    创建元素:

  • $(html [, props]) 创建 DOM 元素, html 为标签字符串, props 为属性和事件监听器
  • 以下方法未特别说明的,返回值均为原 jQuery 对象

    以下方法的 el 参数:

  • 可以是字符串、HTML 字符串,注意不支持选择器字符串
  • 可以是 jQuery 对象、元素, 这些元素会被移走
  • 也可以是一个返回上述内容的方法,此时会针对 DOM 集合中的元素依次执行此方法;方法签名 function(index, htmlString) ,参数分别表示当前元素在 DOM 集合中的索引、当前元素的 HTML 字符串,在方法中使用 this 来访问当前元素
  • 元素内部:

  • .append(el) 向当前元素内部的 末尾 追加内容
  • .appendTo(el) 将当前元素追加到 el 内部的 末尾
  • .prepend(el) 向当前元素内部的 开头 追加内容
  • .prependTo(el) 将当前元素追加到 el 内部的 开头
  • 元素外部:

  • .after(el) 向当前元素外部 后面 追加内容
  • .insertAfter(el) 将当前元素插入到 el 后面
  • .before(el) 向当前元素外部 前面 追加内容
  • .insertBefore(el) 将当前元素插入到 el 前面
  • .wrap(el) 使用 el 来依次包裹当前 DOM 集合中的每个元素,返回值不变
  • .unwrap([selector]) 移除当前元素外层元素,返回被移除掉的元素空标签
  • .wrapAll(el) 使用 el 来包裹当前 DOM 集合内的所有元素,返回包裹后的整体
  • .wrapInner(el) 当前元素的 内部 生成 el 包裹原本元素内部的内容,返回值不变
  • .replaceWith(el) 使用 el 取代当前元素,返回被取代掉的元素
  • .replaceAll(el) 使用当前元素依次取代 el 集合的所有元素,返回被取代掉的元素
  • .empty() 将当前元素所有子节点清空,返回值不变
  • .remove([selector]) 删除当前元素,返回值不变
  • .detch([selector]) 同上条,但是此方法会保留元素的数据和事件监听,返回值不变
  • .uniqueSort() 对 DOM 集合中的元素按照文档顺序排序并去重,返回新的结果
  • DOM 属性

    如果 DOM 集合包含多个元素,以下方法仅对首个元素起效;设置值类方法均返回原对象

    标签属性:

  • .attr(key) / attr(key, value | cb)
    获取/设置属性,参数也可以是一个对象以设置所有键值对
  • .prop(key) / .prop(key, value | cb)
    同上一条,但可用于获取和设置 checked disable 等属性,可以取到 true false
  • .removeAttr(key) 移除属性
  • .removeProp(key) 对应 prop 用于移除属性
  • .hasClass(name) 是否含有类名

  • .addClass(name) 给元素添加类名,多个类名用空格分开

  • .removeClass(name) 移除元素的类名,多个类名用空格分开

  • .toggleClass(name [, trueToAdd]) 添加/移除类名,第二个参数可以是布尔值或回调

    内容操纵:

  • .html() / .html(text| cb) 获取或设置 innerHTML
  • .text() / .text(text | cb) 获取或设置 textContent
  • .val() / .val(value) 获取或设置表单元素的值
  • 数据值属性:

  • .data(key) / .data()
    获取元素特定键的数据值/所有数据值键值对,可以获取到 HTML 中的 data- 标签的内容,特性:
  •