Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как "очистить" clone() (https://javascript.ru/forum/misc/57087-kak-ochistit-clone.html)

skeef 19.07.2015 01:32

Как "очистить" clone()
 
Всем привет!
Вызываю модальное окно. В нем клонирую div с внутренностями:
var clon = $('.dotted-field select.cat_1').parent().prev().clone(true);
clon.insertBefore($('.parent_level'));

Нормально происходит клонирование и вставка в нужное место.
Закрываю окно.
Вновь открываю модальное окно, клонирую div - вставляется уже две копии.
Если закрыть/открыть окно еще раз - будет вставлено три копии и т.д.

Как обнулять clone чтобы при каждом новом открытии модального окна вставлялась только одна копия?
Спасибо

kostyanet 19.07.2015 09:03

Проверять что в прошлый раз уже было вставлено и больше не вставлять.

skeef 19.07.2015 10:01

Дело в том, что это большой каталог. И вставлять необходимо в разные места. При этом каждая вставка не дублируется содержимым. Просто каждый раз количество вставляемых блоков увеличивается на 1

join 19.07.2015 10:12

можно каждый раз очищать, если проверка чем то не устраивает.

$('.parent_level').empty()

skeef 19.07.2015 10:34

Нет, это не правильно как-то, вставлять 5 блоков, а потом удалять 4.
Получается решения нет.
Ок, попробую сделать средствами ajax
Всем спасибо за помощь

kostyanet 19.07.2015 10:48

Походу ТС нужно было оправдание для своего бреда насчет аякса.

Цитата:

Сообщение от skeef
Просто каждый раз количество вставляемых блоков увеличивается на 1

Ну вот видите, остается только подсчитать _там_ количество этих блоков и, если оно 0 - вставить, иначе - пропустить.

kostyanet 19.07.2015 10:52

Можно как в фильме Шестой день помечать клоны точкой:

if(!$('.parent_level').data('cloned'){
   var clon = $('.dotted-field select.cat_1').parent().prev().clone(true);
   clon.setAttibute('cloned',1);
   clon.insertBefore($('.parent_level'));
}



За правильность жикверной проверки не ручаюсь, ибо не знаю жиквери, смысл и так понятен.

skeef 19.07.2015 11:13

Все оказалось гораздо проще: я опрашиваю селекты по событию onChange и тут же вставляю новый селект, который понятное дело изменился (он же вставляется с тем же id да еще и последним). Поэтому событие и вызывается несколько раз.
Короче сам лоханулся.
Спасибо всем за помощь

kostyanet:
Классная идея! Возьму на вооружение, Спасибо

рони 19.07.2015 11:17

Цитата:

Сообщение от kostyanet
clon.setAttibute('cloned',1);

либо clon[0].setAttibute('data-cloned',1);
или
clon.data('cloned',1);
ну и синтаксис в условии
if(!$('.parent_level').data('cloned')){
идея понятна, но при нормальном алгоритме клонирования дубликатов вложения не возникает
на всякий случай: ставить и проверять 'cloned' надо на одном и том же элементе.


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