Метод jQuery clone перемещает вложенный элемент ввода за пределы родительского

0

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

например, оригинальная структура (упрощенная)

<fieldset><div><input /></div></fieldset>

Клонированный исход:

<fieldset><div></div></fieldset><input />

Вот ссылка JSfiddle, показывающая проблему в действии: jsfiddle

  • 0
    это из-за использования селекторов, так как вы используете .find() и andSelf() соответствующий набор элементов, который используется в insertBefore() , отличается от того, который был возвращен clone() - jsfiddle.net/arunpjohny/ VRRuf / 1
Теги:
clone

1 ответ

2
Лучший ответ

Проблема связана с тем фактом, что вы используете инкрементные атрибуты id и пытаетесь вычислить следующий в последовательности "на лету". Это всегда проблематично и редко является лучшим решением.

Используйте атрибуты class для группировки похожих элементов - для чего они предназначены. Ваш код становится намного проще.

<div id="insert-placeholder"></div>
<fieldset class="template-image-upload-wrapper">
    <legend>Image upload</legend>
    <div class="form-group">
        <div class="col-md-12">
            <input class='template_image_upload' class='form-control input-md' title='Upload an image.' name='editPage' type='file' value='' /> 
            <span class="help-block"></span>    
        </div>
    </div>
</fieldset>
$(".template-image-upload-wrapper").clone(false).insertBefore("#insert-placeholder");

Обновленная скрипка

  • 0
    Или просто внесите изменения в атрибут после вставки элемента: jsfiddle.net/oGeez/7fxZ4/2
  • 0
    @oGeez Я не говорю, что невозможно добиться того, что пытается сделать ОП, я просто советую против этого, так как это приводит к увеличению головной боли. Использование классов намного проще и лучше семантически.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню