如何缩短重复的jQuery?

时间:2017-04-26 23:14:56

标签: 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('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();
});

提前致谢!

3 个答案:

答案 0 :(得分:1)

你可以用逗号分隔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();
});

答案 1 :(得分:0)

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

的上下文



$('#modal-video1').on('shown.bs.modal',play.bind(this))

$('#modal-video2').on('shown.bs.modal',play.bind(this))

$('#modal-video3').on('shown.bs.modal',play.bind(this))

function play(){
 $(this).find('video')[0].play();
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

使用多重选择器 - 有关详细信息,请参阅Multiple Selector in jQuery。您的代码将如下所示:

$('#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();
});