Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вернуть div и все вложенные в него элементы в первоначальное состояние? (https://javascript.ru/forum/misc/53950-kak-vernut-div-i-vse-vlozhennye-v-nego-ehlementy-v-pervonachalnoe-sostoyanie.html)

Erolast 25.02.2015 15:29

Цитата:

Чем провинился JS? Почему вдруг стало невозможным его использование?
Не будь занудой. Я имел в виду "без сторонних модулей".

Цитата:

Не совсем понял что смешного в этом подходе? То, что его еще кто-от использует?
Абсолютно ничего смешного. Тот же реакт можно использовать только для V.
Вот только ты предлагаешь велосипедить все самому, когда уже есть готовые решения.

ksa 25.02.2015 19:47

Цитата:

Сообщение от Erolast
Не будь занудой.

Я еще и зануда... :D Самое главное в споре это обозвать оппонента. :yes:

Цитата:

Сообщение от Erolast
Вот только ты предлагаешь велосипедить все самому, когда уже есть готовые решения.

А ты предлагаешь начать присоединять сторонние фреймворки! :D И это ради нескольких строк кода...

lucky89 26.02.2015 06:52

так не работает
 
Цитата:

Сообщение от ksa (Сообщение 358369)
Запасной вариант!
Иметь некий див-заготовку. Его внутренности просто клонировать в твой див-форму. Причем делать это всякий раз при его открытии. Прибил внутренности у дива-формы, клонировал внутренности из дива-заготовки - вот тебе и девственная форма заказа

Может я не правильно понял, но вроде я так пробовал и написал в начале, что не получилось. Делал так:
var tmp = div.html(); //Сохранил в переменную чистый код
программа отработала...
div.html(tmp); //Вставил чистый код на место
Итог: формы чистые, но дальше ничего не работает, так как слетели все ранее определенные переменные, а именно все что было связано с DOM внутри div:
var $ffcDiv = $('#ffcDiv');
var $ffcManagerName = $('#ffcManagerName');
var $ffcClientName = $('#ffcClientName');
и т.д.
Можно, конечно, при чистке их каждый раз переопределять, но если я так подойду к созданию всех необходимых в будущем подобных div'ов, то боюсь получить лагающий портал...

Erolast 26.02.2015 08:56

Цитата:

Самое главное в споре это обозвать оппонента.
А? Это "обозвал" теперь называется? :blink:
Цитата:

А ты предлагаешь начать присоединять сторонние фреймворки! И это ради нескольких строк кода...
Я что-то не уверен, что на этих нескольких строках дело закончится.
Цитата:

Можно, конечно, при чистке их каждый раз переопределять, но если я так подойду к созданию всех необходимых в будущем подобных div'ов, то боюсь получить лагающий портал...
Вот именно поэтому и следует использовать бэкбон/реакт - они за тебя позаботятся, что надо перерисовывать и что нет (реакт особенно).
http://facebook.github.io/react/
https://babeljs.io/docs/usage/jsx/

ksa 26.02.2015 09:03

Цитата:

Сообщение от lucky89
не получилось

При клонировании "внутренностей" использование ИД недопустимо. :nono: Т.к. ИД должно быть уникально на странице.

В итоге у тебя должна быть такая структура

<div id='box-form'>
   <!-- тут будет работать пользователь -->
</div>
<div id='box-template'>
   <!-- тут размещаются пустые элементы -->
</div>

У ключевых элементов должен быть свой "уникальный" класс. И обращаться к ним нужно будет "через призму" родителя, т.е. так

var $ffcDiv = $('#box-form .ffcDiv');
var $ffcManagerName = $('#box-form .ffcManagerName');
var $ffcClientName = $('#box-form .ffcClientName');

ksa 26.02.2015 09:04

Erolast, делай как знаешь... :D Зануда. :p

lucky89 26.02.2015 18:24

Цитата:

ИД должно быть уникально на странице
Это конечно. Так он у меня был и есть уникальный.
div.html(tmp); - ничего не дублирует. Она совсем удаляет старое содержимое из div и вставляет туда код из переменной. Получается элементы со старыми ИД пропадают, а на их местах новые "пустые" элементы с такими же ИД. Я так понимаю, что с точки зрения DOM это абсолютно другие элементы и, по этому, ранее определенные всякие $ffcClientName = $('#ffcClientName'); слетают. Если определить по новой, то все работает.
И вот вопрос: что с точки зрения производительности лучше, все множество вложенных элементов поштучно вернуть к начальному состоянию или же обнулить html в div'e вышеуказанным способом и переопределить все переменные? Или как-то иначе?
PS: сторонние тяжеленные фреймверки для таких задач использовать не буду, так как очевидно, что даже поштучное восстановление элементов средствами jquery менее затратно по вычислительным ресурсам и объему кода. Я и jquery не хотел применять, но решил, что не осилю все нюансы кросбраузерности средствами голого js, так что пусть будет - спасет от множества недочетов.

ksa 26.02.2015 18:41

Цитата:

Сообщение от lucky89
ранее определенные всякие $ffcClientName = $('#ffcClientName'); слетают. Если определить по новой, то все работает.

Используй делегирование...
http://api.jquery.com/on/


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