如何循环遍历一组jQuery元素—一次4个
How do I cycle through a group of jQuery elements - 4 at a time?
我有点糊涂了。基本上,我有16 span元素在我的页面上显示品牌。我想一次只显示4个品牌,然后设置一个间隔来显示接下来的4个品牌,直到我到达最后,此时我将重置计数器并重新开始。我是这么想的:
- 显示所有品牌跨元素
- 将所有品牌元素放入数组
- 统计前4个项目(品牌),并给他们的类别可见 5秒后,隐藏所有class为visible的元素
- 显示数组中接下来的4个项目
- 当到达数组结束时,重置计数器并重新开始
谢谢:)
这里,虽然有点粗俗…
var elems = $( 'span' ).hide().get();
(function loop () {
var i = 0, pointer;
pointer = $( elems ).filter( ':visible:last' )[0] || $( elems ).last()[0];
$( elems ).hide();
while ( i < 4 ) {
pointer = $( pointer ).next()[0] || $( elems ).first()[0];
$( pointer ).show();
i += 1;
}
setTimeout( loop, 5000 );
})();
现场演示: http://jsfiddle.net/hBrt6/
如果您需要代码的解释,请告诉我…
一些解释:
.get()
返回jQuery对象中DOM元素的数组。
$( 'div' ).get()
给出页面上所有DIV元素的数组。
使用属性访问操作符[i]
将从jQuery对象中获得第i个DOM元素。
$( 'div' )[4]
返回页面上的第五个DIV元素。
重要的是要理解不能在DOM元素本身(或DOM元素数组)上调用jQuery对象。
这
$( 'div' )[4].hide();
抛出错误。DOM元素没有hide
方法。
如果你想在一个jQuery对象中瞄准一个特定的元素,同时仍然保留一个jQuery对象,使用.eq()
。
$( 'div' ).eq( 4 ).hide();
就可以了。
现在您已经理解了这种差异,让我解释一下为什么我在代码中使用get()
和[i]
:问题是,我不喜欢将jQuery对象存储在变量中。相反,我更喜欢直接使用DOM元素和DOM元素数组。
当我需要在某些元素或元素数组上调用jQuery方法时,我只需首先将其包装在$()
函数中。
这
$( elems ).hide();
就可以了。
当jQuery方法完成这项工作时,我只需将.get()
或[0]
附加到"unwrap"jQuery对象=以获得我的元素。
如果数据以JavaScript对象的形式存在,那么你可以使用JQuery模板来呈现HTML。
您将执行以下操作
- 获取JavaScript对象数组中的所有数据(可能已经有了)
- 清空你要插入的目标元素容器(
$('#target').empty()
) - 切片数组,只有你想要的4个元素(
data.slice(index, index+4)
) - 以切片数组为模型将模板渲染到目标元素容器中(
$('#template').tmpl(slicedArray).appendTo('#target')
)
你应该能够用一个步进为4的for循环来执行步骤3。并且在模板中使用{{each}}
方法来遍历行创建。
好的,我的解决方案将是动态和简单的,因为我认为是可能的。我很擅长制作这样的东西,也很擅长jQuery和JavaScript,所以我想试试这个。我将在这里写下我能想到的最好的代码,并告诉你在哪里需要编辑其他代码。
$("#ContainerElement.span:gt(4)").hide();
var i = 0;
var b = setInterval("BrandChange();",5000);
function BrandChange()
{
$("#ContainerElement.span:eq(i),
#ContainerElement.span:eq(i+1),
#ContainerElement.span:eq(i+2),
#ContainerElement.span:eq(i+3)").hide(normal,function(){
i+=4;
if(i == 16) i = 0;
$("#ContainerElement.span:eq(i),
#ContainerElement.span:eq(i+1),
#ContainerElement.span:eq(i+2),
#ContainerElement.span:eq(i+3)").show(normal);
});
}
我要查找一些jQuery选择器来算出来,但这并不证明它的有效性,基本上它首先隐藏span元素元素拥有它们,这将需要一个id BrandChange"ContainerElement"开始一个区间的函数,淡出和隐藏了四个当前品牌,然后消失在了接下来的四个品牌,同时增加我变量计数,然后等待5秒钟的间隔再次发生。这不一定是你计划的方式,但我想你会发现它完全符合你的要求。如果你有任何问题,尽管问。:)
- 可以't附加html元素jquery
- 循环遍历元素jquery选择器
- 在ajax加载的元素jquery上包含现有的jquery函数
- 如何删除元素列表中的类并添加到另一个元素 Jquery.
- 获取单击的类元素 jQuery 的名称值
- 获取上一个元素 jQuery 的内容
- 根据另一个元素的更改获取一个元素(jquery)
- 区分不同的可拖放元素(jQuery 拖放)
- 除了最后一个<td>元素-Jquery
- 获取子元素jQuery的单选按钮值
- 捕获元素jquery外部的mousedown事件
- .append到非DOM元素jQuery
- 获取其父元素的精确子元素.Jquery
- 获取重复结构中的特定元素jquery
- 捕获隐藏输入元素jQuery的值
- 使用onclick函数获取点击的元素jquery
- 返回父元素 jquery 中的输入值
- 按属性查找元素 jQuery
- 选择元素 jQuery
- 按子元素 - jQuery 的数据 ID 对 li 进行排序