[英]Targeting multiple instances of the same class/ID with Javascript
我目前正在尝试定位同一个div
类( .overlay
)的多个实例-我要执行的基本思想是,每个div都在另一个包装的div中包含一个HTML5视频,在mouseenter
显示自身,设置视频时间轴设置为0并播放,并在mouseout
将视频重新设置为0。
我遇到的问题是,目前只有网格的第一项起作用,而其他项的翻转没有任何反应。 这是我的Javascript:
$(document).ready(function() {
$('.overlay').mouseenter(function(){
$('#testvideo').get(0).play();
}).mouseout(function() {
$('#testvideo').get(0).pause();
$('#testvideo').get(0).currentTime = 0;
})
});
我也尝试了以下
$(document).ready(function() {
$('.overlay').mouseenter.each(function(){
$('#testvideo').get(0).play();
}).mouseout(function() {
$('#testvideo').get(0).pause();
$('#testvideo').get(0).currentTime = 0;
})
});
但这完全破坏了功能!
这是显示应该发生什么的小提琴: http : //jsfiddle.net/jameshenry/ejmfydfy/
该站点与实际站点之间的唯一区别是存在多个网格项和缩略图。 我也不希望这种行为是异步的,而是个人的-任何人都不知道我要去哪里哪里(我猜我的JavaScript!)
问题是您总是使用$('#testvideo')
,与您输入鼠标的div
无关。 由于HTML的id
属性必须是唯一的,因此只有您设置id testvideo
的第一个元素可以按您期望的方式工作。
您应该使用div.overlay
引用的video
标签,或者可以将CSS类添加到video
标签中,以便可以使用该类来查找视频。
下面的代码将获取叠加的视频,而与它无关。
$(document).ready(function() {
$('.overlay').hover(function() {
$(this).parent().find('video').get(0).play();
}, function() {
var video = $(this).parent().find('video').get(0);
video.pause();
video.currentTime = 0;
});
});
看一下您更新的小提琴 。
第一种方法应该可以,第二种则不能。 但是,如果有很多视频(每个.overley
元素一个),则不应使用#testvideo
这样的ID。 具有相同id的多个实例会产生意外的行为,例如“仅在第一个项目上工作” 。
你应该改变你的#testvideo
与.testvideo
和更改您的代码是这样的:
$(document).ready(function() {
$('.overlay').mouseenter(function(){
$(this).find('.testvideo').play();
}).mouseout(function() {
$(this).find('.testvideo').pause();
$(this).find('.testvideo').currentTime = 0;
})
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.