一定の HTML 要素を追加、削除、および DOM から並べ替える必要があるページに取り組んでいます。clone() を使用して DOM に追加するコードのすべてのブロックを含む非表示の DIV があります。sortable() は、すでに DOM にあるリスト項目では機能しますが、DOM の読み込みが完了した後に DOM に注入されたリスト項目では機能しません。例として簡略化した次のリストがあります。
<ul class="sprite-list">
<li>
<a href="#">
<img src="icon.png">
</a>
</li>
<li>
<a href="#">
<img src="icon.png">
</a>
</li>
<li class="sprite-add">
<a href="#">Add</a>
</li>
</ul>
次の jQuery コードを使用します。
$('ul.sprite-list').sortable({
items: 'li:not(.sprite-add)',
containment: 'parent',
opacity: 0.7
}).disableSelection();
そのリストをページにハードコーディングすると、うまく機能します。しかし、同じリストを DOM に複製した後、それらをドラッグ アンド ドロップできないようです。
sortable() の実際の動作例を読んで見ました。また、人々が.sortable('refresh') の使用を推奨しているのを見ました。だから私は試しました
$('ul.sprite-list').sortable('refresh');
また
$.fn.sortable('refresh');
しかし、すべて成功しませんでした。ここで何が欠けていますか?
編集: 複製されたコードを挿入した後、リストにはすべての並べ替え可能なリストが取得するクラスui-sortableがあることに気付きました。
編集2 :関連性があるかどうかはわかりませんが、別の関数を使用して複製された要素を取得します:
function cloneElement(element){
var container = $('#sprite-clone');
if(element == 'generationContainer'){
return container.find('.sprite-generation-container').clone(true);
}
else if(element == 'groupContainer'){
return container.find('.sprite-group-container').clone(true);
}
else if(element == 'sprite'){
return container.find('>li:first').clone(true);
}
else if(element == 'customForm'){
return container.find('.customForm').clone(true);
}
}
次に、必要なときに var generationContainer = cloneElement('generationContainer'); を使用します。それが何かに影響するかどうかはわかりません。