如何缩短重复的jQuery?

如何缩短重复的jQuery?,jquery,Jquery,我想知道如何缩短这段代码,这样就不会重复了。我尝试了一个ID为的数组,但没有成功 代码如下: /* Autoplays the videos on open */ $('#modal-video1').on('shown.bs.modal', function () { $(this).find('video')[0].play(); }) $('#modal-video2').on('shown.bs.modal', function () { $(this).find('

我想知道如何缩短这段代码,这样就不会重复了。我尝试了一个ID为的数组,但没有成功

代码如下:

/* Autoplays the videos on open */

$('#modal-video1').on('shown.bs.modal', function () {
    $(this).find('video')[0].play();
})

$('#modal-video2').on('shown.bs.modal', function () {
    $(this).find('video')[0].play();
})

$('#modal-video3').on('shown.bs.modal', function () {
    $(this).find('video')[0].play();
})

/* Stops and resets the videos on close */

$('#modal-video1').modal({
    show: false
}).on('hidden.bs.modal', function(){
    $(this).find('video')[0].pause();
    $(this).find('video')[0].load();
});

$('#modal-video2').modal({
    show: false
}).on('hidden.bs.modal', function(){
    $(this).find('video')[0].pause();
    $(this).find('video')[0].load();
});

$('#modal-video3').modal({
    show: false
}).on('hidden.bs.modal', function(){
    $(this).find('video')[0].pause();
    $(this).find('video')[0].load();
});

提前谢谢

对于代码的第一部分,您可以执行以下操作 bind会改变这个上下文

$('modal-video1').on('show.bs.modal',play.bind(this))
$('modal-video2').on('show.bs.modal',play.bind(this))
$('modal-video3').on('show.bs.modal',play.bind(this))
函数播放(){
$(this.find('video')[0].play();
}

使用多选择器-有关更多信息,请参阅。您的代码如下所示:

$('#modal-video1, #modal-video2, #modal-video3').on('shown.bs.modal', function () {
    $(this).find('video')[0].play();
});

$('#modal-video1, #modal-video2, #modal-video3').modal({
    show: false
}).on('hidden.bs.modal', function(){
    var video = $(this).find('video')[0];
    video.pause();
    video.load();
});

可以在jQuery中使用逗号分隔选择器。此外,还可以链接函数,并将查询结果存储在变量中,而不是重复代码:

$('#modal-video1, #modal-video2, #modal-video3').modal({
    show: false
})

/* Plays the video on open */
.on('shown.bs.modal', function () {
    $(this).find('video')[0].play();
})

/* Stops and resets the videos on close */
.on('hidden.bs.modal', function() {
    var video = $(this).find('video')[0];
    video.pause();
    video.load();
});

您可以将选择器放在数组中并使用jQuery。每个要在数组中迭代并将jQuery应用于数组中的每个条目,另一个选项是为选择器使用类而不是id。假设您可以控制HTML的结构,显而易见的解决方案是为所有这些项添加一个公共类,而不是唯一的ID。我想你错过了视频加载和暂停的部分!这比原来的有了很大的改进,但请注意选择器仍然是重复的,正如
$(此)。在hidden.bs.modal handler中查找('video')[0]
。谢谢各位,我犯了一个愚蠢的错误,不必要地包装了每个ID。问题解决了,为这样一个新手道歉!