这里,它虽然有点hackish ...
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]
来“解开”jQuery对象=以获取我的元素。
我认为我有问题的主要原因是因为我不知道如何使用jQuery数组与我可以循环的索引。 – Henryz