Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组无法与$.makeArray一起正常工作_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript数组无法与$.makeArray一起正常工作

Javascript数组无法与$.makeArray一起正常工作,javascript,jquery,arrays,Javascript,Jquery,Arrays,我正在尝试使用jQuery从页面上的一组div中生成一个数组。我基本上想随机显示它们的方式,所以现在,我只是尝试循环浏览它们。一切似乎都正常,除了我只看到最后一个数组项,即使它执行动作的次数与数组中的元素相同,并且添加了正确的行为 JS是: <script> $(document).ready(function(){ var obj = $('.item'); var arr = $.makeArray(obj); $('.array').html('');

我正在尝试使用jQuery从页面上的一组div中生成一个数组。我基本上想随机显示它们的方式,所以现在,我只是尝试循环浏览它们。一切似乎都正常,除了我只看到最后一个数组项,即使它执行动作的次数与数组中的元素相同,并且添加了正确的行为

JS是:

<script>
$(document).ready(function(){
    var obj = $('.item');
    var arr = $.makeArray(obj);
    $('.array').html('');

    $.each(arr, function(k,v){
        $('.array').html(v).fadeIn(250).delay(2000).fadeOut(250);
    });
});
</script>
我得到的只是一个div,文本“第四个”淡入淡出4次。这告诉我它在数组中进行迭代(因为它使用的是计数),但是为什么我只看到最后一个元素呢?有人有什么想法吗

谢谢


T

在循环的每次迭代中,循环都会覆盖数组div的内容。因此,您只能看到最后一次迭代的结果

当您使用
.html(…)
时,它与
.empty().append(…)
相同。因此,循环所做的是在一行中清空内容4次,只有最后一次清空之后的追加才会真正生效

如果您希望元素一个接一个地淡出/淡出,您可以这样做:

$(document).ready(function(){
    var obj = $('.item');
    $('.array').html('');

    obj.each(function(i){
        $('.array').append($(this).hide().delay(i * 2500).fadeIn(250).delay(2000).fadeOut(250));
    });
});
$(document).ready(function(){
    var obj = $('.item').detach();

    var count = obj.length;
    var target = $('.array');
    var display = function(i) {
        var element = $(obj[i]);
        var cb = (i < count-1) ? function(){display(i+1)} : function(){};
        element.appendTo(target).hide().fadeIn(250).delay(2000).fadeOut(250, cb);
    };
    display(0);
});

您可以看到它在这里运行:

循环在循环的每次迭代中都会覆盖数组div的内容。因此,您只能看到最后一次迭代的结果

当您使用
.html(…)
时,它与
.empty().append(…)
相同。因此,循环所做的是在一行中清空内容4次,只有最后一次清空之后的追加才会真正生效

如果您希望元素一个接一个地淡出/淡出,您可以这样做:

$(document).ready(function(){
    var obj = $('.item');
    $('.array').html('');

    obj.each(function(i){
        $('.array').append($(this).hide().delay(i * 2500).fadeIn(250).delay(2000).fadeOut(250));
    });
});
$(document).ready(function(){
    var obj = $('.item').detach();

    var count = obj.length;
    var target = $('.array');
    var display = function(i) {
        var element = $(obj[i]);
        var cb = (i < count-1) ? function(){display(i+1)} : function(){};
        element.appendTo(target).hide().fadeIn(250).delay(2000).fadeOut(250, cb);
    };
    display(0);
});

您可以看到它在这里运行:

另外值得一提的是,对effect方法的调用不会阻塞。这就是为什么循环在第一个效果出现之前就已经完成了

您不会说您真正想要什么,但如果您希望每个元素都被追加,并一个接一个地出现/消失,您可以执行以下操作:

$(document).ready(function(){
    var obj = $('.item');
    $('.array').html('');

    obj.each(function(i){
        $('.array').append($(this).hide().delay(i * 2500).fadeIn(250).delay(2000).fadeOut(250));
    });
});
$(document).ready(function(){
    var obj = $('.item').detach();

    var count = obj.length;
    var target = $('.array');
    var display = function(i) {
        var element = $(obj[i]);
        var cb = (i < count-1) ? function(){display(i+1)} : function(){};
        element.appendTo(target).hide().fadeIn(250).delay(2000).fadeOut(250, cb);
    };
    display(0);
});
$(文档).ready(函数(){
var obj=$('.item').detach();
变量计数=对象长度;
var target=$('.array');
变量显示=功能(i){
var元素=$(obj[i]);
var cb=(i
实际上不需要使用
$.makeArray()


另外值得一提的是,对effect方法的调用不会阻塞。这就是为什么循环在第一个效果出现之前就已经完成了

您不会说您真正想要什么,但如果您希望每个元素都被追加,并一个接一个地出现/消失,您可以执行以下操作:

$(document).ready(function(){
    var obj = $('.item');
    $('.array').html('');

    obj.each(function(i){
        $('.array').append($(this).hide().delay(i * 2500).fadeIn(250).delay(2000).fadeOut(250));
    });
});
$(document).ready(function(){
    var obj = $('.item').detach();

    var count = obj.length;
    var target = $('.array');
    var display = function(i) {
        var element = $(obj[i]);
        var cb = (i < count-1) ? function(){display(i+1)} : function(){};
        element.appendTo(target).hide().fadeIn(250).delay(2000).fadeOut(250, cb);
    };
    display(0);
});
$(文档).ready(函数(){
var obj=$('.item').detach();
变量计数=对象长度;
var target=$('.array');
变量显示=功能(i){
var元素=$(obj[i]);
var cb=(i
实际上不需要使用
$.makeArray()



啊,我明白了!那么,您能建议我在这里应该做些什么来正确输出div吗?我添加了一个简单的解决方案,但我看到您在编写代码时接受了Felix的方法;)是的,对不起我需要把它放好。现在,如果我能找到一种方法让它停在悬停状态,我会笑的!啊,是的,
i*number
要简单得多。。。忘了那件事;)(已经给了你+1)我真的不明白I*号是干什么的。你能给我指个地方看看这个吗?我需要在上面添加一个循环和一个悬停,所以我想进一步了解这一点。谢谢。啊,我明白了!那么,您能建议我在这里应该做些什么来正确输出div吗?我添加了一个简单的解决方案,但我看到您在编写代码时接受了Felix的方法;)是的,对不起我需要把它放好。现在,如果我能找到一种方法让它停在悬停状态,我会笑的!啊,是的,
i*number
要简单得多。。。忘了那件事;)(已经给了你+1)我真的不明白I*号是干什么的。你能给我指个地方看看这个吗?我需要在上面添加一个循环和一个悬停,所以我想进一步了解这一点。谢谢。+1,这似乎是一个合理的假设和一个很好的解决方案。太好了,万分感谢!我实际上是想创建一个自定义的横幅旋转木马类型的解决方案,所以这工作得非常好!阿普。我不能接受两个答案。我认为你的两个答案都提供了可行的选择。谢谢费利克斯的努力,非常感谢。@tadywankenobi:不客气:)@Martin的回答比我的好。+1,这似乎是一个合理的假设和一个很好的解决方案。太好了,非常感谢!我实际上是想创建一个自定义的横幅旋转木马类型的解决方案,所以这工作得非常好!阿普。我不能接受两个答案。我认为你的两个答案都提供了可行的选择。谢谢费利克斯的努力,非常感谢。@tadywankenobi:不客气:)@Martin的回答比我的好。