Restore removed element with jquery

0

The div.mega-posts element is inside a menu, nav , that element, when depending on the resolution, goes inside the element ul#overflow where it is not necessary, and then remove with .remove() . So far, the problem now is to return with div.mega-posts to its original location. It only comes back when the page is refreshed. What I want is to remove this element only when it is within ul#overflow .

PS: I would not refuse a solution in DOM.

var mainNav = $( 'nav ul > li.more > ul#overflow' ); mainNav.find( 'div.mega-posts' ).remove();

window.onresize = navigationResize;
navigationResize();

function navigationResize() {  
  $('#nav li.more').before($('#overflow > li'));
  
  var $navItemMore = $('#nav > li.more'),
  		$navItems = $('#nav > li:not(.more)'),
      navItemMoreWidth = navItemWidth = $navItemMore.width(),
      windowWidth = $(window).width(),
      navItemMoreLeft, offset, navOverflowWidth;
  
  $navItems.each(function() {
    navItemWidth += $(this).width();
  });
  
  navItemWidth > windowWidth ? $navItemMore.show() : $navItemMore.hide();
    
  while (navItemWidth > windowWidth) {
    navItemWidth -= $navItems.last().width();
    $navItems.last().prependTo('#overflow');
    $navItems.splice(-1,1);
  }
  
  navItemMoreLeft = $('#nav .more').offset().left;
  navOverflowWidth = $('#overflow').width();  
  offset = navItemMoreLeft + navItemMoreWidth - navOverflowWidth;
    
  $('#overflow').css({
    'left': offset
  });
}
body {
  font-family: lato,arial;
  overflow-y: scroll;
}
nav {
  background: #c00;
  overflow: hidden;
}
.mega-posts {
  height:200px;
  border:5px solid green;
  background:#ddd;
}
nav ul {
  margin: 0 0 2em;
}
nav ul li {
  float: left;
  list-style:none;
  padding:0
}
nav ul li.more {
  width: 3em;
  text-align: center;
  display: none;
}
nav ul li.more:hover ul#overflow {
  opacity: 1;
  visibility: visible;
}
nav ul li a,
nav ul li span {
  display: block;
  background: #c00;
  color: #fff;
  text-decoration: none;
  padding: 1em;
  cursor: pointer;
  transition-duration: .3s;
}
nav ul li a:hover,
nav ul li span:hover {
  background: #e00;
}
nav ul ul {
    position: absolute;
    top: auto;
    left: auto;
    overflow: inherit;
    padding: 0;
    word-wrap: break-word;
    z-index: 99;
}

nav ul ul ul {
    top: 0;
    left: 100%;
    width: 200px;
}

nav ul ul li {
    float: none;
    width: 200px;
    position: relative;
}
nav ul ul li  {
    word-wrap: break-word;
}
nav ul ul,
nav ul#overflow li ul {
    display: none
}
nav ul li:hover>ul,
nav ul#overflow li:hover > ul {
    display: block;
}
nav #overflow {
  opacity: 0;
  visibility: hidden;
  position: absolute;
  text-align: left;
  transition-duration: .3s;
}
nav #overflow li {
  float: none;
}
nav #overflow li a {
  background: #00c;
  white-space: nowrap;
}
nav #overflow li a:hover {
  background: #00e;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><nav><ulid="nav">
    <li><a href="#">Home</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Lorem 1</a></li>
    <li><a href="#d">Lorem ipsum 2</a></li>
    <li><a href="#">Lorem 7</a></li>
          <li class="has-children"><a href="#"><i class="sth-nav-icon fa fa-table"></i>MEGA POSTS<small class="sth-nav-badge" style="background: blue">beta</small></a>
          <ul class="sub-menu">
            <div class="mega-posts">
              <h1>Mega Posts</h1>
            </div>
            <li><a href="#">Schiller</a></li>
            <li><a href="#">Gogol</a></li>
            
            <li><a href="#">Dostoievski</a></li>
            <li><a href="#">Immanuel Kant</a></li>
          </ul>
        </li>
    <li><a href="#">Lorem 10</a></li>
    <li class="more">
      <span>[MORE]</span>
      <ul id="overflow"></ul>
    </li>
  </ul>
</nav>
    
asked by anonymous 14.07.2018 / 16:08

0 answers