javascript dom对象数组?

javascript dom对象数组?,javascript,jquery,arrays,each,Javascript,Jquery,Arrays,Each,我的文档中有一些对象。我在“each”方法中从这些对象创建一个数组,并尝试在另一个“each”方法中获取它们。我在控制台中为两个“each”方法编写数组。元素匹配,但其位置不匹配 var deletedObjects = []; $(".active").each(function (index) { var deletedObject = $(this); console.log(deletedObject.position()); console.log("---

我的文档中有一些对象。我在“each”方法中从这些对象创建一个数组,并尝试在另一个“each”方法中获取它们。我在控制台中为两个“each”方法编写数组。元素匹配,但其位置不匹配

var deletedObjects = [];

$(".active").each(function (index) {
    var deletedObject = $(this);

    console.log(deletedObject.position());
    console.log("-------------------------------------");

    deletedObjects.push(deletedObject);
    deletedObject.delay(100 * index).fadeOut(100);

}).promise().done(function () {
    console.log("Same list again");
    console.log("-------------------------------------");
    $.each(deletedObjects,function(){
        console.log($(this).position());
        console.log("-------------------------------------");
    });
});
console.log输出

Object {top: 80, left: 160} 
------------------------------------- 
Object {top: 80, left: 200} 
------------------------------------- 
Object {top: 80, left: 240} 
------------------------------------- 
Same list again
------------------------------------- 
Object {top: 0, left: 0} 
------------------------------------- 
Object {top: 0, left: 0}
------------------------------------- 
Object {top: 0, left: 0} 
------------------------------------- 

这个代码是不是
deletedObject.delay(100*index).fadeOut(100)每秒钟前运行?为什么元素位置会改变?如何解决此问题?

发生这种情况是因为第二部分在
.promise().done
上运行,并且动画是一个promise,因此只有在第一部分中的所有元素淡出后才会执行。我通过将第二部分移出进行了测试,它确实使用原始元素位置打印:

var deletedObjects = [];

$(".active").each(function (index) {
    var deletedObject = $(this);

    console.log(deletedObject.position());
    console.log("-------------------------------------");

    deletedObjects.push(deletedObject);
    deletedObject.delay(100 * index).fadeOut(100);

});

console.log("Same list again");
console.log("-------------------------------------");
$.each(deletedObjects, function () {
    console.log($(this).position());
    console.log("-------------------------------------");
});

有两种解决办法。第一个是:将位置对象推到第二个数组中并引用该数组

第二项工作如下: fadeOut()最后设置对象样式
显示:“无”
。正如@Arun P Johny所解释的,非显示元素不再有位置。因此,我们在不可接受的短时间内将display属性切换为其默认值,选择elements位置,然后将display设置回none

我仅显示包含您承诺的代码片段。完成回调:

}).promise().done(function () {
    console.log("Same list again");
    console.log("-------------------------------------");
    $(deletedObjects).css('display', '')
        .each(function(){
            console.log($(this).position());
            console.log("-------------------------------------");
        })
        .css('display', 'none');
});

由于这种方法比较昂贵,而且有点迂回,我希望使用第二个数组。

元素位置已更改,因为它不再显示。。。是,动画(
fadeOut
)在每秒钟之前执行。。。因为您已将该代码作为完成回调附加到动画队列promise@ArunPJohny谢谢但是我怎样才能修复它呢为什么要使用
promise().done()
?可以尝试使用另一个类似属性的id吗?我猜淡出可能会改变div的位置,因为有一个事件,我在第一个“each”方法之前停止它,在promise().done()中,我再次绑定它的事件。选中此项: