Удаление div со смещением

97
13 апреля 2021, 09:00

Есть блок .container в который динамически с помощью jquery добавляются div блоки нумерованные от 0 до 9. Требуется сделать удаление их но так, чтобы например при удалении element-5 был порядок не

element-4
element-6
...

а

element-4
element-5
...

jQuery(document).ready(function($) { 
 
  // Добавление динамически div 
  var i = 1; 
  $(document).on("click", ".btn-add", function() { 
    $(".container").append('<div class="element element-'+i+'">'+i+' <a href="#" class="btn-del element-'+i+'">Del</a></div>'); 
    i++; 
  }); 
 
  // Удаление div 
  $(this).on("click", ".btn-del", function() { 
    $(this).closest('.element').remove(); 
  }); 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
 
<a href="#" class="btn-add">Add</a> 
 
<div class="container"> 
  <div class="element element-0">0 <a href="#" class="btn-del element-0">Del</a></div> 
</div>

Answer 1

Это конечно и на JS можно организовать, но думаю проще будет переделать считалку на CSS:

jQuery(document).ready(function($) { 
 
  // Добавление динамически div 
  var i = 0; 
  $(document).on("click", ".btn-add", function() { 
    $(".container").append('<div class="element element-'+(i+1)+'"><span class="count">'+(i+1)+'</span> <a href="#" class="btn-del element-'+(i+1)+'">Del</a></div>'); 
    i++; 
  }); 
  // Удаление div 
  $(this).on("click", ".btn-del", function() { 
    $(this).closest('.element').remove(); 
    i--; 
     
    var element = document.querySelectorAll('.element'); 
    var btnDel = document.querySelectorAll('.btn-del'); 
    var count = document.querySelectorAll('.count'); 
    for( var номер = 0; номер < element.length; номер++ ){ 
      element[номер].className = element[номер].className.replace(/ element-\d+/g, ""); 
      btnDel[номер].className = btnDel[номер].className.replace(/ element-\d+/g, ""); 
      element[номер].classList.add('element-' + номер); 
      btnDel[номер].classList.add('element-' + номер); 
      count[номер].textContent = номер; 
    } 
  }); 
});
<a href="#" class="btn-add">Add</a> 
 
<div class="container"> 
  <div class="element element-0"><span class="count">0</span> <a href="#" class="btn-del element-0">Del</a></div> 
</div>

Answer 2

add.addEventListener("click",()=>{ 
  let key = elements.children.length, 
  el = document.createElement("div"); 
  el.classList.add("element", "element-" + key); 
  el.dataset.key = key; 
  el.addEventListener("click",()=>{ 
let next = el, 
     i = Number(next.dataset.key);; 
while(next = next.nextElementSibling) { 
  next.dataset.key = i; 
  next.classList.replace("element-" + (++i), "element-" + (i - 1)); 
} 
el.parentNode.removeChild(el); 
  }); 
  elements.appendChild(el); 
})
#elements > div { 
  padding: 12px; 
  background-color: green; 
} 
 
#elements > div::before { 
  content: attr(class); 
} 
 
#elements > div:nth-child(2n) { 
  background-color: red; 
}
<button id="add">добавить</button> 
<div id="elements"></div>

READ ALSO
Как получить children из this (не jQuery)

Как получить children из this (не jQuery)

Как получить детей из this(не jQuery) this

122
Деструктуризация массива в JavaScript

Деструктуризация массива в JavaScript

Изучаю деструктуризацию в JavaScriptМожно вытащить четные элементы из массива так

107
Как зафиксировать сайт при открытии меню на Safari

Как зафиксировать сайт при открытии меню на Safari

Всем приветУ меня есть сайт, который делаю

73