首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法简化这段jQuery代码,或者把它转换成循环之类的东西?

有没有办法简化这段jQuery代码,或者把它转换成循环之类的东西?
EN

Stack Overflow用户
提问于 2011-11-29 08:51:19
回答 5查看 111关注 0票数 0

我在我正在处理的单个页面上使用了多个jquery循环滑块,并且对每个滑块使用相同的代码,只是id在递增。我知道有一种方法可以用更简单的代码做到这一点。我已经尝试过.each(),但它不工作,所以有什么想法吗?

代码语言:javascript
复制
$('#rest-1 .rest-slider').cycle({
    fx: 'fade',
    timeout: 0,
    speed: 750,
    slideExpr: 'img',
    next: '#rest-1 .slider-next',
    prev: '#rest-1 .slider-prev'
});

$('#rest-2 .rest-slider').cycle({
    fx: 'fade',
    timeout: 0,
    speed: 750,
    slideExpr: 'img',
    next: '#rest-2 .slider-next',
    prev: '#rest-2.slider-prev'
});

$('#rest-3 .rest-slider').cycle({
    fx: 'fade',
    timeout: 0,
    speed: 750,
    slideExpr: 'img',
    next: '#rest-3 .slider-next',
    prev: '#rest-3 .slider-prev'
});
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-29 08:55:56

未经测试,但这应该可以工作(假设ID是滑块的父对象)

代码语言:javascript
复制
$('.rest-slider').each(function(){
    var id = '#' + $(this).parent().attr('id');
    $(id + ' .rest-slider').cycle({
        fx: 'fade',
        timeout: 0,
        speed: 750,
        slideExpr: 'img',
        next: id + ' .slider-next',
        prev: id + ' .slider-prev'
    });
});
票数 -1
EN

Stack Overflow用户

发布于 2011-11-29 08:54:49

与大多数重复代码的问题一样,您可以将不会更改的部分封装为一个函数。在这种情况下,最简单的解决方案是一个函数,它返回一个对象,并将nextprev值作为参数。

代码语言:javascript
复制
function createCycleArg(nextVal, prevVal) {
    return {
        fx: 'fade',
        timeout: 0,
        speed: 750,
        slideExpr: 'img',
        next: nextVal,
        prev: prevVal
    };
}

然后..。

代码语言:javascript
复制
$('#rest-1 .rest-slider').cycle(createCycleArg(
    '#rest-1 .slider-next', 
    '#rest-1 .slider-prev'));

$('#rest-2 .rest-slider').cycle(createCycleArg(
    '#rest-2 .slider-next', 
    '#rest-2 .slider-prev'));

$('#rest-3 .rest-slider').cycle(createCycleArg(
    '#rest-3 .slider-next', 
    '#rest-3 .slider-prev'));

你可以进一步分解它,传入一个数字,因为这是唯一变化的东西。

代码语言:javascript
复制
function createCycleArg(idNum) {
    return {
        fx: 'fade',
        timeout: 0,
        speed: 750,
        slideExpr: 'img',
        next: '#rest-' + idNum + ' .slider-next',
        prev: '#rest-' + idNum + ' .slider-prev'
    };
}

如果有一些特定的jquery方法可以做得更好,我不知道,但一般来说,将重复的部分放入一个函数中。

票数 0
EN

Stack Overflow用户

发布于 2011-11-29 08:56:58

代码语言:javascript
复制
$.each([1,2,3,4,5],function(i,v){
    $('#rest-'+v+' .rest-slider').cycle({
        fx: 'fade',
        timeout: 0,
        speed: 750,
        slideExpr: 'img',
        next: '#rest-'+v+' .slider-next',
        prev: '#rest-'+v+' .slider-prev'
    });
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8304437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档