为什么Jquery只使用一些方法选择第一个元素,而使用其他方法选择所有元素?

为什么Jquery只使用一些方法选择第一个元素,而使用其他方法选择所有元素?,jquery,html,css,html5-video,Jquery,Html,Css,Html5 Video,我试图通过jQuery暂停三个视频。出于某种原因,我的代码在使用.get()方法时只选择第一项,但在使用.css()方法时,所有相关元素都被选中。有人能帮我理解为什么吗 以下是html: <div id="myCarousel" class="carousel slide"> <div class="item action"><video src="video1.MOV"></video></div> <div class

我试图通过jQuery暂停三个视频。出于某种原因,我的代码在使用.get()方法时只选择第一项,但在使用.css()方法时,所有相关元素都被选中。有人能帮我理解为什么吗

以下是html:

<div id="myCarousel" class="carousel slide">
  <div class="item action"><video src="video1.MOV"></video></div>
  <div class="item"><video src="video2.MOV"></video></div>
  <div class="item"><video src="video3.MOV"></video></div>
</div>
使用.css()方法,我可以使用class=“item”选择元素:

有人能帮我理解为什么只有第一个视频被暂停吗?我想修改jQuery以暂停所有视频。谢谢

您只需使用

$('div.carousel-inner .item').children("video") 
选择类
.item
下的所有子元素
.get(index)
最终将从该集合中获取指定索引处的元素。这样你就能看到这种行为

$('div.carousel-inner.item')。子项(“视频”)。获取(0)

相当于

$('div.carousel-inner.item')。子项(“视频”)[0]


请阅读此处以了解更多关于

的信息。正如Adeno所确认的,一些jQuery方法只对集合中的第一个元素起作用,这就是为什么我只能暂停第一个视频,而不能暂停后续视频,而.css()方法对所有视频元素起作用

要暂停所有视频,请使用以下代码:

$('div.carousel-inner video').each(function(){
  this.pause();
});
按照html的设置方式,我需要获取每个.item元素的子节点

有关这方面的一些信息: jQuery有一个简单的逻辑,不管是对所有元素调用方法还是只对第一个元素调用方法。如果一个方法返回一些东西(不返回未定义的),jQuery将不会遍历所有元素。在这种情况下,jQuery将在第一个元素上调用该方法,并返回该方法的返回值。如果不返回任何内容,jQuery将对所有元素调用该方法,并返回用于链接的jQuery对象


在本例中,您使用的是pause方法,它不是jQuery方法,而是普通的DOM方法,必须对每个DOM元素本身进行调用。jQuery的.get方法始终返回jQuery集合内的DOM元素。$。get(0)在这里用于返回第一个DOM元素

.get(0)
将第一个元素作为普通DOM元素返回,而
.get(4)
将返回第五个元素,
get()
将返回所有元素等,您阅读了文档吗?有些jQuery方法只对集合中的第一个元素起作用,因为对这些方法进行内部迭代没有意义。adeneo-我理解.get()方法,但没有意识到有些jQuery方法只对集合中的第一个元素起作用。感谢确认……()获取集合中的所有元素,除非给出一个包含有效索引的参数。@ Kevnb I在更新的中间。即使更新,措辞仍然是错误的。我不是dv。它最终不会得到第一个元素,而是得到索引指定的元素。@KevinB作为一名学习者,我想问你我的帖子到底出了什么问题。?谢谢。我想这只是一个翻译问题。你最近的编辑刚刚修复了它。提到它选择第一个是错误的,除非您特别使用
0
作为索引,因为.get可以用于根据作为索引传递的内容选择第一个、第三个甚至所有索引。
$('div.carousel-inner .item').children("video") 
$('div.carousel-inner video').each(function(){
  this.pause();
});