Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Удаление добавление HTML кода (https://javascript.ru/forum/jquery/65976-udalenie-dobavlenie-html-koda.html)

EvgenStor 18.11.2016 16:33

Удаление добавление HTML кода
 
Смастерил вот такую конструкцию, но цикл не работает до конца (вторая часть скрипта), подскажите почему?
Должно работать все по кругу, появляться и исчезать при нажатии на кнопку.

<div class="add-cut">
<button class="add">Добавить</button>
</div>
<ul class="l1">
   <li class="it1">Название</li>    
   <li class="it2">Цена</li>    
 </ul>

$('.add').bind('click', function() {
  $('<ul class="l2"><li class="it1">Название</li><li class="item it2">Цена</li></ul>').insertAfter($('.l1'));
  $(".add-cut").empty();
  $('<button class="cut">Удалить</button>').prependTo($('.add-cut'));
});
 
$('.cut').bind('click', function() {
    $(".add-cut").empty();
  $('<button class="add">Добавить</button>').prependTo($('.add-cut'));
});

dd_smol 18.11.2016 17:03

Все же очевидно вы пытаетесь повесить обработчик на те элементы которые еще не созданы.

$('.add-cut').on('click', '.add, .cut', function ( e ) {
	if ( $( e.target ).hasClass('add') ) {
		$('.li').after('<ul class="l2"><li class="it1">Название</li><li class="item it2">Цена</li></ul>');
		$('.add-cut').html('<button class="cut">Удалить</button>');
	} else {
		$('.add-cut').html('<button class="add">Добавить</button>');
	}
});


Или так.

$('.add-cut').on('click', '.add, .cut', function ( e ) {
	var targetClass = e.target.className;

	$( e.target )
		.addClass( targetClass == 'add' ? 'cut' : 'add' )
		.text( targetClass == 'add' ? 'Удалить' : 'Добавить' )
		.removeClass( targetClass )
		.hasClass('add') &&
			$('.li').after('<ul class="l2"><li class="it1">Название</li><li class="item it2">Цена</li></ul>');
});

EvgenStor 18.11.2016 18:48

Rise, сходи в школу поучись "повторные телодвижения" это и есть цикл.

dd_smol,
К сожалению мне это не очевидно, я только поверхностно знаю Jquery, и я не могу дискутировать на эту тему. Но почему вы говорите
Цитата:

вы пытаетесь повесить обработчик на те элементы которые еще не созданы
На какой не созданный элемент я по вашему ссылаюсь?

Все что мне нужно, это что бы при нажатии на кнопку "удалить" HTML был в первоначальном состоянии, до нажатия на кнопку "Добавить". А далее я мог повторно использовать этот цикл сколько угодно раз, как сказал Rise "повторными телодвижениями".

Ваши предложенные варианты не работают так как мне надо.

Весь смысл в том что бы была возможность бесконечно добавлять и удалять (если не нужен) список <ul class="l2">

http://codepen.io/EvgenStor/pen/JbEjMP

EvgenStor 18.11.2016 20:46

Rise, воспользуйся своим советом сам, желчь проверь, явно избыток! Лучше по делу чего нибудь сказал, чем отрыжки свои извергать!

Кому интересно решение было найдено
$('.add-cut').on('click', '.add', function() {
  $(".add-cut").empty();
  $('<ul class="l2"><li class="it1">Название</li><li class="item it2">Цена</li></ul>').insertAfter($('.l1'));
  $('<button class="cut">Удалить</button>').prependTo($('.add-cut'));
});

$('.add-cut').on('click', '.cut', function() {
  $(".add-cut").empty();
  $('<button class="add">Добавить</button>').prependTo($('.add-cut'));
  $(".l2").empty();
});


Часовой пояс GMT +3, время: 20:48.