技术疑问:.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
相关产品推荐
相关产品推荐

