2012-01-17 2 views
2

Моя цель состоит в том, чтобы иметь один элемент при начальной загрузке, этот элемент должен иметь id = «something_ O», когда щелкнули ссылку на ссылку, под существующим элементом новый, тот же элемент html должен быть добавлен, а не с id = "something_o", но с id = "something_ ", или последний элемент + 1, а конкретно. Пользователь должен иметь возможность добавлять эти элементы бесконечно. Когда пользователь нажимает кнопку «Удалить», элемент должен исчезнуть.Как динамически добавлять элементы html с jquery?

Example of this case

Любые идеи? Here готова скрипка для облегчения помощи ...

+0

@DennisTraub, у меня есть проблемы с самого начала, как генерировать элементы ... –

+0

исх: http://api.jquery.com/clone/ И могли бы вы объяснить, почему вы хотите сохранить подсчитанные идентификаторы? На самом деле, я не вижу смысла использовать их с помощью css, потому что вам понадобятся все возможные идентификаторы. – Yoshi

+0

@Yoshi, спасибо, мне нужен идентификатор для извлечения данных позже, id css не должен быть id, может быть классом. Я рассматриваю его клон(). –

ответ

3
var counter = 1; 
$('.AddEl').live('click', function() { 
    var el = $('#element_1').clone().attr('id', 'element_' + ++counter).appendTo('body'); 
}); 

$('.RemoveEl').live('click', function() { 
    var el = $(this).parents('.elem') 
    if (el.get(0).id !== 'element_1') el.remove(); 
}); 

Check this here

+0

Спасибо, элемент_0 должен быть съемным, всегда должен быть один элемент, не обязательно element_0 ?? –

+0

Я имею в виду, сначала [0] элемент sholud быть съемным, в вашем примере его нельзя удалить? –

+0

Что-то вроде этого: $ (this) .closest ('. Actions'). Parent(). Remove(); но что один элемент всегда остается? –

3

Один из способов сделать это:

$(document).ready(function() { 
    $('body').on('click', '.AddEl', function() { 
     $('.actions:first') 
      .parent() 
      .clone() 
      .attr('id', 'element_' + $('.actions').length) 
      .insertAfter($('.actions:last').parent()); 
    }); 
    $('body').on('click', '.RemoveEl', function() { 
     $(this).closest('.actions').parent().remove(); 
    }); 
}); 

JS Fiddle demo.

Пожалуйста, обратите внимание, что я изменен ваш HTML, так что первый элемент клонировать теперь id="element_0", и целенаправленное, что и все впоследствии созданные элементы, с помощью селектора CSS:

div[id^=element] { 
    /* css */ 
} 

Это может быть упрощенными, но это просто мои первые мысли.


Отредактировано предложить немного улучшенную версию, в том, что первоначальное добавление немного, или кажется немного более кратким, а также имеет средства для предотвращения дублирования id s генерируется, если добавляются элементы/удалены:

$(document).ready(function() { 
    $('body').on('click', '.AddEl', function() { 
     var $elems = $('.actions').parent(); 
     $elems 
      .first() 
      .clone() 
      .insertAfter($elems.last()); 
     $('div[id^="element_"]').each(
      function(i){ 
       $(this).attr('id','element_' + i); 
      }); 
    }); 
    $('body').on('click', '.RemoveEl', function() { 
     $(this).closest('.actions').parent().remove(); 
    }); 
}); 

JS Fiddle demo.

+0

Если он хотел сохранить перечисление, начинающееся с 1, он мог бы просто добавить +1 к этой строке: '.attr ('id', 'element_' + $ ('. Actions'). Length + 1)' – Connum

+0

Он мог, но это кажется немного ненужным, и я должен отредактировать в поправке, чтобы убедиться, что при удалении и добавлении дублирующий идентификатор не создается ... –

Смежные вопросы