HTML динамические элементы имеют разные размеры - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть список, который может иметь до двух уровней.Первый уровень представляет страны, а второй представляет штаты или провинции.

Я могу динамически добавлять новые страны или штаты, используя jQuery.При добавлении эти новые записи добавляются в базу данных, которые затем сохраняются для будущих поисков.

Теперь каждая запись представлена ​​span, и каждая добавляемая страна или штат использует ту же структуру, что иих другие братья и сестры.Проблема заключается в том, что при создании с помощью jQuery, хотя каждый элемент имеет одинаковые предложения, эти новые дочерние элементы визуализируются по-разному.

Рабочий пример можно найти в следующей тестовой платформе .

Я использую Thymeleaf для начальной загрузки элементов, и этот код используется.

<div class="country-container">
    <th:block th:each="country : ${countries}">
        <div class="country-row">
            <span class="father">
                <i class="fa fa-eye child-toggle"></i>
                <textarea class="data" maxlength="50" rows="1" cols="25" th:text="${country.countryPk}"></textarea>
                <p>Cód: </p>
                <textarea class="country-code" maxlength="4" rows="1" cols="4" th:text="${country.countryCode}"></textarea>
                <i class="fa fa-plus-circle add-province"></i>
                <i class="fa fa-minus-circle delete-country"></i>
            </span>
            <div class="child-container">
                <th:block th:each="province : ${country.provinceSet}">
                    <span class="child">
                        <i class="fa fa-minus-circle delete-province"></i>
                        <textarea class="data" rows="1" cols="25" th:text="${province.provinceId.provincePk}"></textarea>
                         <p>Núm: </p>
                         <textarea class="province-number"
                                  maxlength="2"
                                  rows="1"
                                  cols="4" 
                                  th:text="${province.provinceNumber}">
                         </textarea>
                        <i class="fas fa-arrow-circle-right info-province"></i>
                    </span>
                </th:block>
            </div>
        </div>
    </th:block>
</div>

Это мой код, используемый в jQuery для создания новой провинции или штата.

// Add a new province container to a country row
$(document).on('click', '.add-province', function() {

    // Span where the province's father country name is located
    var father = $(this).closest('.father');
    // Father country's row
    var countryRow = $(father).closest('.country-row');
    // Provinces' container
    var childContainer = $(father).next('div.child-container');
    var actionContainer = $('<div class="action-holder full-width add-span">');
    var addProvinceButton = $('<button type="button" class="add-province-button extra-small green">Agregar</button>');

    // If there is no child container (div where all the provinces are) we need to add one to the country row
    if(childContainer.length === 0) {
        childContainer = $('<div class="child-container">');
        $(countryRow).append(childContainer);
    }

    // Set up the span where the province will be located at
    var newChild = $('<span class="child">');
    var minusIcon = $('<i class="fa fa-minus-circle delete-province"></i>');
    var textArea = $('<textarea class="data" rows="1" cols="25"></textarea>');
    var textProvinceNumber = $('<textarea class="province-number" maxlength="2" rows="1" cols="4"></textarea>' +
        '</textarea>');

    // Append the elements to our child
    newChild.append(minusIcon);
    newChild.append(textArea);
    newChild.append($('<p>Num: </p>'));
    newChild.append(textProvinceNumber);

    // Append the new child to his father
    childContainer.append(newChild);
    actionContainer.append(addProvinceButton);
    actionContainer.append($('<p class="cancel-text">Cancelar</p>'));
    newChild.append(actionContainer);

    // Focus on the text box of the new province row
    textArea.focus();
});

Просмотр списка при первоначальной загрузке.

enter image description here

Просмотр списка после добавления новой провинции.

enter image description here

Просмотр структуры HTML после добавления провинции.

enter image description here

Итак, мой вопрос: почему, хотя все дети имеют одинаковую структуру, размеры и стили CSS, они выглядят по-разному?

1 Ответ

0 голосов
/ 27 ноября 2018

Элементы в строке неявно используют display:inline-block, и в этом случае пробел, который находится в разметке между тегами html, действительно имеет значение.Строка, которая создается статически, имеет значительный пробел, но элементы, добавленные с помощью jQuery, не имеют их.Эти пробельные элементы хорошо видны в инспекторе, как на этом скриншоте

screenshot

Возможные решения для решения этой проблемы можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...