I have a simple JS function that removes certain classes while clicking on a "filter menu". The problem is that I don't know how to show those removed classes once I click on "All" i.e.
I can't use display:none
, opacity:0
or visibility:hidden
, I need to pletely remove the DOM.
Thanks for any help.
$(document).on("click",".all",function(){$(".campaign,.editorial,.lookbook,.portrait").appendTo("body")})
$(document).on("click",".cam",function(){$(".editorial,.lookbook,.portrait").detach()})
$(document).on("click",".edi",function(){$(".campaign,.lookbook,.portrait").detach()})
$(document).on("click",".loo",function(){$(".campaign,.editorial,.portrait").detach()})
$(document).on("click",".por",function(){$(".campaign,.editorial,.lookbook").detach()})
.all,.cam,.edi,.loo,.por {cursor:pointer}
<script src=".1.1/jquery.min.js"></script>
<div class=all>All</div>
<div class=cam>Campaign</div>
<div class=edi>Editorial</div>
<div class=loo>Lookbook</div>
<div class=por>Portrait</div><br>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
I have a simple JS function that removes certain classes while clicking on a "filter menu". The problem is that I don't know how to show those removed classes once I click on "All" i.e.
I can't use display:none
, opacity:0
or visibility:hidden
, I need to pletely remove the DOM.
Thanks for any help.
$(document).on("click",".all",function(){$(".campaign,.editorial,.lookbook,.portrait").appendTo("body")})
$(document).on("click",".cam",function(){$(".editorial,.lookbook,.portrait").detach()})
$(document).on("click",".edi",function(){$(".campaign,.lookbook,.portrait").detach()})
$(document).on("click",".loo",function(){$(".campaign,.editorial,.portrait").detach()})
$(document).on("click",".por",function(){$(".campaign,.editorial,.lookbook").detach()})
.all,.cam,.edi,.loo,.por {cursor:pointer}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class=all>All</div>
<div class=cam>Campaign</div>
<div class=edi>Editorial</div>
<div class=loo>Lookbook</div>
<div class=por>Portrait</div><br>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
Share
Improve this question
asked Aug 4, 2017 at 9:50
FedericoFederico
1,4202 gold badges20 silver badges41 bronze badges
6
- Check this: stackoverflow./questions/2026386/… – Himanshu Shekhar Commented Aug 4, 2017 at 9:56
-
2
And why can't you just hide them, it would make it a lot easier than using
detach()
– adeneo Commented Aug 4, 2017 at 9:57 - @HimanshuShekhar I tried already to clone the element but when I 'append' it nothing happens actually. – Federico Commented Aug 4, 2017 at 9:57
- 1 Possible duplicate of temporarily removing and later reinserting a DOM element? – 31piy Commented Aug 4, 2017 at 9:58
- @adeneo just cause I'm using a plugin that doesn't allow hiding or better I can hide but they still be visible. – Federico Commented Aug 4, 2017 at 9:58
2 Answers
Reset to default 3https://jsfiddle/wingsofwind/g579m7ux/
You can collect removed elements into array than remove them by using remove()
You can append them back into the body later on.
/* remove all*/
var allelements = [];
$("div").each(function(){
allelements.push($(this)); // we push all divs into an array than remove them
$(this).remove();
});
/* add back */
setTimeout(function(){ // You can remove This
for(var i = 0 ; i<allelements.length; i++){
$("body").append(allelements[i]); // we append all elements back into body
}
},1000) // also remove This
.all,.cam,.edi,.loo,.por {cursor:pointer}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class=all>All</div>
<div class=cam>Campaign</div>
<div class=edi>Editorial</div>
<div class=loo>Lookbook</div>
<div class=por>Portrait</div><br>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
<div class=campaign>CAMPAIGN</div>
<div class=editorial>EDITORIAL</div>
<div class=lookbook>LOOKBOOK</div>
<div class=portrait>PORTRAIT</div>
It may be possible by using temporary variable.
$(document).ready(function() {
var toBeDeleted = $('.p-tag');
$('#buttonRemove').on('click',function(event) {
event.preventDefault();
$(toBeDeleted).remove();
});
$('#buttonAdd').on('click',function(event) {
event.preventDefault();
if ($('body').find('.p-tag').length == 0) {
$('body').append(toBeDeleted);
}
});
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button" class="" id="buttonRemove">Remove</button>
<button type="button" class="" id="buttonAdd">Add</button>
<p class="p-tag">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea modo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>