Ответ 1
var el = $('#wrapper').detach();
$("#open_menu").click(function(){
$(this).append(el);
});
Я отсоединил div и хочу снова подключить его, нажав на кнопку.
Здесь код:
$('#wrapper').detach();
$("#open_menu").click(function(){
ATTACH HERE !!!
});
Любая помощь будет оценена.
var el = $('#wrapper').detach();
$("#open_menu").click(function(){
$(this).append(el);
});
Мне понадобилось решение, которое будет работать, даже если есть другие элементы после отсоединения целевого элемента и последующего повторного подключения. Это означает, что append
может быть ненадежным, потому что он перенесет этот элемент обратно в конец своего родителя. Мне пришлось использовать заполнитель, который может быть не самым элегантным решением, но я не нашел другого способа.
var $wrapper = $('#wrapper')
, $placeholder = $('<span style="display: none;" />').insertAfter( $wrapper )
;
$wrapper.detach();
$("#open_menu").on('click',function(){
$wrapper.insertBefore( $placeholder );
$placeholder.remove();
});
Чтобы сделать это более многоразовым, было бы лучше обернуть его в плагин jQuery:
(function($){
$.fn.detachTemp = function() {
this.data('dt_placeholder',$('<span style="display: none;" />').insertAfter( this ));
return this.detach();
}
$.fn.reattach = function() {
if(this.data('dt_placeholder')){
this.insertBefore( this.data('dt_placeholder') );
this.data('dt_placeholder').remove();
this.removeData('dt_placeholder');
}
else if(window.console && console.error)
console.error("Unable to reattach this element "
+ "because its placeholder is not available.");
return this;
}
})(jQuery);
Использование:
var $wrapper = $('#wrapper').detachTemp();
$("#open_menu").on('click',function(){
$wrapper.reattach();
});
если вы хотите, чтобы ваш элемент был прикреплен в начале элемента, который вы могли бы использовать .prepend()
в противном случае вы могли бы присоединить его, используя append().
в вашем случае это будет:
var $wrapper = $('#wrapper').detach();
$("#open_menu").click(function(){
//ATTACH HERE !!!
$(this).prepend($wrapper); // or $(this).append($wrapper);
});
Надеюсь, это поможет:)
$(function(){
var detached = $('#element_to_detach').detach();
// Here We store the detach element to the new variable named detached
$('.element_after_which_you_need_to_attach').after(detached);
});
var $wrapper = $('#wrapper').detach();
$("#open_menu").click(function(){
$(this).append($wrapper[0])
});
Я думаю, что это во многом вопрос записи индекса элемента, который будет отсоединен, до его отсоединения, а затем используя этот индекс для определения места для повторного прикрепления элемента. Рассмотрим следующий "repl" https://repl.it/@dexygen/re-attach и код ниже. setTimeout
- это просто, чтобы вы могли видеть элемент на странице, прежде чем он будет отсоединен, и несколько элементов были переименованы. Интересно, можно ли использовать siblings
вместо parent().children()
, но меня беспокоит то, что происходит в том случае, когда отдельный брат является единственным элементом среди братьев и сестер, и нам нужна ссылка на parent
в любом случае для добавления if index === 0
.
setTimeout(function() {
var bar = $('#bar');
var parent = bar.parent();
var index = parent.children().index(bar);
bar.detach();
$("#re-attach").one('click', function() {
if (index === 0) {
parent.prepend(bar);
}
else {
parent.children().eq(index-1).after(bar);
}
});
}, 5000);
jQuery не предлагает метод attach. Считайте, что отсоединение является эквивалентом постоянного удаления элемента из Dom. Если вы считаете, что можете удалить и позже вернуть элемент, рассмотрите следующие параметры:
Вышеупомянутые не являются только двумя способами для достижения этого, однако они просто и, вероятно, не потребуют большого количества изменений кода на вашем конце.