You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术疑问:.get(0)与.get()的区别?为何我的jQuery代码可运行却不明缘由

为啥$(this).get(0)可行,$(this).get()却不行?

嘿,这个问题问到点子上了!我来给你把这个逻辑捋得明明白白~

首先你得搞清楚:jQuery对象本质是个包装了DOM元素的类数组对象。而get()方法的行为,带参数和不带参数完全是两码事:

  • 当你写$(this).get()的时候,它会返回一个包含所有匹配到的DOM元素的普通JS数组。比如你这里的$(this)对应的是单个audio元素,那返回的就是一个只有一个元素的数组[<audio>...]。但问题是,你要绑定的ended事件是原生DOM元素(也就是那个audio标签)的事件,给一个数组绑定事件根本没用——数组又不是audio元素,自然不会触发播放结束的回调,重播逻辑也就跑不起来。
  • 而$(this).get(0)就不一样了!这里的0是索引值,它会直接从jQuery对象对应的DOM元素集合里,取出第一个(也是这里唯一的)原生audio DOM元素。这个时候你拿到的是真正的<audio>节点,给它绑定ended事件、调用play()方法,自然就能正常触发重播,完全符合你的预期。

举个直观的例子帮你理解:

// 假设$(this)对应页面上的一个<audio>元素
const domCollection = $(this).get();
console.log(domCollection); // 输出:[<audio>...</audio>] (数组形式)
const actualAudioElement = $(this).get(0);
console.log(actualAudioElement); // 输出:<audio>...</audio> (原生DOM元素)

另外插一句,其实还有更简洁的写法:$(this)[0],和get(0)是完全等价的,因为jQuery对象支持用数组下标直接访问对应的DOM元素~

内容的提问来源于stack exchange,提问作者Jacob Farenci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:15:37