私はオブジェクトの配列を持っています。これらのオブジェクトのプロパティの 1 つは、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 プロパティは、上記の例の要素プロパティに相当します)。