Я пытаюсь написать в jQuery функцию, которая будет разбивать списки - или, на самом деле, любой элемент, у которого есть дочерние элементы - который осознает использование памяти и является достаточно общим, чтобы его можно было многократно использовать, но у меня возникают проблемы с их разрешением друг против друга.
Ради аргумента (и для сохранения кода), скажем, я пытаюсь разделить список на два списка после третьего элемента. Я не проверяю свой код на наличие синтаксических ошибок или чего-то еще - надеюсь, вы поймете, что я пытаюсь сделать.
Первый вариант - написать такую функцию:
var list = $('ul.listCopy');
var newList = $('<ul class="listCopy" />');
var latterElements = list.children('li:gt(3)').remove();
newList.append(latterElements);
list.after(newList);
Это замечательно, но работает только до тех пор, пока я знаю тип и атрибуты элемента. Мне пришлось бы написать отдельную функцию, если бы я разделял div с несколькими div внутри, или OL, или что-то еще. Если у элемента есть класс, роль или какой-либо другой атрибут html, я хочу иметь возможность скопировать его, не беспокоясь о том, какие пользовательские атрибуты могут появиться в будущем. Я хочу сделать это достаточно общим, чтобы справиться с любым элементом. Это второй вариант:
var list = //something
var newList = list.clone();
newList.children(':lt(4)').remove();
list.children(':gt(3)').remove();
Это достаточно общее, чтобы я мог сделать копию чего угодно, но проблема в том, что я делаю копию всего списка. Если мне понадобится использовать эту программу для разделения особенно длинного списка, я буду беспокоиться о последствиях для памяти.
Идеальная вещь, которую я хотел бы сделать, - это сделать копию элемента, но скопировать только сам элемент, без дочерних элементов. Я не хочу копировать что-либо, что я собираюсь в конечном итоге удалить. Есть ли способ сделать что-то подобное? Большинство плагинов и функций, которые я видел, выбирают так или иначе.
Спасибо!