我有一个对象数组。这些对象的属性之一是对 DOM 元素的 jQuery 引用,该元素可能在任何给定时间实际附加到 DOM,也可能不附加到 DOM;
例如:
Array = [{
name : 'whatever 1',
element : $('<div id="item_1" class="item"><img src="" /></div>')
},
{
name : 'whatever 2',
element : $('<div id="item_2" class="item"><img src="" /></div>')
}];
当这个数组保持不变时,我可以毫无问题地将这些元素分离并附加到 DOM,并在元素上使用标准的 jQuery 方法。
例如:
Array[0].element.find('img');
...会正常工作。
但是,如果我对这个数组进行排序或拼接,我会丢失引用。
我理解发生这种情况的原因,但我想知道的是,是否存在这样的情况,以便在对整个数组本身进行排序或拼接时,可以不断地更改、附加、分离、修改该元素?
提前致谢。
编辑:
这是我的重新排列功能的代码示例:
rearrangeItems : function(){
var self = this;
var offset = 0;
// get number of items that are less than insertindex
for(var i = 0; i < self.cache.selecteditems.length; i++) {
if(self.cache.selecteditems[i] < self.cache.rearrangepos){
offset++;
}
}
//subtract the offset from the intended insertion index
var rearrangeindex = self.cache.rearrangepos - offset;
var removedItems = [];
//sort the selected element indexes into ascending order
self.cache.selecteditems.sort(function (a, b) {
if (a < b) return -1;
else if (b < a) return 1;
return 0;
});
//remove the selected array elemens from the overall array and push them into the temporary array
for(var i = 0; i < self.cache.selecteditems.length; i++) {
var index = self.cache.selecteditems[i];
removedItems.push(self.cache.items.splice(index - removedItems.length, 1)[0]);
}
//Add the selected array elements back into the main array at the correct insertion point
self.cache.items.splice.apply(self.cache.items, [rearrangeindex, 0].concat(removedItems));
}
调用此函数时,所有数组元素都按预期重新排序。
在重新排序之前,我可以执行以下操作:
self.cache.items[index].html.find('img');
然而,之后,它将导致一个空对象(html 属性等同于我上面示例中的 element 属性)。