我有HTML标记,通过点击添加行按钮,然后在其之前克隆并插入一个视觉上隐藏的HTML元素,该元素是添加新按钮的兄弟。
<div class='wrapper'>
<div class="container">
<div class="sortable">
<div class="ui-state-default">
<div class="container">
<div class="sortable">
<div class="ui-state-default">Item 1</div>
<div class="ui-state-default">Item 2</div>
<div class="ui-state-default hidden">Hidden</div> <a href="#" class="add-button"> Add New Sub </a>
</div>
</div>
</div>
<div class="ui-state-default hidden">
<div class="container">
<div class="sortable">
<div class="ui-state-default">Item 1</div>
<div class="ui-state-default">Item 2</div>
<div class="ui-state-default hidden">Hidden</div> <a href="#" class="add-button"> Add New Sub </a>
</div>
</div>
</div> <a href="#" class="add-button"> Add New </a>
</div>
</div>
这是JS代码:
function sortableInit(container) {
container.find('.sortable').sortable({
axis: 'y',
cursor: 'move',
items: '> .ui-state-default',
});
}
$(function () {
$(".container").each(function () {
sortableInit($(this));
});
$('.wrapper').on('click', '.add-button', function (e) {
e.preventDefault();
e.stopPropagation();
var hidden = $(e.target).siblings('.hidden').clone(true).removeClass('hidden');
hidden.insertBefore($(e.target));
});
});
这是jsfiddle link,让我更加了解我想要做的事情。
当您运行jsfiddle时,单击Add New按钮,对于新添加的元素,尝试对元素Item 1和Item 2进行排序。虽然它们可以被拖动,但无法排序。
注意: div.ui-state-default元素可以包含任何深度级别的div.container元素(嵌套的可重复字段组)。
答案 0 :(得分:2)
你使它变得比它需要的更复杂。而不是尝试进行深度克隆(.clone(true)
),只需在克隆项目上调用sortableInit()
。
$('.wrapper').on('click', '.add-button', function (e) {
e.preventDefault();
e.stopPropagation();
var hidden = $(e.target).siblings('.hidden').clone().removeClass('hidden'); //Removed 'true' from clone
hidden.insertBefore($(e.target));
sortableInit(hidden); //This added.
});