我正在处理一个页面,该页面需要从 DOM 中添加、删除和排序常量 HTML 元素。我有一个隐藏的 DIV,其中包含我使用 clone() 的所有代码块,并将其附加到 DOM。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'); 我不确定这是否会影响任何事情。