有没有办法简化这个jQuery代码或者把它转换成一个循环之类的
Is there any way to simplify this jQuery code or convert it into a loop or something?
我在一个页面上使用多个jquery循环滑块,我正在工作,并为每个滑块使用相同的代码,只有id递增。我知道有一种方法可以用更简单的代码做到这一点。我试过.each()
,但它不起作用,所以有什么想法吗?
$('#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'
});
与大多数重复代码问题一样,您可以将不需要更改的部分封装到函数中。在这种情况下,最简单的解决方案是一个函数返回一个对象,并将next
和prev
的值作为参数。
function createCycleArg(nextVal, prevVal) {
return {
fx: 'fade',
timeout: 0,
speed: 750,
slideExpr: 'img',
next: nextVal,
prev: prevVal
};
}
,然后……
$('#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'));
你可以进一步细分,直接传入一个数字,因为这是唯一会改变的东西。
function createCycleArg(idNum) {
return {
fx: 'fade',
timeout: 0,
speed: 750,
slideExpr: 'img',
next: '#rest-' + idNum + ' .slider-next',
prev: '#rest-' + idNum + ' .slider-prev'
};
}
如果有一些jquery特定的方法来做得更好,我不知道,但一般来说,把重复的部分扔到一个函数中。
我想到了三种方法:创建一个以ID作为参数的函数,2。在数组中定义id并遍历数组,或者3。使用循环将循环计数器连接到ID字符串中。
所以,当我打字的时候,我看到另一个答案弹出选项1 -参见Ed S。的答案。
选项2,提前定义id列表(这对于任何格式的id都很有效,而不仅仅是编号的id):
var sliderIDs = ['#rest-1', '#rest-2', '#rest-3'];
$.each(sliderIDs, function(i,val) {
$(val + ' .rest-slider').cycle({
fx: 'fade',
timeout: 0,
speed: 750,
slideExpr: 'img',
next: val + ' .slider-next',
prev: val + ' .slider-prev'
});
});
选项3,老式循环计数器连接:
for (var i=1; i <= 3; i++) {
var id = '#rest-' + i;
$(id + ' .rest-slider').cycle({
fx: 'fade',
timeout: 0,
speed: 750,
slideExpr: 'img',
next: id + ' .slider-next',
prev: id + ' .slider-prev'
});
});
只需使用通用选择器,以及.each()
。
$('[id|="rest"] .rest-slider').each(function( i ) {
$(this).cycle({
fx: 'fade',
timeout: 0,
speed: 750,
slideExpr: 'img',
next: '#rest-' + (i+1) + ' .slider-next',
prev: '#rest-' + (i+1) + ' .slider-prev'
});
});
您应该在[id|="rest"]
之前放置正确的标签名称。
$.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'
});
})
未经测试,但这应该可以工作(假设ID是滑块的父)
$('.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'
});
});
相关文章:
- 创建一个循环来简化HTML和CSS代码
- 如何使用“;getElementById”;在一个循环中
- jQuery触发器事件在一个循环中多次出现
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 每第n个图像具有下一个循环的余数偏移
- CasperJS-如何治疗'单击'在一个循环中
- 我怎样才能把它变成一个循环,而不是一个递归函数
- 在一个循环中读取xml文件的所有节点
- ajax 返回带有循环的图像长度,检查最后一个循环
- JQuery Slider动画只发生一个循环
- JQuery 滑动一个表格形成,另一个循环滑动
- 如何跟踪有序列表中的顺序,该列表具有一个循环列表项,提供不同的参数
- Node.js:如何在一个循环中使用回调调用方法
- 我将如何批量添加大量 jquery 脚本,在一个循环中只有一个细微的差异
- 循环遍历 Angular HTTP 请求中的对象,等到响应后再运行下一个循环
- 从嵌套循环 Javascript 中的一个循环访问参数
- jQuery点击函数在for循环中只在最后一个循环中工作
- 我可以为 4 个不同的下拉列表创建一个循环吗?
- 翡翠模板在一个循环中有多个数组
- 仅使用一个循环生成嵌套数组