| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Клонирование нод с заменой атрибутов |
| Автор: dm9 2.10.2007, 12:51 |
| Добрый день. Мне необходимо решить следующую задачу: клонирование ноды со всеми потомками с последующей подменой атрибутов name и id всех этих потомков. Если более широко описывать задачу, есть некоторый набор параметров (input-ов), которые описывают некоторый документ. Необходимо на одной странице дать пользователю возможность создания любого количества таких документов. При этом все документы находятся в одной форме, и при сабмите input-ы разных документов должны отправиться на сервер, очевидно, с разными именами (префиксами). Есть несколько вариантов. 1. Использование готового решения. Подскажете, какого? 2. Рекурсивное клонирование через DOM. Есть ли здесь подводные камни? 3. Работа через innerHTML с заменой атрибутов регулярками ;) Какой вариант использовали бы Вы, и почему? Возможно, я какого-то варианта ещё не учёл? AJAX и создание нод заранее прошу не предлагать, интересует чисто клиентское JS-решение. Причина: AJAX для нас слишком дорогой, создание достаточного количества нод заранее (на сервере) уже сделали, генерация получается слишком долгая. |
| Автор: dsCode 2.10.2007, 12:54 |
| третий вариант (т.к. быстрее innerHTML будет работать), но вперемешку со вторым |
| Автор: dm9 2.10.2007, 13:07 |
| А вперемешку -- это как? Клонируемые ноды должны по вёрстке располагаться одна под другой. |
| Автор: cruelangel 2.10.2007, 13:11 |
| > очевидно, с разными именами (префиксами) совершенно не очевидно если на сервере php, то он умеет образовывать массивы из такого: <input name="name[]" value="a" /> <input name="name[]" value="b" /> <input name="name[]" value="c" /> если что-то другое, то нужно парсить post-данные руками. |
| Автор: dsCode 2.10.2007, 13:52 | ||
smartov,
вполне, может быть и опасным (в конкретной реализации), я вообще отстраненно сказал, из расчета оптимизации по скорости. Создание элементов через DOM, на мой взгляд, тоже более красивое и удобо-редактируемое в дальнейшем. Но innerHTML будет работать быстрее (особенно, если его не конкатенатить (строку собирать), а писать сначала части в массив, а потом join('') сделать - самый быстрый вариант). Но DOM, повторю, мне кажется более гибким и в каких-то реализациях - более правильным даже (хоть он и медленней). |
| Автор: Се ля ви 2.10.2007, 16:33 |
| Второй. Думаю, камней особых не будет, если грамотно написать - но в тебе я не сомневаюсь Добавлено через 7 минут и 19 секунд Вот! Как раз как smartov советует |
| Автор: dm9 4.10.2007, 16:08 |
| smartov, спасибо большое. Попробую сделать именно так. Меня больше всего смущало как раз (временное) наличие одинаковых идентификаторов. А это нигде ошибок в консоль не бросает? |
| Автор: smartov 4.10.2007, 17:52 |
| dm9, Попробуй - узнаешь У меня не бросало. Потому что в этом ничего такого нет. Можешь попробовать сделать просто страничку с двумя элементами с одинаковым id и проверить что будет. Чаще всего просто ничего не вернется по getElementById, в остальном от браузера зависит - undefined behavior в общем, но не ошибка. |