Как заполнить пробел, созданный удаленным div

#javascript #html #css

Вопрос:

У меня есть страница HTML5. Я хочу, чтобы следующий div автоматически заполнял пробел при динамическом удалении верхнего div с помощью кнопки. В настоящее время, когда я удаляю верхний div, образуется большой пробел. Следующий div не будет двигаться вверх, чтобы автоматически заполнить пробел.

Перед удалением некоторого div выбора: введите описание изображения здесь

После удаления для некоторого выбора div: введите описание изображения здесь

Вот код, который я использую:

 <style>
    .field{ display: inline; }
</style>   

<button class="button3" type="button" id="add_more">Add Discipline</button><p>  

<script>
$('#add_more').click(function(e){
    e.preventDefault();
      current_id;
    $("p").before("           <div class='field' id="  current_id   ">         <select style="min-height:30px;min-width:100px;" name="   current_id    ">n"  
        "                        <option value="All Disciplines" selected disabled hidden>--Select--</option>n"  
        "                        <option value="All Disciplines" name="discipline_name_all2">All Disciplines</option>n"  
        "                        {% for discipline in query_results %}n"  
        "                        <option value="{{ discipline.name }}" name="discipline_name2">{{ discipline.name }}</option>n"  
        "                        {% endfor %}n"  
        "                    </select>amp;ensp;amp;nbsp;n"  
        "                    <button class="button4" type="button" onclick="delete_button_clicked2(this.id)" id="  current_id   ">amp;#x2716;</button></div><br><br>");

    console.log(current_id);
});
    
function delete_button_clicked2(id) {      
    var sel = document.getElementById(id);    
    sel.remove();
}
</script>
 

Комментарии:

1. Привет, насколько я понимаю, вы хотите заполнить оставшееся пространство элемента оболочки , если дочерний div display: none , верно ?

2. да, если средний div удален, другой div должен автоматически заполнить пробел

3. Используйте flexbox , дочерние элементы автоматически займут место в случае удаления одного или нескольких элементов.

Ответ №1:

Проблема, с которой вы столкнулись, заключается в том, что вы удаляете div, но не разрывы.

     $("p").before("           <div class='field' id="  current_id   ">         <select style="min-height:30px;min-width:100px;" name="   current_id    ">n"  
    "                        <option value="All Disciplines" selected disabled hidden>--Select--</option>n"  
    "                        <option value="All Disciplines" name="discipline_name_all2">All Disciplines</option>n"  
    "                        {% for discipline in query_results %}n"  
    "                        <option value="{{ discipline.name }}" name="discipline_name2">{{ discipline.name }}</option>n"  
    "                        {% endfor %}n"  
    "                    </select>amp;ensp;amp;nbsp;n"  
    "                    <button class="button4" type="button" onclick="delete_button_clicked2(this.id)" id="  current_id   ">amp;#x2716;</button>
<!-- These two br will stay... -->
</div><br><br>");
 

Если вы разместите их внутри div, удаление будет работать, не оставляя места позади.

Вот рабочий пример:

 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
    .field{ display: inline; }
</style>   

<button class="button3" type="button" id="add_more">Add Discipline</button><br><p>  

<script>
var current_id = 0;
$('#add_more').click(function(e){
    e.preventDefault();
      current_id;
    $("p").before("<div class='field' id="  current_id   "><select style="min-height:30px;min-width:100px;" name="   current_id    ">n"  
        "                        <option value="All Disciplines" selected disabled hidden>--Select--</option>n"  
        "                        <option value="All Disciplines" name="discipline_name_all2">All Disciplines</option>n"  
        "                        {% for discipline in query_results %}n"  
        "                        <option value="{{ discipline.name }}" name="discipline_name2">{{ discipline.name }}</option>n"  
        "                        {% endfor %}n"  
        "                    </select>amp;ensp;amp;nbsp;n"  
        "                    <button class="button4" type="button" onclick="delete_button_clicked2(this.id)" id="  current_id   
        // <br><br> inside the div
        ">amp;#x2716;</button><br><br></div>"); 

    console.log(current_id);
});
    
function delete_button_clicked2(id) {      
    var sel = document.getElementById(id);    
    sel.remove();
}
</script> 

Ответ №2:

использовать для блока с выбором:

 display: flex;
flex-direction: column;