Ответ 1
$('#parent2').prepend($('#table1_length')).prepend($('#table1_filter'));
не работает для вас? Я думаю, что это должно...
Я использую плагин jQuery DataTables. Я хотел бы переместить окно поиска (.dataTables_filter) и количество записей для отображения выпадающего списка (.dataTables_length) из своего родительского элемента (.dataTables_wrapper) в другой div на моей странице без потери зарегистрированного поведения javascript. Например, в окне поиска есть функция, прикрепленная к событию "keyup", и я хочу сохранить это неповрежденным.
DOM выглядит так:
<body>
<div id="parent1">
<div class="dataTables_wrapper" id="table1_wrapper">
<div class="dataTables_length" id="table1_length">
<select size="1" name="table1_length">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</div>
<div class="dataTables_filter" id="table1_filter">
<input type="text" class="search">
</div>
<table id="table1">
...
</table>
</div>
</div>
<div id="parent2">
<ul>
<li><a href="#">Link A</a></li>
<li><a href="#">Link B</a></li>
<li><a href="#">Link C</a></li>
</ul>
</div>
</body>
Вот что я хотел бы, чтобы DOM выглядел после перемещения:
<body>
<div id="parent1">
<div class="dataTables_wrapper" id="table1_wrapper">
<table id="table1">
...
</table>
</div>
</div>
<div id="parent2">
<div class="dataTables_filter" id="table1_filter">
<input type="text" class="search">
</div>
<div class="dataTables_length" id="table1_length">
<select size="1" name="table1_length">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</div>
<ul>
<li><a href="#">Link A</a></li>
<li><a href="#">Link B</a></li>
<li><a href="#">Link C</a></li>
</ul>
</div>
</body>
Я смотрел функции .append(),.appendTo(),.prepend() и .prependTo(), но на практике их не было. Я также посмотрел на функции .parent() и .parents(), но, похоже, не может кодировать работоспособное решение. Я также рассмотрел возможность изменения CSS, чтобы элементы были абсолютно позиционированы, но, честно говоря, страница настраивается с элементами жидкости по всему телу, и я действительно хочу, чтобы эти элементы были размещены у их новых родителей.
Любая помощь с этим очень ценится.
$('#parent2').prepend($('#table1_length')).prepend($('#table1_filter'));
не работает для вас? Я думаю, что это должно...
Как ответ Jage полностью удаляет элемент, включая обработчики событий и данные, я добавляю простое решение, которое этого не делает, благодаря функции detach
.
var element = $('#childNode').detach();
$('#parentNode').append(element);
Detach
не требуется.
Ответ (с 2013 года) прост:
$('#parentNode').append($('#childNode'));
Согласно http://api.jquery.com/append/
Вы также можете выбрать элемент на странице и вставить его в другой:
.$(". Контейнер ') добавить ($ (' h2' ));
Если выбранный таким образом элемент вставляется в одно место в другом месте DOM, он будет перемещен в цель (не клонирован).
Основываясь на полученных ответах, я решил сделать быстрый плагин для этого:
(function($){
$.fn.moveTo = function(selector){
return this.each(function(){
var cl = $(this).clone();
$(cl).appendTo(selector);
$(this).remove();
});
};
})(jQuery);
Использование:
$('#nodeToMove').moveTo('#newParent');
Попробуйте следующее:
var kids = $('#table1_wrapper').children();
$.each(kids, function(){
$('#table1_wrapper').remove($(this));
$('#anotherdiv').append($(this));
});