javascript dom对象数组?
我的文档中有一些对象。我在“each”方法中从这些对象创建一个数组,并尝试在另一个“each”方法中获取它们。我在控制台中为两个“each”方法编写数组。元素匹配,但其位置不匹配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("---
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()中,我再次绑定它的事件。选中此项: