【问题标题】:Why does Jquery only select the first element with some methods and all elements with other ones?为什么 Jquery 只用某些方法选择第一个元素,而用其他方法选择所有元素?
【发布时间】:2013-12-11 17:14:01
【问题描述】:

我正在尝试通过 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>

这是使用 .get() 方法的 jquery,它只影响第一个视频(“video1.MOV”):

$('div.carousel-inner .item').children("video").get(0).pause();

使用 .css() 方法,我能够选择具有 class="item" 的元素:

$('div.carousel-inner .item').children("video").css( "background-color", "red" );

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

【问题讨论】:

  • .get(0) 将第一个元素作为普通 DOM 元素返回,而 .get(4) 返回第五个元素,get() 返回所有元素等,您阅读文档了吗?一些 jQuery 方法仅适用于集合中的第一个元素,因为在内部对这些方法进行迭代是没有意义的。
  • adeneo - 我了解 .get() 方法,但没有意识到某些 jQuery 方法仅适用于集合中的第一个元素。感谢您的确认。

标签: jquery html css html5-video


【解决方案1】:

正如 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 元素。

【讨论】:

    【解决方案2】:

    你可以简单地使用,

    $('div.carousel-inner .item').children("video") 
    

    选择.item 类下的所有子元素。 .get(index) 最终会从该集合中获取指定索引处的元素。这样您就可以看到这种行为。

    $('div.carousel-inner .item').children("video").get(0)

    非常等于

    $('div.carousel-inner .item').children("video")[0]

    请阅读此处了解更多关于.get()

    【讨论】:

    • .get() 从集合中获取所有元素,除非给出包含有效索引的参数。
    • @KevinB 我正在更新。
    • 即使您进行了更新,措辞仍然是错误的。我不是 dv。它最终不会获取第一个元素,而是获取索引指定的元素。
    • @KevinB 作为一名学习者,我想问你我的帖子到底出了什么问题。?谢谢。
    • 我认为这只是一个翻译问题。您最新的编辑刚刚修复它。提到它选择第一个是错误的,除非您专门使用 0 作为索引,因为 .get 可用于根据作为索引传递的内容来选择第一个、第三个甚至全部。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2018-07-11
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多